diff --git a/bin/asinit b/bin/asinit index 5e2a18d736..62822ea573 100755 --- a/bin/asinit +++ b/bin/asinit @@ -53,7 +53,7 @@ console.log([ " TypeScript configuration inheriting recommended AssemblyScript settings.", "", colors.cyan(" ./assembly/index.ts"), - " Exemplary entry file being compiled to WebAssembly to get you started.", + " Example entry file being compiled to WebAssembly to get you started.", "", colors.cyan(" ./build"), " Build artifact directory where compiled WebAssembly files are stored.", @@ -65,7 +65,7 @@ console.log([ " Main file loading the WebAssembly module and exporting its exports.", "", colors.cyan(" ./tests/index.js"), - " Exemplary test to check that your module is indeed working.", + " Example test to check that your module is indeed working.", "", colors.cyan(" ./package.json"), " Package info containing the necessary commands to compile to WebAssembly.", @@ -122,7 +122,7 @@ rl.question(colors.white("Do you want to proceed?") + " [Y/n] ", answer => { " ^ The optimized WebAssembly module using default optimization settings.", " You can change the optimization settings in '" + colors.cyan("package.json")+ "'.", "", - "To run the exemplary tests, do:", + "To run the tests, do:", "", colors.white(" npm test"), "", diff --git a/lib/loader/README.md b/lib/loader/README.md index fc4a87abd6..81c622af26 100644 --- a/lib/loader/README.md +++ b/lib/loader/README.md @@ -43,35 +43,25 @@ Besides demangling classes exported from your entry file to a handy object struc ``` * **__getString**(ptr: `number`): `string`
- Reads (copies) the value of a string from the module's memory. + Copies a string's value from the module's memory. ```ts var str = module.__getString(ptr); ... ``` -* **__allocArray**(id: `number`, values: `number[]`): `number`
- Allocates a new array in the module's memory and returns a reference (pointer) to it. - Automatically retains interior pointers. The `id` is the unique runtime id of the respective array class. If you are using `Int32Array` for example, the best way to know the id is an `export const INT32ARRAY_ID = idof()`. When done with the array, make sure to release it. - - ```ts - var ptr = module.__retain(module.__allocArray(module.INT32ARRAY, [1, 2, 3])); - ... - module.__release(ptr); - ``` +* **__getArrayBuffer**(ptr: `number`): `ArrayBuffer`
+ Copies an ArrayBuffer's value from the module's memory. * **__getArray**(ptr: `number`): `number[]`
- Reads (copies) the values of an array from the module's memory. + Copies an array's values from the module's memory. Infers the array type from RTTI. ```ts var arr = module.__getArray(ptr); ... ``` -* **__getArrayView**(ptr: `number`): `TypedArray`
- Gets a view on the values of an array in the module's memory. This differs from `__getArray` in that the data isn't copied but remains *live* in both directions. That's faster but also unsafe because if the array grows or becomes released, the view will no longer represent the correct memory region and modifying its values in this state will most likely corrupt memory. Use, but use with care. - - If the type of the array is known beforehand, the following even faster and even more unsafe helpers can be used that don't do any type checking: + If the type of the array is known beforehand, the following slightly faster helpers that don't infer the type can be used: **__getInt8Array**(ptr: `number`): `Int8Array`
**__getUint8Array**(ptr: `number`): `Uint8Array`
@@ -85,8 +75,24 @@ Besides demangling classes exported from your entry file to a handy object struc **__getFloat32Array**(ptr: `number`): `Float32Array`
**__getFloat64Array**(ptr: `number`): `Float64Array` -* **__getArrayBuffer**(ptr: `number`): `ArrayBuffer`
- Reads (copies) the data of an ArrayBuffer from the module's memory. +* **__getArrayView**(ptr: `number`): `TypedArray`
+ Gets a live view on the values of an array in the module's memory. Infers the array type from RTTI. + + This differs from `__getArray` in that the data isn't copied but remains *live* in both directions. That's faster but also unsafe because if the array grows or becomes released, the view will no longer represent the correct memory region and modifying its values in this state will most likely corrupt memory. Use, but use with care. + + If the type of the array is known beforehand, the following slightly faster helpers that don't infer the type can be used: + + **__getInt8ArrayView**(ptr: `number`): `Int8Array`
+ **__getUint8ArrayView**(ptr: `number`): `Uint8Array`
+ **__getUint8ClampedArrayView**(ptr: `number`): `Uint8ClampedArray`
+ **__getInt16ArrayView**(ptr: `number`): `Int16Array`
+ **__getUint16ArrayView**(ptr: `number`): `Uint16Array`
+ **__getInt32ArrayView**(ptr: `number`): `Int32Array`
+ **__getUint32ArrayView**(ptr: `number`): `Uint32Array`
+ **__getInt64ArrayView**(ptr: `number`): `BigInt64Array`
+ **__getUint64ArrayView**(ptr: `number`): `BigUint64Array`
+ **__getFloat32ArrayView**(ptr: `number`): `Float32Array`
+ **__getFloat64ArrayView**(ptr: `number`): `Float64Array` * **__retain**(ptr: `number`): `number`
Retains a reference to a managed object externally, making sure that it doesn't become collected prematurely. Returns the pointer. @@ -107,6 +113,16 @@ Besides demangling classes exported from your entry file to a handy object struc module.__release(ptr); ``` +* **__allocArray**(id: `number`, values: `number[]`): `number`
+ Allocates a new array in the module's memory and returns a reference (pointer) to it. + Automatically retains interior pointers. The `id` is the unique runtime id of the respective array class. If you are using `Int32Array` for example, the best way to know the id is an `export const INT32ARRAY_ID = idof()`. When done with the array, make sure to release it. + + ```ts + var ptr = module.__retain(module.__allocArray(module.INT32ARRAY, [1, 2, 3])); + ... + module.__release(ptr); + ``` + * **__instanceof**(ptr: `number`, baseId: `number`): `boolean`
Tests whether an object is an instance of the class represented by the specified base id. diff --git a/lib/loader/index.d.ts b/lib/loader/index.d.ts index c3dc305575..e494b13a28 100644 --- a/lib/loader/index.d.ts +++ b/lib/loader/index.d.ts @@ -22,66 +22,66 @@ interface ASUtil { /** Allocates a new array in the module's memory and returns a reference (pointer) to it. */ __allocArray(id: number, values: ArrayLike): number; - /** Reads (copies) the value of a string from the module's memory. */ + /** Copies a string's value from the module's memory. */ __getString(ptr: number): string; - /** Reads (copies) the values of an array from the module's memory. */ - __getArray(ptr: number): number[]; - /** Gets a view on the values of an array in the module's memory. */ - __getArrayView(ptr: number): ArrayBufferView; + /** Copies an ArrayBuffer's value from the module's memory. */ + __getArrayBuffer(ptr: number): ArrayBuffer; - /** Reads (copies) the values of Int8Array from the module's memory. */ + /** Copies an array's values from the module's memory. Infers the array type from RTTI. */ + __getArray(ptr: number): number[]; + /** Copies an Int8Array's values from the module's memory. */ __getInt8Array(ptr: number): Int8Array; - /** Reads (copies) the values of Uint8Array from the module's memory. */ + /** Copies an Uint8Array's values from the module's memory. */ __getUint8Array(ptr: number): Uint8Array; - /** Reads (copies) the values of Uint8Array from the module's memory. */ + /** Copies an Uint8ClampedArray's values from the module's memory. */ __getUint8ClampedArray(ptr: number): Uint8ClampedArray; - /** Reads (copies) the values of Int16Array from the module's memory. */ + /** Copies an Int16Array's values from the module's memory. */ __getInt16Array(ptr: number): Int16Array; - /** Reads (copies) the values of Uint16Array from the module's memory. */ + /** Copies an Uint16Array's values from the module's memory. */ __getUint16Array(ptr: number): Uint16Array; - /** Reads (copies) the values of Int32Array from the module's memory. */ + /** Copies an Int32Array's values from the module's memory. */ __getInt32Array(ptr: number): Int32Array; - /** Reads (copies) the values of Uint32Array from the module's memory. */ + /** Copies an Uint32Array's values from the module's memory. */ __getUint32Array(ptr: number): Uint32Array; - /** Reads (copies) the values of Int32Array from the module's memory. */ + /** Copies an Int32Array's values from the module's memory. */ __getInt64Array?(ptr: number): BigInt64Array; - /** Reads (copies) the values of Uint32Array from the module's memory. */ + /** Copies an Uint32Array's values from the module's memory. */ __getUint64Array?(ptr: number): BigUint64Array; - /** Reads (copies) the values of Float32Array from the module's memory. */ + /** Copies a Float32Array's values from the module's memory. */ __getFloat32Array(ptr: number): Float32Array; - /** Reads (copies) the values of Float64Array from the module's memory. */ + /** Copies a Float64Array's values from the module's memory. */ __getFloat64Array(ptr: number): Float64Array; - /** Reads the values of Int8Array from the module's memory. */ + /** Gets a live view on an array's values in the module's memory. Infers the array type from RTTI. */ + __getArrayView(ptr: number): ArrayBufferView; + /** Gets a live view on an Int8Array's values in the module's memory. */ __getInt8ArrayView(ptr: number): Int8Array; - /** Reads the values of Uint8Array from the module's memory. */ + /** Gets a live view on an Uint8Array's values in the module's memory. */ __getUint8ArrayView(ptr: number): Uint8Array; - /** Reads the values of Uint8Array from the module's memory. */ + /** Gets a live view on an Uint8ClampedArray's values in the module's memory. */ __getUint8ClampedArrayView(ptr: number): Uint8ClampedArray; - /** Reads the values of Int16Array from the module's memory. */ + /** Gets a live view on an Int16Array's values in the module's memory. */ __getInt16ArrayView(ptr: number): Int16Array; - /** Reads the values of Uint16Array from the module's memory. */ + /** Gets a live view on an Uint16Array's values in the module's memory. */ __getUint16ArrayView(ptr: number): Uint16Array; - /** Reads the values of Int32Array from the module's memory. */ + /** Gets a live view on an Int32Array's values in the module's memory. */ __getInt32ArrayView(ptr: number): Int32Array; - /** Reads the values of Uint32Array from the module's memory. */ + /** Gets a live view on an Uint32Array's values in the module's memory. */ __getUint32ArrayView(ptr: number): Uint32Array; - /** Reads the values of Int32Array from the module's memory. */ + /** Gets a live view on an Int32Array's values in the module's memory. */ __getInt64ArrayView?(ptr: number): BigInt64Array; - /** Reads the values of Uint32Array from the module's memory. */ + /** Gets a live view on an Uint32Array's values in the module's memory. */ __getUint64ArrayView?(ptr: number): BigUint64Array; - /** Reads the values of Float32Array from the module's memory. */ + /** Gets a live view on a Float32Array's values in the module's memory. */ __getFloat32ArrayView(ptr: number): Float32Array; - /** Reads the values of Float64Array from the module's memory. */ + /** Gets a live view on a Float64Array's values in the module's memory. */ __getFloat64ArrayView(ptr: number): Float64Array; - /** Reads (copies) the data of an ArrayBuffer from the module's memory. */ - __getArrayBuffer(ptr: number): ArrayBuffer; /** Retains a reference to a managed object externally, making sure that it doesn't become collected prematurely. Returns the pointer. */ __retain(ptr: number): number; /** Releases a previously retained reference to a managed object, allowing the runtime to collect it once its reference count reaches zero. */ __release(ptr: number): void; - /** Resets base pointer to initial offset. Uses only for stub runtime. */ + /** Forcefully resets the heap to its initial offset, effectively clearing dynamic memory. Stub runtime only. */ __reset?(): void; /** Allocates an instance of the class represented by the specified id. */ __alloc(size: number, id: number): number; diff --git a/lib/loader/index.js b/lib/loader/index.js index 7c797fe1db..f2e53d8212 100644 --- a/lib/loader/index.js +++ b/lib/loader/index.js @@ -180,7 +180,7 @@ function postInstantiate(baseModule, instance) { baseModule.__allocArray = __allocArray; - /** Gets a view on the values of an array in the module's memory. */ + /** Gets a live view on an array's values in the module's memory. Infers the array type from RTTI. */ function __getArrayView(arr) { const U32 = new Uint32Array(memory.buffer); const id = U32[arr + ID_OFFSET >>> 2]; @@ -197,7 +197,7 @@ function postInstantiate(baseModule, instance) { baseModule.__getArrayView = __getArrayView; - /** Reads (copies) the values of an array from the module's memory. */ + /** Copies an array's values from the module's memory. Infers the array type from RTTI. */ function __getArray(arr) { const input = __getArrayView(arr); const len = input.length; @@ -208,7 +208,7 @@ function postInstantiate(baseModule, instance) { baseModule.__getArray = __getArray; - /** Reads (copies) the data of an ArrayBuffer from the module's memory. */ + /** Copies an ArrayBuffer's value from the module's memory. */ function __getArrayBuffer(ptr) { const buffer = memory.buffer; const length = new Uint32Array(buffer)[ptr + SIZE_OFFSET >>> 2]; @@ -217,6 +217,12 @@ function postInstantiate(baseModule, instance) { baseModule.__getArrayBuffer = __getArrayBuffer; + /** Copies a typed array's values from the module's memory. */ + function getTypedArray(Type, alignLog2, ptr) { + return new Type(getTypedArrayView(Type, alignLog2, ptr)); + } + + /** Gets a live view on a typed array's values in the module's memory. */ function getTypedArrayView(Type, alignLog2, ptr) { const buffer = memory.buffer; const U32 = new Uint32Array(buffer); @@ -224,43 +230,28 @@ function postInstantiate(baseModule, instance) { return new Type(buffer, bufPtr, U32[bufPtr + SIZE_OFFSET >>> 2] >>> alignLog2); } - function getTypedArray(Type, alignLog2, ptr) { - return new Type(getTypedArrayView(Type, alignLog2, ptr)); - } - - /** Gets a view on the values of a known-to-be Int8Array in the module's memory. */ baseModule.__getInt8Array = getTypedArray.bind(null, Int8Array, 0); baseModule.__getInt8ArrayView = getTypedArrayView.bind(null, Int8Array, 0); - /** Gets a view on the values of a known-to-be Uint8Array in the module's memory. */ baseModule.__getUint8Array = getTypedArray.bind(null, Uint8Array, 0); baseModule.__getUint8ArrayView = getTypedArrayView.bind(null, Uint8Array, 0); - /** Gets a view on the values of a known-to-be Uint8ClampedArray in the module's memory. */ baseModule.__getUint8ClampedArray = getTypedArray.bind(null, Uint8ClampedArray, 0); baseModule.__getUint8ClampedArrayView = getTypedArrayView.bind(null, Uint8ClampedArray, 0); - /** Gets a view on the values of a known-to-be Int16Array in the module's memory. */ baseModule.__getInt16Array = getTypedArray.bind(null, Int16Array, 1); baseModule.__getInt16ArrayView = getTypedArrayView.bind(null, Int16Array, 1); - /** Gets a view on the values of a known-to-be Uint16Array in the module's memory. */ baseModule.__getUint16Array = getTypedArray.bind(null, Uint16Array, 1); baseModule.__getUint16ArrayView = getTypedArrayView.bind(null, Uint16Array, 1); - /** Gets a view on the values of a known-to-be Int32Array in the module's memory. */ baseModule.__getInt32Array = getTypedArray.bind(null, Int32Array, 2); baseModule.__getInt32ArrayView = getTypedArrayView.bind(null, Int32Array, 2); - /** Gets a view on the values of a known-to-be Uint32Array in the module's memory. */ baseModule.__getUint32Array = getTypedArray.bind(null, Uint32Array, 2); baseModule.__getUint32ArrayView = getTypedArrayView.bind(null, Uint32Array, 2); if (BIGINT) { - /** Gets a view on the values of a known-to-be-Int64Array in the module's memory. */ baseModule.__getInt64Array = getTypedArray.bind(null, BigInt64Array, 3); baseModule.__getInt64ArrayView = getTypedArrayView.bind(null, BigInt64Array, 3); - /** Gets a view on the values of a known-to-be-Uint64Array in the module's memory. */ baseModule.__getUint64Array = getTypedArray.bind(null, BigUint64Array, 3); baseModule.__getUint64ArrayView = getTypedArrayView.bind(null, BigUint64Array, 3); } - /** Gets a view on the values of a known-to-be Float32Array in the module's memory. */ baseModule.__getFloat32Array = getTypedArray.bind(null, Float32Array, 2); baseModule.__getFloat32ArrayView = getTypedArrayView.bind(null, Float32Array, 2); - /** Gets a view on the values of a known-to-be Float64Array in the module's memory. */ baseModule.__getFloat64Array = getTypedArray.bind(null, Float64Array, 3); baseModule.__getFloat64ArrayView = getTypedArrayView.bind(null, Float64Array, 3); @@ -286,9 +277,9 @@ function postInstantiate(baseModule, instance) { } /** Wraps a WebAssembly function while also taking care of variable arguments. */ -function wrapFunction(fn, setargc) { +function wrapFunction(fn, argumentsLength) { var wrap = (...args) => { - setargc(args.length); + if (argumentsLength) argumentsLength.value = args.length; return fn(...args); } wrap.original = fn; @@ -351,7 +342,7 @@ exports.instantiateStreaming = instantiateStreaming; /** Demangles an AssemblyScript module's exports to a friendly object structure. */ function demangle(exports, baseModule) { var module = baseModule ? Object.create(baseModule) : {}; - var setargc = exports["__setargc"] || function() {}; + var argumentsLength = exports["__argumentsLength"]; function hasOwnProperty(elem, prop) { return Object.prototype.hasOwnProperty.call(elem, prop); } @@ -401,11 +392,11 @@ function demangle(exports, baseModule) { } } else { if (name === 'constructor') { - curr[name] = wrapFunction(elem, setargc); + curr[name] = wrapFunction(elem, argumentsLength); } else { // for methods Object.defineProperty(curr, name, { value: function (...args) { - setargc(args.length); + if (argumentsLength) argumentsLength.value = args.length; return elem(this[THIS], ...args); } }); @@ -421,7 +412,7 @@ function demangle(exports, baseModule) { }); } } else if (typeof elem === "function") { - curr[name] = wrapFunction(elem, setargc); + curr[name] = wrapFunction(elem, argumentsLength); } else { curr[name] = elem; } diff --git a/lib/loader/tests/build/untouched.wasm b/lib/loader/tests/build/untouched.wasm index d3f681bdec..58959a23f5 100644 Binary files a/lib/loader/tests/build/untouched.wasm and b/lib/loader/tests/build/untouched.wasm differ diff --git a/src/ast.ts b/src/ast.ts index 2980df67b7..5fd69274c8 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -5,7 +5,6 @@ import { CommonFlags, - CommonSymbols, PATH_DELIMITER, LIBRARY_PREFIX, LIBRARY_SUBST @@ -13,7 +12,6 @@ import { import { Token, - Tokenizer, Range } from "./tokenizer"; @@ -249,8 +247,7 @@ export abstract class Node { ): IdentifierExpression { var expr = new IdentifierExpression(); expr.range = range; - expr.text = name; // TODO: extract from range - expr.symbol = name; // TODO: Symbol.for(name) + expr.text = name; expr.isQuoted = isQuoted; return expr; } @@ -1292,8 +1289,6 @@ export class IdentifierExpression extends Expression { /** Textual name. */ text: string; - /** Symbol. */ - symbol: string; // TODO: symbol /** Whether quoted or not. */ isQuoted: bool; } @@ -1418,7 +1413,6 @@ export class CommaExpression extends Expression { export class ConstructorExpression extends IdentifierExpression { kind = NodeKind.CONSTRUCTOR; text = "constructor"; - symbol = CommonSymbols.constructor; } /** Represents an element access expression, e.g., array access. */ @@ -1501,7 +1495,6 @@ export class NewExpression extends Expression { export class NullExpression extends IdentifierExpression { kind = NodeKind.NULL; text = "null"; - symbol = CommonSymbols.null_; } /** Represents an object literal expression. */ @@ -1566,28 +1559,24 @@ export class StringLiteralExpression extends LiteralExpression { export class SuperExpression extends IdentifierExpression { kind = NodeKind.SUPER; text = "super"; - symbol = CommonSymbols.super_; } /** Represents a `this` expression. */ export class ThisExpression extends IdentifierExpression { kind = NodeKind.THIS; text = "this"; - symbol = CommonSymbols.this_; } /** Represents a `true` expression. */ export class TrueExpression extends IdentifierExpression { kind = NodeKind.TRUE; text = "true"; - symbol = CommonSymbols.true_; } /** Represents a `false` expression. */ export class FalseExpression extends IdentifierExpression { kind = NodeKind.FALSE; text = "false"; - symbol = CommonSymbols.false_; } /** Base class of all unary expressions. */ diff --git a/src/binary.ts b/src/binary.ts deleted file mode 100644 index 43ac0e0543..0000000000 --- a/src/binary.ts +++ /dev/null @@ -1,301 +0,0 @@ -/** - * Binary format utilities. - * @module binary - *//***/ - -// TBD: Moving lib/parse here might make sense where the compiler has to evaluate WASM binaries on -// the fly, like when importing other WASM files through `import`. Module integration hasn't been -// specified, yet, though, and it somewhat conflicts with our dependency on Binaryen. - -/** WebAssembly section ids. */ -export enum SectionId { - /** A custom section with an explicit name. */ - Custom = 0, - /** Function types section. */ - Type = 1, - /** Imports section. */ - Import = 2, - /** Functions section. */ - Function = 3, - /** Tables section. */ - Table = 4, - /** Memories section. */ - Memory = 5, - /** Globals section. */ - Global = 6, - /** Exports section. */ - Export = 7, - /** Start function section. */ - Start = 8, - /** Table element section. */ - Element = 9, - /** Function code section. */ - Code = 10, - /** Memory segments section. */ - Data = 11 -} - -/** WebAssembly external kinds. */ -export enum ExternalKind { - /** External function. */ - Function = 0, - /** External table. */ - Table = 1, - /** External memory. */ - Memory = 2, - /** External global. */ - Global = 3 -} - -/** WebAssembly name section kinds. */ -export enum NameKind { - /** Module name. */ - Module = 0, - /** Function name. */ - Function = 1, - /** Local name. */ - Local = 2, - - // see: https://github.com/WebAssembly/design/pull/1064 - - /** Label name. */ - Label = 3, - /** Function type name. */ - Type = 4, - /** Table name. */ - Table = 5, - /** Memory name. */ - Memory = 6, - /** Global variable name. */ - Global = 7 -} - -/** WebAssembly types. */ -export enum Type { - i32 = 0x7F, - i64 = 0x7E, - f32 = 0x7D, - f64 = 0x7C, - anyfunc = 0x70, - func = 0x60, - none = 0x40 -} - -/** WebAssembly opcodes. */ -export enum Op { - unreachable = 0x00, - nop = 0x01, - block = 0x02, - loop = 0x03, - if_ = 0x04, - else_ = 0x05, - end = 0x0B, - br = 0x0C, - br_if = 0x0D, - br_table = 0x0E, - return_ = 0x0F, - call = 0x10, - call_indirect = 0x11, - drop = 0x1A, - select = 0x1B, - get_local = 0x20, - set_local = 0x21, - tee_local = 0x22, - get_global = 0x23, - set_global = 0x24, - i32_load = 0x28, - i64_load = 0x29, - f32_load = 0x2A, - f64_load = 0x2B, - i32_load8_s = 0x2C, - i32_load8_u = 0x2D, - i32_load16_s = 0x2E, - i32_load16_u = 0x2F, - i64_load8_s = 0x30, - i64_load8_u = 0x31, - i64_load16_s = 0x32, - i64_load16_u = 0x33, - i64_load32_s = 0x34, - i64_load32_u = 0x35, - i32_store = 0x36, - i64_store = 0x37, - f32_store = 0x38, - f64_store = 0x39, - i32_store8 = 0x3A, - i32_store16 = 0x3B, - i64_store8 = 0x3C, - i64_store16 = 0x3D, - i64_store32 = 0x3E, - memory_size = 0x3F, - memory_grow = 0x40, - i32_const = 0x41, - i64_const = 0x42, - f32_const = 0x43, - f64_const = 0x44, - i32_eqz = 0x45, - i32_eq = 0x46, - i32_ne = 0x47, - i32_lt_s = 0x48, - i32_lt_u = 0x49, - i32_gt_s = 0x4A, - i32_gt_u = 0x4B, - i32_le_s = 0x4C, - i32_le_u = 0x4D, - i32_ge_s = 0x4E, - i32_ge_u = 0x4F, - i64_eqz = 0x50, - i64_eq = 0x51, - i64_ne = 0x52, - i64_lt_s = 0x53, - i64_lt_u = 0x54, - i64_gt_s = 0x55, - i64_gt_u = 0x56, - i64_le_s = 0x57, - i64_le_u = 0x58, - i64_ge_s = 0x59, - i64_ge_u = 0x5A, - f32_eq = 0x5B, - f32_ne = 0x5C, - f32_lt = 0x5D, - f32_gt = 0x5E, - f32_le = 0x5F, - f32_ge = 0x60, - f64_eq = 0x61, - f64_ne = 0x62, - f64_lt = 0x63, - f64_gt = 0x64, - f64_le = 0x65, - f64_ge = 0x66, - i32_clz = 0x67, - i32_ctz = 0x68, - i32_popcnt = 0x69, - i32_add = 0x6A, - i32_sub = 0x6B, - i32_mul = 0x6C, - i32_div_s = 0x6D, - i32_div_u = 0x6E, - i32_rem_s = 0x6F, - i32_rem_u = 0x70, - i32_and = 0x71, - i32_or = 0x72, - i32_xor = 0x73, - i32_shl = 0x74, - i32_shr_s = 0x75, - i32_shr_u = 0x76, - i32_rotl = 0x77, - i32_rotr = 0x78, - i64_clz = 0x79, - i64_ctz = 0x7A, - i64_popcnt = 0x7B, - i64_add = 0x7C, - i64_sub = 0x7D, - i64_mul = 0x7E, - i64_div_s = 0x7F, - i64_div_u = 0x80, - i64_rem_s = 0x81, - i64_rem_u = 0x82, - i64_and = 0x83, - i64_or = 0x84, - i64_xor = 0x85, - i64_shl = 0x86, - i64_shr_s = 0x87, - i64_shr_u = 0x88, - i64_rotl = 0x89, - i64_rotr = 0x8A, - f32_abs = 0x8B, - f32_neg = 0x8C, - f32_ceil = 0x8D, - f32_floor = 0x8E, - f32_trunc = 0x8F, - f32_nearest = 0x90, - f32_sqrt = 0x91, - f32_add = 0x92, - f32_sub = 0x93, - f32_mul = 0x94, - f32_div = 0x95, - f32_min = 0x96, - f32_max = 0x97, - f32_copysign = 0x98, - f64_abs = 0x99, - f64_neg = 0x9A, - f64_ceil = 0x9B, - f64_floor = 0x9C, - f64_trunc = 0x9D, - f64_nearest = 0x9E, - f64_sqrt = 0x9F, - f64_add = 0xA0, - f64_sub = 0xA1, - f64_mul = 0xA2, - f64_div = 0xA3, - f64_min = 0xA4, - f64_max = 0xA5, - f64_copysign = 0xA6, - i32_wrap_i64 = 0xA7, - i32_trunc_s_f32 = 0xA8, - i32_trunc_u_f32 = 0xA9, - i32_trunc_s_f64 = 0xAA, - i32_trunc_u_f64 = 0xAB, - i64_extend_s_i32 = 0xAC, - i64_extend_u_i32 = 0xAD, - i64_trunc_s_f32 = 0xAE, - i64_trunc_u_f32 = 0xAF, - i64_trunc_s_f64 = 0xB0, - i64_trunc_u_f64 = 0xB1, - f32_convert_s_i32 = 0xB2, - f32_convert_u_i32 = 0xB3, - f32_convert_s_i64 = 0xB4, - f32_convert_u_i64 = 0xB5, - f32_demote_f64 = 0xB6, - f64_convert_s_i32 = 0xB7, - f64_convert_u_i32 = 0xB8, - f64_convert_s_i64 = 0xB9, - f64_convert_u_i64 = 0xBA, - f64_promote_f32 = 0xBB, - i32_reinterpret_f32 = 0xBC, - i64_reinterpret_f64 = 0xBD, - f32_reinterpret_i32 = 0xBE, - f64_reinterpret_i64 = 0xBF -} - -enum ReaderState { - HEADER -} - -/** WebAssembly binary reader. */ -export class Reader { // TODO - - /** Buffer being read. */ - private buffer: Uint8Array; - /** Current read offset. */ - private offset: u32; - /** Total length. */ - private length: u32; - /** Current state. */ - private state: ReaderState; - - /** Constructs a new binary reader. */ - constructor(totalLength: u32, initialChunk: Uint8Array) { - this.buffer = initialChunk; - this.offset = 0; - this.length = totalLength; - this.state = ReaderState.HEADER; - } - - /** Provides a chunk of data. */ - next(chunk: Uint8Array): void { - if (!chunk.length) return; - // var current = this.buffer; - // var offset = this.offset; - // var buffer = new Uint8Array((current.length - offset) + chunk.length); - // buffer.set(current.subarray(offset), 0); - // buffer.set(chunk, (current.length - offset)); - // this.buffer = buffer; - // this.length -= this.offset; - // this.offset = 0; - unreachable(); - } - - finish(): void { - unreachable(); - } -} diff --git a/src/builtins.ts b/src/builtins.ts index e05fc8a075..4e98301230 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -6,8 +6,7 @@ import { Compiler, Constraints, - RuntimeFeatures, - flatten + RuntimeFeatures } from "./compiler"; import { @@ -28,8 +27,7 @@ import { import { Type, TypeKind, - TypeFlags, - Signature + TypeFlags } from "./types"; import { @@ -93,8 +91,14 @@ import { isPowerOf2 } from "./util"; -/** Symbols of various compiler built-ins. */ -export namespace BuiltinSymbols { +/** Internal names of various compiler built-ins. */ +export namespace BuiltinNames { + + // compiler-generated + export const start = "~start"; + export const started = "~started"; + export const argumentsLength = "~argumentsLength"; + // std/builtins.ts export const isInteger = "~lib/builtins/isInteger"; export const isFloat = "~lib/builtins/isFloat"; @@ -168,7 +172,6 @@ export namespace BuiltinSymbols { export const f32 = "~lib/builtins/f32"; export const f64 = "~lib/builtins/f64"; export const v128 = "~lib/builtins/v128"; - export const void_ = "~lib/builtins/void"; export const i32_clz = "~lib/builtins/i32.clz"; export const i64_clz = "~lib/builtins/i64.clz"; @@ -548,37 +551,19 @@ export namespace BuiltinSymbols { export const memory_grow = "~lib/memory/memory.grow"; export const memory_copy = "~lib/memory/memory.copy"; export const memory_fill = "~lib/memory/memory.fill"; - export const memory_allocate = "~lib/memory/memory.allocate"; - export const memory_free = "~lib/memory/memory.free"; - export const memory_reset = "~lib/memory/memory.reset"; - - // std/runtime.ts - export const runtime_instanceof = "~lib/runtime/runtime.instanceof"; - export const runtime_flags = "~lib/runtime/runtime.flags"; - export const runtime_allocate = "~lib/util/runtime/allocate"; - export const runtime_reallocate = "~lib/util/runtime/reallocate"; - export const runtime_register = "~lib/util/runtime/register"; - export const runtime_discard = "~lib/util/runtime/discard"; - export const runtime_makeArray = "~lib/util/runtime/makeArray"; // std/typedarray.ts export const Int8Array = "~lib/typedarray/Int8Array"; export const Uint8Array = "~lib/typedarray/Uint8Array"; + export const Uint8ClampedArray = "~lib/typedarray/Uint8ClampedArray"; export const Int16Array = "~lib/typedarray/Int16Array"; export const Uint16Array = "~lib/typedarray/Uint16Array"; export const Int32Array = "~lib/typedarray/Int32Array"; export const Uint32Array = "~lib/typedarray/Uint32Array"; export const Int64Array = "~lib/typedarray/Int64Array"; export const Uint64Array = "~lib/typedarray/Uint64Array"; - export const Uint8ClampedArray = "~lib/typedarray/Uint8ClampedArray"; export const Float32Array = "~lib/typedarray/Float32Array"; export const Float64Array = "~lib/typedarray/Float64Array"; - - // compiler generated - export const started = "~lib/started"; - export const argc = "~lib/argc"; - export const setargc = "~lib/setargc"; - export const capabilities = "~lib/capabilities"; } /** Compiles a call to a built-in function. */ @@ -604,7 +589,7 @@ export function compileCall( // === Static type evaluation ================================================================= - case BuiltinSymbols.isInteger: { // isInteger() / isInteger(value: T) -> bool + case BuiltinNames.isInteger: { // isInteger() / isInteger(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); @@ -612,7 +597,7 @@ export function compileCall( ? module.i32(1) : module.i32(0); } - case BuiltinSymbols.isFloat: { // isFloat() / isFloat(value: T) -> bool + case BuiltinNames.isFloat: { // isFloat() / isFloat(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); @@ -620,7 +605,7 @@ export function compileCall( ? module.i32(1) : module.i32(0); } - case BuiltinSymbols.isBoolean: { // isBoolean() / isBoolean(value: T) -> bool + case BuiltinNames.isBoolean: { // isBoolean() / isBoolean(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); @@ -628,7 +613,7 @@ export function compileCall( ? module.i32(1) : module.i32(0); } - case BuiltinSymbols.isSigned: { // isSigned() / isSigned(value: T) -> bool + case BuiltinNames.isSigned: { // isSigned() / isSigned(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); @@ -636,7 +621,7 @@ export function compileCall( ? module.i32(1) : module.i32(0); } - case BuiltinSymbols.isReference: { // isReference() / isReference(value: T) -> bool + case BuiltinNames.isReference: { // isReference() / isReference(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); @@ -644,7 +629,7 @@ export function compileCall( ? module.i32(1) : module.i32(0); } - case BuiltinSymbols.isString: { // isString() / isString(value: T) -> bool + case BuiltinNames.isString: { // isString() / isString(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); @@ -657,7 +642,7 @@ export function compileCall( } return module.i32(0); } - case BuiltinSymbols.isArray: { // isArray() / isArray(value: T) -> bool + case BuiltinNames.isArray: { // isArray() / isArray(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); @@ -669,7 +654,7 @@ export function compileCall( } return module.i32(0); } - case BuiltinSymbols.isArrayLike: { // isArrayLike() / isArrayLike(value: T) -> bool + case BuiltinNames.isArrayLike: { // isArrayLike() / isArrayLike(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); @@ -681,19 +666,19 @@ export function compileCall( } return module.i32(0); } - case BuiltinSymbols.isFunction: { // isFunction / isFunction(value: T) -> bool + case BuiltinNames.isFunction: { // isFunction / isFunction(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); return module.i32(type.signatureReference ? 1 : 0); } - case BuiltinSymbols.isNullable: { // isNullable / isNullable(value: T) -> bool + case BuiltinNames.isNullable: { // isNullable / isNullable(value: T) -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); return module.i32(type.is(TypeFlags.NULLABLE) ? 1 : 0); } - case BuiltinSymbols.isDefined: { // isDefined(expression) -> bool + case BuiltinNames.isDefined: { // isDefined(expression) -> bool compiler.currentType = Type.bool; if ( checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -707,7 +692,7 @@ export function compileCall( ); return module.i32(element ? 1 : 0); } - case BuiltinSymbols.isConstant: { // isConstant(expression) -> bool + case BuiltinNames.isConstant: { // isConstant(expression) -> bool compiler.currentType = Type.bool; if ( checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -717,19 +702,19 @@ export function compileCall( compiler.currentType = Type.bool; return module.i32(getExpressionId(expr) == ExpressionId.Const ? 1 : 0); } - case BuiltinSymbols.isManaged: { // isManaged() -> bool + case BuiltinNames.isManaged: { // isManaged() -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); return module.i32(type.isManaged ? 1 : 0); } - case BuiltinSymbols.isVoid: { // isVoid() -> bool + case BuiltinNames.isVoid: { // isVoid() -> bool let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.bool; if (!type) return module.unreachable(); return module.i32(type.kind == TypeKind.VOID ? 1 : 0); } - case BuiltinSymbols.lengthof: { // lengthof() -> i32 + case BuiltinNames.lengthof: { // lengthof() -> i32 let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.i32; if (!type) return module.unreachable(); @@ -743,7 +728,7 @@ export function compileCall( } return module.i32(signatureReference.parameterTypes.length); } - case BuiltinSymbols.sizeof: { // sizeof() -> usize + case BuiltinNames.sizeof: { // sizeof() -> usize compiler.currentType = compiler.options.usizeType; if ( checkTypeRequired(typeArguments, reportNode, compiler) | @@ -774,7 +759,7 @@ export function compileCall( return module.i32(byteSize); } } - case BuiltinSymbols.alignof: { // alignof() -> usize + case BuiltinNames.alignof: { // alignof() -> usize compiler.currentType = compiler.options.usizeType; if ( checkTypeRequired(typeArguments, reportNode, compiler) | @@ -806,7 +791,7 @@ export function compileCall( return module.i32(alignLog2); } } - case BuiltinSymbols.offsetof: { // offsetof(fieldName?: string) -> usize + case BuiltinNames.offsetof: { // offsetof(fieldName?: string) -> usize compiler.currentType = compiler.options.usizeType; if ( checkTypeRequired(typeArguments, reportNode, compiler) | @@ -871,7 +856,7 @@ export function compileCall( return module.i32(offset); } } - case BuiltinSymbols.nameof: { + case BuiltinNames.nameof: { let resultType = evaluateConstantType(compiler, typeArguments, operands, reportNode); if (!resultType) { compiler.currentType = compiler.program.stringInstance.type; @@ -916,7 +901,7 @@ export function compileCall( // === Math =================================================================================== - case BuiltinSymbols.clz: { // clz(value: T) -> T + case BuiltinNames.clz: { // clz(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -953,7 +938,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.ctz: { // ctz(value: T) -> T + case BuiltinNames.ctz: { // ctz(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -990,7 +975,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.popcnt: { // popcnt(value: T) -> T + case BuiltinNames.popcnt: { // popcnt(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -1027,7 +1012,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.rotl: { // rotl(value: T, shift: T) -> T + case BuiltinNames.rotl: { // rotl(value: T, shift: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 2, reportNode, compiler) @@ -1070,7 +1055,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.rotr: { // rotr(value: T, shift: T) -> T + case BuiltinNames.rotr: { // rotr(value: T, shift: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 2, reportNode, compiler) @@ -1113,7 +1098,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.abs: { // abs(value: T) -> T + case BuiltinNames.abs: { // abs(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -1213,7 +1198,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.max: { // max(left: T, right: T) -> T + case BuiltinNames.max: { // max(left: T, right: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 2, reportNode, compiler) @@ -1285,7 +1270,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.min: { // min(left: T, right: T) -> T + case BuiltinNames.min: { // min(left: T, right: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 2, reportNode, compiler) @@ -1357,7 +1342,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.ceil: { // ceil(value: T) -> T + case BuiltinNames.ceil: { // ceil(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -1389,7 +1374,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.floor: { // floor(value: T) -> T + case BuiltinNames.floor: { // floor(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -1421,7 +1406,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.copysign: { // copysign(left: T, right: T) -> T + case BuiltinNames.copysign: { // copysign(left: T, right: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 2, reportNode, compiler) @@ -1444,7 +1429,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.nearest: { // nearest(value: T) -> T + case BuiltinNames.nearest: { // nearest(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -1476,7 +1461,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.reinterpret: { // reinterpret(value: *) -> T + case BuiltinNames.reinterpret: { // reinterpret(value: *) -> T if ( checkTypeRequired(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -1530,7 +1515,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.sqrt: { // sqrt(value: T) -> T + case BuiltinNames.sqrt: { // sqrt(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -1552,7 +1537,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.trunc: { // trunc(value: T) -> T + case BuiltinNames.trunc: { // trunc(value: T) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -1587,7 +1572,7 @@ export function compileCall( // === Memory access ========================================================================== - case BuiltinSymbols.load: { // load(offset: usize, immOffset?: usize, immAlign?: usize) -> T* + case BuiltinNames.load: { // load(offset: usize, immOffset?: usize, immAlign?: usize) -> T* if ( checkTypeRequired(typeArguments, reportNode, compiler, true) | checkArgsOptional(operands, 1, 3, reportNode, compiler) @@ -1643,7 +1628,7 @@ export function compileCall( immAlign ); } - case BuiltinSymbols.store: { // store(offset: usize, value: T*, offset?: usize, align?: usize) -> void + case BuiltinNames.store: { // store(offset: usize, value: T*, offset?: usize, align?: usize) -> void compiler.currentType = Type.void; if ( checkTypeRequired(typeArguments, reportNode, compiler) | @@ -1716,7 +1701,7 @@ export function compileCall( // === Atomics ================================================================================ - case BuiltinSymbols.atomic_load: { // load(offset: usize, immOffset?: usize) -> T* + case BuiltinNames.atomic_load: { // load(offset: usize, immOffset?: usize) -> T* if ( checkFeatureEnabled(Feature.THREADS, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler, true) | @@ -1750,7 +1735,7 @@ export function compileCall( immOffset ); } - case BuiltinSymbols.atomic_store: { // store(offset: usize, value: T*, immOffset?: usize) -> void + case BuiltinNames.atomic_store: { // store(offset: usize, value: T*, immOffset?: usize) -> void if ( checkFeatureEnabled(Feature.THREADS, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -1802,12 +1787,12 @@ export function compileCall( compiler.currentType = Type.void; return module.atomic_store(type.byteSize, arg0, arg1, inType.toNativeType(), immOffset); } - case BuiltinSymbols.atomic_add: // any_atomic_binary(ptr, value: T, immOffset?: usize) -> T - case BuiltinSymbols.atomic_sub: - case BuiltinSymbols.atomic_and: - case BuiltinSymbols.atomic_or: - case BuiltinSymbols.atomic_xor: - case BuiltinSymbols.atomic_xchg: { + case BuiltinNames.atomic_add: // any_atomic_binary(ptr, value: T, immOffset?: usize) -> T + case BuiltinNames.atomic_sub: + case BuiltinNames.atomic_and: + case BuiltinNames.atomic_or: + case BuiltinNames.atomic_xor: + case BuiltinNames.atomic_xchg: { if ( checkFeatureEnabled(Feature.THREADS, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler, true) | @@ -1818,12 +1803,12 @@ export function compileCall( let opName: string; switch (prototype.internalName) { default: assert(false); - case BuiltinSymbols.atomic_add: { opName = "atomic.add"; break; } - case BuiltinSymbols.atomic_sub: { opName = "atomic.sub"; break; } - case BuiltinSymbols.atomic_and: { opName = "atomic.and"; break; } - case BuiltinSymbols.atomic_or: { opName = "atomic.or"; break; } - case BuiltinSymbols.atomic_xor: { opName = "atomic.xor"; break; } - case BuiltinSymbols.atomic_xchg: { opName = "atomic.xchg"; break; } + case BuiltinNames.atomic_add: { opName = "atomic.add"; break; } + case BuiltinNames.atomic_sub: { opName = "atomic.sub"; break; } + case BuiltinNames.atomic_and: { opName = "atomic.and"; break; } + case BuiltinNames.atomic_or: { opName = "atomic.or"; break; } + case BuiltinNames.atomic_xor: { opName = "atomic.xor"; break; } + case BuiltinNames.atomic_xchg: { opName = "atomic.xchg"; break; } } compiler.error( DiagnosticCode.Operation_0_cannot_be_applied_to_type_1, @@ -1870,17 +1855,17 @@ export function compileCall( let op: AtomicRMWOp; switch (prototype.internalName) { default: assert(false); - case BuiltinSymbols.atomic_add: { op = AtomicRMWOp.Add; break; } - case BuiltinSymbols.atomic_sub: { op = AtomicRMWOp.Sub; break; } - case BuiltinSymbols.atomic_and: { op = AtomicRMWOp.And; break; } - case BuiltinSymbols.atomic_or: { op = AtomicRMWOp.Or; break; } - case BuiltinSymbols.atomic_xor: { op = AtomicRMWOp.Xor; break; } - case BuiltinSymbols.atomic_xchg: { op = AtomicRMWOp.Xchg; break; } + case BuiltinNames.atomic_add: { op = AtomicRMWOp.Add; break; } + case BuiltinNames.atomic_sub: { op = AtomicRMWOp.Sub; break; } + case BuiltinNames.atomic_and: { op = AtomicRMWOp.And; break; } + case BuiltinNames.atomic_or: { op = AtomicRMWOp.Or; break; } + case BuiltinNames.atomic_xor: { op = AtomicRMWOp.Xor; break; } + case BuiltinNames.atomic_xchg: { op = AtomicRMWOp.Xchg; break; } } compiler.currentType = inType; return module.atomic_rmw(op, type.byteSize, immOffset, arg0, arg1, inType.toNativeType()); } - case BuiltinSymbols.atomic_cmpxchg: { // cmpxchg(ptr: usize, expected: T, replacement: T, off?: usize) -> T + case BuiltinNames.atomic_cmpxchg: { // cmpxchg(ptr: usize, expected: T, replacement: T, off?: usize) -> T if ( checkFeatureEnabled(Feature.THREADS, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler, true) | @@ -1942,7 +1927,7 @@ export function compileCall( compiler.currentType = inType; return module.atomic_cmpxchg(type.byteSize, immOffset, arg0, arg1, arg2, inType.toNativeType()); } - case BuiltinSymbols.atomic_wait: { // wait(ptr: usize, expected: T, timeout: i64) -> i32 + case BuiltinNames.atomic_wait: { // wait(ptr: usize, expected: T, timeout: i64) -> i32 if ( checkFeatureEnabled(Feature.THREADS, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -1970,7 +1955,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.atomic_notify: { // notify(ptr: usize, count: i32) -> i32 + case BuiltinNames.atomic_notify: { // notify(ptr: usize, count: i32) -> i32 if ( checkFeatureEnabled(Feature.THREADS, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -1984,7 +1969,7 @@ export function compileCall( compiler.currentType = Type.i32; return module.atomic_notify(arg0, arg1); } - case BuiltinSymbols.atomic_fence: { // fence() -> void + case BuiltinNames.atomic_fence: { // fence() -> void compiler.currentType = Type.void; if ( checkFeatureEnabled(Feature.THREADS, reportNode, compiler) | @@ -1996,7 +1981,7 @@ export function compileCall( // === Control flow =========================================================================== - case BuiltinSymbols.select: { // select(ifTrue: T, ifFalse: T, condition: bool) -> T + case BuiltinNames.select: { // select(ifTrue: T, ifFalse: T, condition: bool) -> T if ( checkTypeOptional(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 3, reportNode, compiler) @@ -2020,7 +2005,7 @@ export function compileCall( compiler.currentType = type; return module.select(arg0, arg1, arg2); } - case BuiltinSymbols.unreachable: { // unreachable() -> * + case BuiltinNames.unreachable: { // unreachable() -> * if (typeArguments) { compiler.error( DiagnosticCode.Type_0_is_not_generic, @@ -2033,7 +2018,7 @@ export function compileCall( // === Memory ================================================================================= - case BuiltinSymbols.memory_size: { // memory.size() -> i32 + case BuiltinNames.memory_size: { // memory.size() -> i32 compiler.currentType = Type.i32; if ( checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2041,7 +2026,7 @@ export function compileCall( ) return module.unreachable(); return module.host(HostOp.MemorySize); } - case BuiltinSymbols.memory_grow: { // memory.grow(pages: i32) -> i32 + case BuiltinNames.memory_grow: { // memory.grow(pages: i32) -> i32 compiler.currentType = Type.i32; if ( checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2051,16 +2036,17 @@ export function compileCall( compiler.compileExpression(operands[0], Type.i32, Constraints.CONV_IMPLICIT) ]); } - case BuiltinSymbols.memory_copy: { // memory.copy(dest: usize, src: usize: n: usize) -> void + case BuiltinNames.memory_copy: { // memory.copy(dest: usize, src: usize: n: usize) -> void compiler.currentType = Type.void; if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 3, reportNode, compiler) ) return module.unreachable(); if (!compiler.options.hasFeature(Feature.BULK_MEMORY)) { + // use stdlib alternative if not supported let instance = compiler.resolver.resolveFunction(prototype, null); // reports compiler.currentType = Type.void; - if (!instance) return module.unreachable(); + if (!instance || !compiler.compileFunction(instance, true)) return module.unreachable(); return compiler.compileCallDirect(instance, operands, reportNode); } let usizeType = compiler.options.usizeType; @@ -2070,16 +2056,17 @@ export function compileCall( compiler.currentType = Type.void; return module.memory_copy(arg0, arg1, arg2); } - case BuiltinSymbols.memory_fill: { // memory.fill(dest: usize, value: u8, n: usize) -> void + case BuiltinNames.memory_fill: { // memory.fill(dest: usize, value: u8, n: usize) -> void compiler.currentType = Type.void; if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 3, reportNode, compiler) ) return module.unreachable(); if (!compiler.options.hasFeature(Feature.BULK_MEMORY)) { + // use stdlib alternative if not supported let instance = compiler.resolver.resolveFunction(prototype, null); // reports compiler.currentType = Type.void; - if (!instance) return module.unreachable(); + if (!instance || !compiler.compileFunction(instance, true)) return module.unreachable(); return compiler.compileCallDirect(instance, operands, reportNode); } let usizeType = compiler.options.usizeType; @@ -2092,7 +2079,7 @@ export function compileCall( // === Helpers ================================================================================ - case BuiltinSymbols.changetype: { // changetype(value: *) -> T + case BuiltinNames.changetype: { // changetype(value: *) -> T if ( checkTypeRequired(typeArguments, reportNode, compiler, true) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2110,7 +2097,7 @@ export function compileCall( } return arg0; } - case BuiltinSymbols.assert: { // assert(isTrueish: T, message?: string) -> T{!= null} + case BuiltinNames.assert: { // assert(isTrueish: T, message?: string) -> T{!= null} if ( checkTypeOptional(typeArguments, reportNode, compiler) | checkArgsOptional(operands, 1, 2, reportNode, compiler) @@ -2297,7 +2284,7 @@ export function compileCall( ); return abort; } - case BuiltinSymbols.unchecked: { // unchecked(expr: *) -> * + case BuiltinNames.unchecked: { // unchecked(expr: *) -> * if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2310,7 +2297,7 @@ export function compileCall( if (!alreadyUnchecked) flow.unset(FlowFlags.UNCHECKED_CONTEXT); return expr; } - case BuiltinSymbols.instantiate: { // instantiate(...args: *[]) -> T + case BuiltinNames.instantiate: { // instantiate(...args: *[]) -> T if ( checkTypeRequired(typeArguments, reportNode, compiler, true) ) return module.unreachable(); @@ -2329,7 +2316,7 @@ export function compileCall( // === User-defined diagnostics =============================================================== - case BuiltinSymbols.ERROR: { + case BuiltinNames.ERROR: { checkTypeAbsent(typeArguments, reportNode, prototype); compiler.error( DiagnosticCode.User_defined_0, @@ -2337,7 +2324,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.WARNING: { + case BuiltinNames.WARNING: { checkTypeAbsent(typeArguments, reportNode, prototype); compiler.warning( DiagnosticCode.User_defined_0, @@ -2345,7 +2332,7 @@ export function compileCall( ); return module.nop(); } - case BuiltinSymbols.INFO: { + case BuiltinNames.INFO: { checkTypeAbsent(typeArguments, reportNode, prototype); compiler.info( DiagnosticCode.User_defined_0, @@ -2356,7 +2343,7 @@ export function compileCall( // === Portable type conversions ============================================================== - case BuiltinSymbols.i8: { + case BuiltinNames.i8: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2366,7 +2353,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.i8, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.i16: { + case BuiltinNames.i16: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2376,7 +2363,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.i16, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.i32: { + case BuiltinNames.i32: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2386,7 +2373,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.i32, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.i64: { + case BuiltinNames.i64: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2396,7 +2383,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.i64, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.isize: { + case BuiltinNames.isize: { let isizeType = compiler.options.isizeType; if ( checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2407,7 +2394,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], isizeType, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.u8: { + case BuiltinNames.u8: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2417,7 +2404,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.u8, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.u16: { + case BuiltinNames.u16: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2427,7 +2414,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.u16, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.u32: { + case BuiltinNames.u32: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2437,7 +2424,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.u32, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.u64: { + case BuiltinNames.u64: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2447,7 +2434,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.u64, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.usize: { + case BuiltinNames.usize: { let usizeType = compiler.options.usizeType; if ( checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2458,7 +2445,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], usizeType, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.bool: { + case BuiltinNames.bool: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2468,7 +2455,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.bool, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.f32: { + case BuiltinNames.f32: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2478,7 +2465,7 @@ export function compileCall( } return compiler.compileExpression(operands[0], Type.f32, Constraints.CONV_EXPLICIT); } - case BuiltinSymbols.f64: { + case BuiltinNames.f64: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -2491,8 +2478,8 @@ export function compileCall( // === SIMD =================================================================================== - case BuiltinSymbols.v128: // alias for now - case BuiltinSymbols.i8x16: { + case BuiltinNames.v128: // alias for now + case BuiltinNames.i8x16: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2521,7 +2508,7 @@ export function compileCall( compiler.currentType = Type.v128; return module.v128(bytes); } - case BuiltinSymbols.i16x8: { + case BuiltinNames.i16x8: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2550,7 +2537,7 @@ export function compileCall( compiler.currentType = Type.v128; return module.v128(bytes); } - case BuiltinSymbols.i32x4: { + case BuiltinNames.i32x4: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2579,7 +2566,7 @@ export function compileCall( compiler.currentType = Type.v128; return module.v128(bytes); } - case BuiltinSymbols.i64x2: { + case BuiltinNames.i64x2: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2610,7 +2597,7 @@ export function compileCall( compiler.currentType = Type.v128; return module.v128(bytes); } - case BuiltinSymbols.f32x4: { + case BuiltinNames.f32x4: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2639,7 +2626,7 @@ export function compileCall( compiler.currentType = Type.v128; return module.v128(bytes); } - case BuiltinSymbols.f64x2: { + case BuiltinNames.f64x2: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2668,7 +2655,7 @@ export function compileCall( compiler.currentType = Type.v128; return module.v128(bytes); } - case BuiltinSymbols.v128_splat: { // splat(x: T) -> v128 + case BuiltinNames.v128_splat: { // splat(x: T) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -2709,7 +2696,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_extract_lane: { // extract_lane(x: v128, idx: u8) -> T + case BuiltinNames.v128_extract_lane: { // extract_lane(x: v128, idx: u8) -> T if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler, true) | @@ -2766,7 +2753,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_replace_lane: { // replace_lane(x: v128, idx: u8, value: T) -> v128 + case BuiltinNames.v128_replace_lane: { // replace_lane(x: v128, idx: u8, value: T) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -2827,7 +2814,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_shuffle: { // shuffle(a: v128, b: v128, ...lanes: u8[]) -> v128 + case BuiltinNames.v128_shuffle: { // shuffle(a: v128, b: v128, ...lanes: u8[]) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) @@ -2933,7 +2920,7 @@ export function compileCall( compiler.currentType = Type.v128; return module.unreachable(); } - case BuiltinSymbols.v128_swizzle: { // swizzle(a: v128, b: v128) -> v128 + case BuiltinNames.v128_swizzle: { // swizzle(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -2946,7 +2933,7 @@ export function compileCall( let arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); return module.binary(BinaryOp.SwizzleV8x16, arg0, arg1); } - case BuiltinSymbols.v128_load_splat: { // load_splat(ptr: usize, immOffset?: usize, immAlign?: usize) -> v128 + case BuiltinNames.v128_load_splat: { // load_splat(ptr: usize, immOffset?: usize, immAlign?: usize) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler, true) | @@ -3021,7 +3008,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_load_ext: { // load_ext(ptr: usize, immOffset?: usize, immAlign?: usize) -> v128 + case BuiltinNames.v128_load_ext: { // load_ext(ptr: usize, immOffset?: usize, immAlign?: usize) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler, true) | @@ -3085,7 +3072,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_add: { // add(a: v128, b: v128) -> v128 + case BuiltinNames.v128_add: { // add(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3126,7 +3113,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_sub: { // sub(a: v128, b: v128) -> v128 + case BuiltinNames.v128_sub: { // sub(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3167,7 +3154,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_mul: { // mul(a: v128, b: v128) -> v128 + case BuiltinNames.v128_mul: { // mul(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3204,7 +3191,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_div: { // div(a: v128, b: v128) -> v128 + case BuiltinNames.v128_div: { // div(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3228,7 +3215,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_add_saturate: { // add_saturate(a: v128, b: v128) -> v128 + case BuiltinNames.v128_add_saturate: { // add_saturate(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3254,7 +3241,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_sub_saturate: { // sub_saturate(a: v128, b: v128) -> v128 + case BuiltinNames.v128_sub_saturate: { // sub_saturate(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3280,7 +3267,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_min: { // min(a: v128, b: v128) -> v128 + case BuiltinNames.v128_min: { // min(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3318,7 +3305,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_max: { // max(a: v128, b: v128) -> v128 + case BuiltinNames.v128_max: { // max(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3356,7 +3343,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_dot: { // dot(a: v128, b: v128) -> v128 + case BuiltinNames.v128_dot: { // dot(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3379,7 +3366,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_avgr: { // avgr(a: v128, b: v128) -> v128 + case BuiltinNames.v128_avgr: { // avgr(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3403,7 +3390,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_eq: { // eq(a: v128, b: v128) -> v128 + case BuiltinNames.v128_eq: { // eq(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3440,7 +3427,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_ne: { // ne(a: v128, b: v128) -> v128 + case BuiltinNames.v128_ne: { // ne(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3477,7 +3464,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_lt: { // lt(a: v128, b: v128) -> v128 + case BuiltinNames.v128_lt: { // lt(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3519,7 +3506,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_le: { // le(a: v128, b: v128) -> v128 + case BuiltinNames.v128_le: { // le(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3561,7 +3548,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_gt: { // gt(a: v128, b: v128) -> v128 + case BuiltinNames.v128_gt: { // gt(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3603,7 +3590,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_ge: { // ge(a: v128, b: v128) -> v128 + case BuiltinNames.v128_ge: { // ge(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3645,7 +3632,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_narrow: { + case BuiltinNames.v128_narrow: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3671,7 +3658,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_neg: { + case BuiltinNames.v128_neg: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3711,7 +3698,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_abs: { + case BuiltinNames.v128_abs: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3734,7 +3721,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_sqrt: { + case BuiltinNames.v128_sqrt: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3757,7 +3744,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_convert: { + case BuiltinNames.v128_convert: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3782,7 +3769,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_trunc_sat: { + case BuiltinNames.v128_trunc_sat: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3807,7 +3794,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_widen_low: { + case BuiltinNames.v128_widen_low: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3832,7 +3819,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_widen_high: { + case BuiltinNames.v128_widen_high: { if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3857,7 +3844,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_shl: { // shl(a: v128, b: i32) -> v128 + case BuiltinNames.v128_shl: { // shl(a: v128, b: i32) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3897,7 +3884,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_shr: { // shr(a: v128, b: i32) -> v128 + case BuiltinNames.v128_shr: { // shr(a: v128, b: i32) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -3944,7 +3931,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_and: { // and(a: v128) -> v128 + case BuiltinNames.v128_and: { // and(a: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -3957,7 +3944,7 @@ export function compileCall( let arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); return module.binary(BinaryOp.AndV128, arg0, arg1); } - case BuiltinSymbols.v128_or: { // or(a: v128) -> v128 + case BuiltinNames.v128_or: { // or(a: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -3970,7 +3957,7 @@ export function compileCall( let arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); return module.binary(BinaryOp.OrV128, arg0, arg1); } - case BuiltinSymbols.v128_xor: { // xor(a: v128) -> v128 + case BuiltinNames.v128_xor: { // xor(a: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -3983,7 +3970,7 @@ export function compileCall( let arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); return module.binary(BinaryOp.XorV128, arg0, arg1); } - case BuiltinSymbols.v128_andnot: { // andnot(a: v128, b: v128) -> v128 + case BuiltinNames.v128_andnot: { // andnot(a: v128, b: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -3996,7 +3983,7 @@ export function compileCall( let arg1 = compiler.compileExpression(operands[1], Type.v128, Constraints.CONV_IMPLICIT); return module.binary(BinaryOp.AndNotV128, arg0, arg1); } - case BuiltinSymbols.v128_not: { // not(a: v128) -> v128 + case BuiltinNames.v128_not: { // not(a: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -4008,7 +3995,7 @@ export function compileCall( let arg0 = compiler.compileExpression(operands[0], Type.v128, Constraints.CONV_IMPLICIT); return module.unary(UnaryOp.NotV128, arg0); } - case BuiltinSymbols.v128_bitselect: { // bitselect(v1: v128, v2: v128, c: v128) -> v128 + case BuiltinNames.v128_bitselect: { // bitselect(v1: v128, v2: v128, c: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeAbsent(typeArguments, reportNode, prototype) | @@ -4022,7 +4009,7 @@ export function compileCall( let arg2 = compiler.compileExpression(operands[2], Type.v128, Constraints.CONV_IMPLICIT); return module.simd_ternary(SIMDTernaryOp.Bitselect, arg0, arg1, arg2); } - case BuiltinSymbols.v128_any_true: { // any_true(a: v128) -> bool + case BuiltinNames.v128_any_true: { // any_true(a: v128) -> bool if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -4061,7 +4048,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_all_true: { // all_true(a: v128) -> bool + case BuiltinNames.v128_all_true: { // all_true(a: v128) -> bool if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -4100,7 +4087,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_qfma: { // qfma(a: v128, b: v128, c: v128) -> v128 + case BuiltinNames.v128_qfma: { // qfma(a: v128, b: v128, c: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -4125,7 +4112,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.v128_qfms: { // qfms(a: v128, b: v128, c: v128) -> v128 + case BuiltinNames.v128_qfms: { // qfms(a: v128, b: v128, c: v128) -> v128 if ( checkFeatureEnabled(Feature.SIMD, reportNode, compiler) | checkTypeRequired(typeArguments, reportNode, compiler) | @@ -4153,7 +4140,7 @@ export function compileCall( // === Internal runtime ======================================================================= - case BuiltinSymbols.idof: { + case BuiltinNames.idof: { let type = evaluateConstantType(compiler, typeArguments, operands, reportNode); compiler.currentType = Type.u32; if (!type) return module.unreachable(); @@ -4173,7 +4160,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.visit_globals: { + case BuiltinNames.visit_globals: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 1, reportNode, compiler) // cookie @@ -4184,9 +4171,9 @@ export function compileCall( let arg0 = compiler.compileExpression(operands[0], Type.u32, Constraints.CONV_IMPLICIT); compiler.runtimeFeatures |= RuntimeFeatures.visitGlobals; compiler.currentType = Type.void; - return module.call(BuiltinSymbols.visit_globals, [ arg0 ], NativeType.None); + return module.call(BuiltinNames.visit_globals, [ arg0 ], NativeType.None); } - case BuiltinSymbols.visit_members: { + case BuiltinNames.visit_members: { if ( checkTypeAbsent(typeArguments, reportNode, prototype) | checkArgsRequired(operands, 2, reportNode, compiler) // ref, cookie @@ -4198,9 +4185,9 @@ export function compileCall( let arg1 = compiler.compileExpression(operands[1], Type.u32, Constraints.CONV_IMPLICIT); compiler.runtimeFeatures |= RuntimeFeatures.visitMembers; compiler.currentType = Type.void; - return module.call(BuiltinSymbols.visit_members, [ arg0, arg1 ], NativeType.None); + return module.call(BuiltinNames.visit_members, [ arg0, arg1 ], NativeType.None); } - case BuiltinSymbols.isNaN: { + case BuiltinNames.isNaN: { if ( checkTypeOptional(typeArguments, reportNode, compiler) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -4274,7 +4261,7 @@ export function compileCall( ); return module.unreachable(); } - case BuiltinSymbols.isFinite: { + case BuiltinNames.isFinite: { if ( checkTypeOptional(typeArguments, reportNode, compiler) | checkArgsRequired(operands, 1, reportNode, compiler) @@ -4397,320 +4384,320 @@ function tryDeferASM( // and, or, xor, shl, shr_u, shr_s // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u - case BuiltinSymbols.i32_clz: return deferASM(BuiltinSymbols.clz, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_clz: return deferASM(BuiltinSymbols.clz, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_ctz: return deferASM(BuiltinSymbols.ctz, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_ctz: return deferASM(BuiltinSymbols.ctz, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_popcnt: return deferASM(BuiltinSymbols.popcnt, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_popcnt: return deferASM(BuiltinSymbols.popcnt, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_rotl: return deferASM(BuiltinSymbols.rotl, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_rotl: return deferASM(BuiltinSymbols.rotl, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_rotr: return deferASM(BuiltinSymbols.rotr, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_rotr: return deferASM(BuiltinSymbols.rotr, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.f32_abs: return deferASM(BuiltinSymbols.abs, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_abs: return deferASM(BuiltinSymbols.abs, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.f32_max: return deferASM(BuiltinSymbols.max, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_max: return deferASM(BuiltinSymbols.max, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.f32_min: return deferASM(BuiltinSymbols.min, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_min: return deferASM(BuiltinSymbols.min, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.f32_ceil: return deferASM(BuiltinSymbols.ceil, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_ceil: return deferASM(BuiltinSymbols.ceil, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.f32_floor: return deferASM(BuiltinSymbols.floor, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_floor: return deferASM(BuiltinSymbols.floor, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.f32_copysign: return deferASM(BuiltinSymbols.copysign, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_copysign: return deferASM(BuiltinSymbols.copysign, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.f32_nearest: return deferASM(BuiltinSymbols.nearest, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_nearest: return deferASM(BuiltinSymbols.nearest, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.i32_reinterpret_f32: return deferASM(BuiltinSymbols.reinterpret, compiler, Type.i32, operands, Type.f32, reportNode); - case BuiltinSymbols.i64_reinterpret_f64: return deferASM(BuiltinSymbols.reinterpret, compiler, Type.i64, operands, Type.f64, reportNode); - case BuiltinSymbols.f32_reinterpret_i32: return deferASM(BuiltinSymbols.reinterpret, compiler, Type.f32, operands, Type.i32, reportNode); - case BuiltinSymbols.f64_reinterpret_i64: return deferASM(BuiltinSymbols.reinterpret, compiler, Type.f64, operands, Type.i64, reportNode); - case BuiltinSymbols.f32_sqrt: return deferASM(BuiltinSymbols.sqrt, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_sqrt: return deferASM(BuiltinSymbols.sqrt, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.f32_trunc: return deferASM(BuiltinSymbols.trunc, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_trunc: return deferASM(BuiltinSymbols.trunc, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.i32_load8_s: return deferASM(BuiltinSymbols.load, compiler, Type.i8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_load8_u: return deferASM(BuiltinSymbols.load, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_load16_s: return deferASM(BuiltinSymbols.load, compiler, Type.i16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_load16_u: return deferASM(BuiltinSymbols.load, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_load: return deferASM(BuiltinSymbols.load, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_load8_s: return deferASM(BuiltinSymbols.load, compiler, Type.i8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_load8_u: return deferASM(BuiltinSymbols.load, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_load16_s: return deferASM(BuiltinSymbols.load, compiler, Type.i16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_load16_u: return deferASM(BuiltinSymbols.load, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_load32_s: return deferASM(BuiltinSymbols.load, compiler, Type.i32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_load32_u: return deferASM(BuiltinSymbols.load, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_load: return deferASM(BuiltinSymbols.load, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.f32_load: return deferASM(BuiltinSymbols.load, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_load: return deferASM(BuiltinSymbols.load, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.i32_store8: return deferASM(BuiltinSymbols.store, compiler, Type.i8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_store16: return deferASM(BuiltinSymbols.store, compiler, Type.i16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_store: return deferASM(BuiltinSymbols.store, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_store8: return deferASM(BuiltinSymbols.store, compiler, Type.i8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_store16: return deferASM(BuiltinSymbols.store, compiler, Type.i16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_store32: return deferASM(BuiltinSymbols.store, compiler, Type.i32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_store: return deferASM(BuiltinSymbols.store, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.f32_store: return deferASM(BuiltinSymbols.store, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f64_store: return deferASM(BuiltinSymbols.store, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.i32_clz: return deferASM(BuiltinNames.clz, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_clz: return deferASM(BuiltinNames.clz, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_ctz: return deferASM(BuiltinNames.ctz, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_ctz: return deferASM(BuiltinNames.ctz, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_popcnt: return deferASM(BuiltinNames.popcnt, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_popcnt: return deferASM(BuiltinNames.popcnt, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_rotl: return deferASM(BuiltinNames.rotl, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_rotl: return deferASM(BuiltinNames.rotl, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_rotr: return deferASM(BuiltinNames.rotr, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_rotr: return deferASM(BuiltinNames.rotr, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.f32_abs: return deferASM(BuiltinNames.abs, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_abs: return deferASM(BuiltinNames.abs, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.f32_max: return deferASM(BuiltinNames.max, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_max: return deferASM(BuiltinNames.max, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.f32_min: return deferASM(BuiltinNames.min, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_min: return deferASM(BuiltinNames.min, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.f32_ceil: return deferASM(BuiltinNames.ceil, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_ceil: return deferASM(BuiltinNames.ceil, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.f32_floor: return deferASM(BuiltinNames.floor, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_floor: return deferASM(BuiltinNames.floor, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.f32_copysign: return deferASM(BuiltinNames.copysign, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_copysign: return deferASM(BuiltinNames.copysign, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.f32_nearest: return deferASM(BuiltinNames.nearest, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_nearest: return deferASM(BuiltinNames.nearest, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.i32_reinterpret_f32: return deferASM(BuiltinNames.reinterpret, compiler, Type.i32, operands, Type.f32, reportNode); + case BuiltinNames.i64_reinterpret_f64: return deferASM(BuiltinNames.reinterpret, compiler, Type.i64, operands, Type.f64, reportNode); + case BuiltinNames.f32_reinterpret_i32: return deferASM(BuiltinNames.reinterpret, compiler, Type.f32, operands, Type.i32, reportNode); + case BuiltinNames.f64_reinterpret_i64: return deferASM(BuiltinNames.reinterpret, compiler, Type.f64, operands, Type.i64, reportNode); + case BuiltinNames.f32_sqrt: return deferASM(BuiltinNames.sqrt, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_sqrt: return deferASM(BuiltinNames.sqrt, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.f32_trunc: return deferASM(BuiltinNames.trunc, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_trunc: return deferASM(BuiltinNames.trunc, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.i32_load8_s: return deferASM(BuiltinNames.load, compiler, Type.i8, operands, Type.i32, reportNode); + case BuiltinNames.i32_load8_u: return deferASM(BuiltinNames.load, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_load16_s: return deferASM(BuiltinNames.load, compiler, Type.i16, operands, Type.i32, reportNode); + case BuiltinNames.i32_load16_u: return deferASM(BuiltinNames.load, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_load: return deferASM(BuiltinNames.load, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_load8_s: return deferASM(BuiltinNames.load, compiler, Type.i8, operands, Type.i64, reportNode); + case BuiltinNames.i64_load8_u: return deferASM(BuiltinNames.load, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_load16_s: return deferASM(BuiltinNames.load, compiler, Type.i16, operands, Type.i64, reportNode); + case BuiltinNames.i64_load16_u: return deferASM(BuiltinNames.load, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_load32_s: return deferASM(BuiltinNames.load, compiler, Type.i32, operands, Type.i64, reportNode); + case BuiltinNames.i64_load32_u: return deferASM(BuiltinNames.load, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_load: return deferASM(BuiltinNames.load, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.f32_load: return deferASM(BuiltinNames.load, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_load: return deferASM(BuiltinNames.load, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.i32_store8: return deferASM(BuiltinNames.store, compiler, Type.i8, operands, Type.i32, reportNode); + case BuiltinNames.i32_store16: return deferASM(BuiltinNames.store, compiler, Type.i16, operands, Type.i32, reportNode); + case BuiltinNames.i32_store: return deferASM(BuiltinNames.store, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_store8: return deferASM(BuiltinNames.store, compiler, Type.i8, operands, Type.i64, reportNode); + case BuiltinNames.i64_store16: return deferASM(BuiltinNames.store, compiler, Type.i16, operands, Type.i64, reportNode); + case BuiltinNames.i64_store32: return deferASM(BuiltinNames.store, compiler, Type.i32, operands, Type.i64, reportNode); + case BuiltinNames.i64_store: return deferASM(BuiltinNames.store, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.f32_store: return deferASM(BuiltinNames.store, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f64_store: return deferASM(BuiltinNames.store, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.i32_atomic_load8_u: return deferASM(BuiltinSymbols.atomic_load, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_load16_u: return deferASM(BuiltinSymbols.atomic_load, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_load: return deferASM(BuiltinSymbols.atomic_load, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_load8_u: return deferASM(BuiltinSymbols.atomic_load, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_load16_u: return deferASM(BuiltinSymbols.atomic_load, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_load32_u: return deferASM(BuiltinSymbols.atomic_load, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_load: return deferASM(BuiltinSymbols.atomic_load, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_load8_u: return deferASM(BuiltinNames.atomic_load, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_load16_u: return deferASM(BuiltinNames.atomic_load, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_load: return deferASM(BuiltinNames.atomic_load, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_load8_u: return deferASM(BuiltinNames.atomic_load, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_load16_u: return deferASM(BuiltinNames.atomic_load, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_load32_u: return deferASM(BuiltinNames.atomic_load, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_load: return deferASM(BuiltinNames.atomic_load, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_atomic_store8: return deferASM(BuiltinSymbols.atomic_store, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_store16: return deferASM(BuiltinSymbols.atomic_store, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_store: return deferASM(BuiltinSymbols.atomic_store, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_store8: return deferASM(BuiltinSymbols.atomic_store, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_store16: return deferASM(BuiltinSymbols.atomic_store, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_store32: return deferASM(BuiltinSymbols.atomic_store, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_store: return deferASM(BuiltinSymbols.atomic_store, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_store8: return deferASM(BuiltinNames.atomic_store, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_store16: return deferASM(BuiltinNames.atomic_store, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_store: return deferASM(BuiltinNames.atomic_store, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_store8: return deferASM(BuiltinNames.atomic_store, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_store16: return deferASM(BuiltinNames.atomic_store, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_store32: return deferASM(BuiltinNames.atomic_store, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_store: return deferASM(BuiltinNames.atomic_store, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_atomic_rmw8_add_u: return deferASM(BuiltinSymbols.atomic_add, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw16_add_u: return deferASM(BuiltinSymbols.atomic_add, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw_add: return deferASM(BuiltinSymbols.atomic_add, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_rmw8_add_u: return deferASM(BuiltinSymbols.atomic_add, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw16_add_u: return deferASM(BuiltinSymbols.atomic_add, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw32_add_u: return deferASM(BuiltinSymbols.atomic_add, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw_add: return deferASM(BuiltinSymbols.atomic_add, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_rmw8_add_u: return deferASM(BuiltinNames.atomic_add, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw16_add_u: return deferASM(BuiltinNames.atomic_add, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw_add: return deferASM(BuiltinNames.atomic_add, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_rmw8_add_u: return deferASM(BuiltinNames.atomic_add, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw16_add_u: return deferASM(BuiltinNames.atomic_add, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw32_add_u: return deferASM(BuiltinNames.atomic_add, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw_add: return deferASM(BuiltinNames.atomic_add, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_atomic_rmw8_sub_u: return deferASM(BuiltinSymbols.atomic_sub, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw16_sub_u: return deferASM(BuiltinSymbols.atomic_sub, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw_sub: return deferASM(BuiltinSymbols.atomic_sub, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_rmw8_sub_u: return deferASM(BuiltinSymbols.atomic_sub, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw16_sub_u: return deferASM(BuiltinSymbols.atomic_sub, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw32_sub_u: return deferASM(BuiltinSymbols.atomic_sub, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw_sub: return deferASM(BuiltinSymbols.atomic_sub, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_rmw8_sub_u: return deferASM(BuiltinNames.atomic_sub, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw16_sub_u: return deferASM(BuiltinNames.atomic_sub, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw_sub: return deferASM(BuiltinNames.atomic_sub, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_rmw8_sub_u: return deferASM(BuiltinNames.atomic_sub, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw16_sub_u: return deferASM(BuiltinNames.atomic_sub, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw32_sub_u: return deferASM(BuiltinNames.atomic_sub, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw_sub: return deferASM(BuiltinNames.atomic_sub, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_atomic_rmw8_and_u: return deferASM(BuiltinSymbols.atomic_and, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw16_and_u: return deferASM(BuiltinSymbols.atomic_and, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw_and: return deferASM(BuiltinSymbols.atomic_and, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_rmw8_and_u: return deferASM(BuiltinSymbols.atomic_and, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw16_and_u: return deferASM(BuiltinSymbols.atomic_and, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw32_and_u: return deferASM(BuiltinSymbols.atomic_and, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw_and: return deferASM(BuiltinSymbols.atomic_and, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_rmw8_and_u: return deferASM(BuiltinNames.atomic_and, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw16_and_u: return deferASM(BuiltinNames.atomic_and, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw_and: return deferASM(BuiltinNames.atomic_and, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_rmw8_and_u: return deferASM(BuiltinNames.atomic_and, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw16_and_u: return deferASM(BuiltinNames.atomic_and, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw32_and_u: return deferASM(BuiltinNames.atomic_and, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw_and: return deferASM(BuiltinNames.atomic_and, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_atomic_rmw8_or_u: return deferASM(BuiltinSymbols.atomic_or, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw16_or_u: return deferASM(BuiltinSymbols.atomic_or, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw_or: return deferASM(BuiltinSymbols.atomic_or, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_rmw8_or_u: return deferASM(BuiltinSymbols.atomic_or, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw16_or_u: return deferASM(BuiltinSymbols.atomic_or, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw32_or_u: return deferASM(BuiltinSymbols.atomic_or, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw_or: return deferASM(BuiltinSymbols.atomic_or, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_rmw8_or_u: return deferASM(BuiltinNames.atomic_or, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw16_or_u: return deferASM(BuiltinNames.atomic_or, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw_or: return deferASM(BuiltinNames.atomic_or, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_rmw8_or_u: return deferASM(BuiltinNames.atomic_or, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw16_or_u: return deferASM(BuiltinNames.atomic_or, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw32_or_u: return deferASM(BuiltinNames.atomic_or, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw_or: return deferASM(BuiltinNames.atomic_or, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_atomic_rmw8_xor_u: return deferASM(BuiltinSymbols.atomic_xor, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw16_xor_u: return deferASM(BuiltinSymbols.atomic_xor, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw_xor: return deferASM(BuiltinSymbols.atomic_xor, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_rmw8_xor_u: return deferASM(BuiltinSymbols.atomic_xor, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw16_xor_u: return deferASM(BuiltinSymbols.atomic_xor, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw32_xor_u: return deferASM(BuiltinSymbols.atomic_xor, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw_xor: return deferASM(BuiltinSymbols.atomic_xor, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_rmw8_xor_u: return deferASM(BuiltinNames.atomic_xor, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw16_xor_u: return deferASM(BuiltinNames.atomic_xor, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw_xor: return deferASM(BuiltinNames.atomic_xor, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_rmw8_xor_u: return deferASM(BuiltinNames.atomic_xor, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw16_xor_u: return deferASM(BuiltinNames.atomic_xor, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw32_xor_u: return deferASM(BuiltinNames.atomic_xor, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw_xor: return deferASM(BuiltinNames.atomic_xor, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_atomic_rmw8_xchg_u: return deferASM(BuiltinSymbols.atomic_xchg, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw16_xchg_u: return deferASM(BuiltinSymbols.atomic_xchg, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw_xchg: return deferASM(BuiltinSymbols.atomic_xchg, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_rmw8_xchg_u: return deferASM(BuiltinSymbols.atomic_xchg, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw16_xchg_u: return deferASM(BuiltinSymbols.atomic_xchg, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw32_xchg_u: return deferASM(BuiltinSymbols.atomic_xchg, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw_xchg: return deferASM(BuiltinSymbols.atomic_xchg, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_rmw8_xchg_u: return deferASM(BuiltinNames.atomic_xchg, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw16_xchg_u: return deferASM(BuiltinNames.atomic_xchg, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw_xchg: return deferASM(BuiltinNames.atomic_xchg, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_rmw8_xchg_u: return deferASM(BuiltinNames.atomic_xchg, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw16_xchg_u: return deferASM(BuiltinNames.atomic_xchg, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw32_xchg_u: return deferASM(BuiltinNames.atomic_xchg, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw_xchg: return deferASM(BuiltinNames.atomic_xchg, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_atomic_rmw8_cmpxchg_u: return deferASM(BuiltinSymbols.atomic_cmpxchg, compiler, Type.u8, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw16_cmpxchg_u: return deferASM(BuiltinSymbols.atomic_cmpxchg, compiler, Type.u16, operands, Type.i32, reportNode); - case BuiltinSymbols.i32_atomic_rmw_cmpxchg: return deferASM(BuiltinSymbols.atomic_cmpxchg, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_atomic_rmw8_cmpxchg_u: return deferASM(BuiltinSymbols.atomic_cmpxchg, compiler, Type.u8, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw16_cmpxchg_u: return deferASM(BuiltinSymbols.atomic_cmpxchg, compiler, Type.u16, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw32_cmpxchg_u: return deferASM(BuiltinSymbols.atomic_cmpxchg, compiler, Type.u32, operands, Type.i64, reportNode); - case BuiltinSymbols.i64_atomic_rmw_cmpxchg: return deferASM(BuiltinSymbols.atomic_cmpxchg, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i32_atomic_rmw8_cmpxchg_u: return deferASM(BuiltinNames.atomic_cmpxchg, compiler, Type.u8, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw16_cmpxchg_u: return deferASM(BuiltinNames.atomic_cmpxchg, compiler, Type.u16, operands, Type.i32, reportNode); + case BuiltinNames.i32_atomic_rmw_cmpxchg: return deferASM(BuiltinNames.atomic_cmpxchg, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_atomic_rmw8_cmpxchg_u: return deferASM(BuiltinNames.atomic_cmpxchg, compiler, Type.u8, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw16_cmpxchg_u: return deferASM(BuiltinNames.atomic_cmpxchg, compiler, Type.u16, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw32_cmpxchg_u: return deferASM(BuiltinNames.atomic_cmpxchg, compiler, Type.u32, operands, Type.i64, reportNode); + case BuiltinNames.i64_atomic_rmw_cmpxchg: return deferASM(BuiltinNames.atomic_cmpxchg, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i32_wait: return deferASM(BuiltinSymbols.atomic_wait, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i64_wait: return deferASM(BuiltinSymbols.atomic_wait, compiler, Type.i64, operands, Type.i32, reportNode); + case BuiltinNames.i32_wait: return deferASM(BuiltinNames.atomic_wait, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i64_wait: return deferASM(BuiltinNames.atomic_wait, compiler, Type.i64, operands, Type.i32, reportNode); - case BuiltinSymbols.v128_load: return deferASM(BuiltinSymbols.load, compiler, Type.v128, operands, Type.v128, reportNode); - case BuiltinSymbols.v128_store: return deferASM(BuiltinSymbols.store, compiler, Type.v128, operands, Type.v128, reportNode); + case BuiltinNames.v128_load: return deferASM(BuiltinNames.load, compiler, Type.v128, operands, Type.v128, reportNode); + case BuiltinNames.v128_store: return deferASM(BuiltinNames.store, compiler, Type.v128, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_splat: return deferASM(BuiltinSymbols.v128_splat, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_extract_lane_s: return deferASM(BuiltinSymbols.v128_extract_lane, compiler, Type.i8, operands, Type.i8, reportNode); - case BuiltinSymbols.i8x16_extract_lane_u: return deferASM(BuiltinSymbols.v128_extract_lane, compiler, Type.u8, operands, Type.u8, reportNode); - case BuiltinSymbols.i8x16_replace_lane: return deferASM(BuiltinSymbols.v128_replace_lane, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_add: return deferASM(BuiltinSymbols.v128_add, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_sub: return deferASM(BuiltinSymbols.v128_sub, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_mul: return deferASM(BuiltinSymbols.v128_mul, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_min_s: return deferASM(BuiltinSymbols.v128_min, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_min_u: return deferASM(BuiltinSymbols.v128_min, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_max_s: return deferASM(BuiltinSymbols.v128_max, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_max_u: return deferASM(BuiltinSymbols.v128_max, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_avgr_u: return deferASM(BuiltinSymbols.v128_avgr, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_neg: return deferASM(BuiltinSymbols.v128_neg, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_add_saturate_s: return deferASM(BuiltinSymbols.v128_add_saturate, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_add_saturate_u: return deferASM(BuiltinSymbols.v128_add_saturate, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_sub_saturate_s: return deferASM(BuiltinSymbols.v128_sub_saturate, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_sub_saturate_u: return deferASM(BuiltinSymbols.v128_sub_saturate, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_shl: return deferASM(BuiltinSymbols.v128_shl, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_shr_s: return deferASM(BuiltinSymbols.v128_shr, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_shr_u: return deferASM(BuiltinSymbols.v128_shr, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_any_true: return deferASM(BuiltinSymbols.v128_any_true, compiler, Type.i8, operands, Type.i32, reportNode); - case BuiltinSymbols.i8x16_all_true: return deferASM(BuiltinSymbols.v128_all_true, compiler, Type.i8, operands, Type.i32, reportNode); - case BuiltinSymbols.i8x16_eq: return deferASM(BuiltinSymbols.v128_eq, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_ne: return deferASM(BuiltinSymbols.v128_ne, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_lt_s: return deferASM(BuiltinSymbols.v128_lt, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_lt_u: return deferASM(BuiltinSymbols.v128_lt, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_le_s: return deferASM(BuiltinSymbols.v128_le, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_le_u: return deferASM(BuiltinSymbols.v128_le, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_gt_s: return deferASM(BuiltinSymbols.v128_gt, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_gt_u: return deferASM(BuiltinSymbols.v128_gt, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_ge_s: return deferASM(BuiltinSymbols.v128_ge, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_ge_u: return deferASM(BuiltinSymbols.v128_ge, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_narrow_i16x8_s: return deferASM(BuiltinSymbols.v128_narrow, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i8x16_narrow_i16x8_u: return deferASM(BuiltinSymbols.v128_narrow, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_splat: return deferASM(BuiltinNames.v128_splat, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_extract_lane_s: return deferASM(BuiltinNames.v128_extract_lane, compiler, Type.i8, operands, Type.i8, reportNode); + case BuiltinNames.i8x16_extract_lane_u: return deferASM(BuiltinNames.v128_extract_lane, compiler, Type.u8, operands, Type.u8, reportNode); + case BuiltinNames.i8x16_replace_lane: return deferASM(BuiltinNames.v128_replace_lane, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_add: return deferASM(BuiltinNames.v128_add, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_sub: return deferASM(BuiltinNames.v128_sub, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_mul: return deferASM(BuiltinNames.v128_mul, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_min_s: return deferASM(BuiltinNames.v128_min, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_min_u: return deferASM(BuiltinNames.v128_min, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_max_s: return deferASM(BuiltinNames.v128_max, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_max_u: return deferASM(BuiltinNames.v128_max, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_avgr_u: return deferASM(BuiltinNames.v128_avgr, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_neg: return deferASM(BuiltinNames.v128_neg, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_add_saturate_s: return deferASM(BuiltinNames.v128_add_saturate, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_add_saturate_u: return deferASM(BuiltinNames.v128_add_saturate, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_sub_saturate_s: return deferASM(BuiltinNames.v128_sub_saturate, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_sub_saturate_u: return deferASM(BuiltinNames.v128_sub_saturate, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_shl: return deferASM(BuiltinNames.v128_shl, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_shr_s: return deferASM(BuiltinNames.v128_shr, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_shr_u: return deferASM(BuiltinNames.v128_shr, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_any_true: return deferASM(BuiltinNames.v128_any_true, compiler, Type.i8, operands, Type.i32, reportNode); + case BuiltinNames.i8x16_all_true: return deferASM(BuiltinNames.v128_all_true, compiler, Type.i8, operands, Type.i32, reportNode); + case BuiltinNames.i8x16_eq: return deferASM(BuiltinNames.v128_eq, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_ne: return deferASM(BuiltinNames.v128_ne, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_lt_s: return deferASM(BuiltinNames.v128_lt, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_lt_u: return deferASM(BuiltinNames.v128_lt, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_le_s: return deferASM(BuiltinNames.v128_le, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_le_u: return deferASM(BuiltinNames.v128_le, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_gt_s: return deferASM(BuiltinNames.v128_gt, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_gt_u: return deferASM(BuiltinNames.v128_gt, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_ge_s: return deferASM(BuiltinNames.v128_ge, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_ge_u: return deferASM(BuiltinNames.v128_ge, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_narrow_i16x8_s: return deferASM(BuiltinNames.v128_narrow, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i8x16_narrow_i16x8_u: return deferASM(BuiltinNames.v128_narrow, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_splat: return deferASM(BuiltinSymbols.v128_splat, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_extract_lane_s: return deferASM(BuiltinSymbols.v128_extract_lane, compiler, Type.i16, operands, Type.i16, reportNode); - case BuiltinSymbols.i16x8_extract_lane_u: return deferASM(BuiltinSymbols.v128_extract_lane, compiler, Type.u16, operands, Type.u16, reportNode); - case BuiltinSymbols.i16x8_replace_lane: return deferASM(BuiltinSymbols.v128_replace_lane, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_add: return deferASM(BuiltinSymbols.v128_add, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_sub: return deferASM(BuiltinSymbols.v128_sub, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_mul: return deferASM(BuiltinSymbols.v128_mul, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_min_s: return deferASM(BuiltinSymbols.v128_min, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_min_u: return deferASM(BuiltinSymbols.v128_min, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_max_s: return deferASM(BuiltinSymbols.v128_max, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_max_u: return deferASM(BuiltinSymbols.v128_max, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_avgr_u: return deferASM(BuiltinSymbols.v128_avgr, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_neg: return deferASM(BuiltinSymbols.v128_neg, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_add_saturate_s: return deferASM(BuiltinSymbols.v128_add_saturate, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_add_saturate_u: return deferASM(BuiltinSymbols.v128_add_saturate, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_sub_saturate_s: return deferASM(BuiltinSymbols.v128_sub_saturate, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_sub_saturate_u: return deferASM(BuiltinSymbols.v128_sub_saturate, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_shl: return deferASM(BuiltinSymbols.v128_shl, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_shr_s: return deferASM(BuiltinSymbols.v128_shr, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_shr_u: return deferASM(BuiltinSymbols.v128_shr, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_any_true: return deferASM(BuiltinSymbols.v128_any_true, compiler, Type.i16, operands, Type.i32, reportNode); - case BuiltinSymbols.i16x8_all_true: return deferASM(BuiltinSymbols.v128_all_true, compiler, Type.i16, operands, Type.i32, reportNode); - case BuiltinSymbols.i16x8_eq: return deferASM(BuiltinSymbols.v128_eq, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_ne: return deferASM(BuiltinSymbols.v128_ne, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_lt_s: return deferASM(BuiltinSymbols.v128_lt, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_lt_u: return deferASM(BuiltinSymbols.v128_lt, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_le_s: return deferASM(BuiltinSymbols.v128_le, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_le_u: return deferASM(BuiltinSymbols.v128_le, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_gt_s: return deferASM(BuiltinSymbols.v128_gt, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_gt_u: return deferASM(BuiltinSymbols.v128_gt, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_ge_s: return deferASM(BuiltinSymbols.v128_ge, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_ge_u: return deferASM(BuiltinSymbols.v128_ge, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_narrow_i32x4_s: return deferASM(BuiltinSymbols.v128_narrow, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_narrow_i32x4_u: return deferASM(BuiltinSymbols.v128_narrow, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_widen_low_i8x16_s: return deferASM(BuiltinSymbols.v128_widen_low, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_widen_low_i8x16_u: return deferASM(BuiltinSymbols.v128_widen_low, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_widen_high_i8x16_s: return deferASM(BuiltinSymbols.v128_widen_high, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_widen_high_i8x16_u: return deferASM(BuiltinSymbols.v128_widen_high, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_load8x8_s: return deferASM(BuiltinSymbols.v128_load_ext, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.i16x8_load8x8_u: return deferASM(BuiltinSymbols.v128_load_ext, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_splat: return deferASM(BuiltinNames.v128_splat, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_extract_lane_s: return deferASM(BuiltinNames.v128_extract_lane, compiler, Type.i16, operands, Type.i16, reportNode); + case BuiltinNames.i16x8_extract_lane_u: return deferASM(BuiltinNames.v128_extract_lane, compiler, Type.u16, operands, Type.u16, reportNode); + case BuiltinNames.i16x8_replace_lane: return deferASM(BuiltinNames.v128_replace_lane, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_add: return deferASM(BuiltinNames.v128_add, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_sub: return deferASM(BuiltinNames.v128_sub, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_mul: return deferASM(BuiltinNames.v128_mul, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_min_s: return deferASM(BuiltinNames.v128_min, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_min_u: return deferASM(BuiltinNames.v128_min, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_max_s: return deferASM(BuiltinNames.v128_max, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_max_u: return deferASM(BuiltinNames.v128_max, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_avgr_u: return deferASM(BuiltinNames.v128_avgr, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_neg: return deferASM(BuiltinNames.v128_neg, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_add_saturate_s: return deferASM(BuiltinNames.v128_add_saturate, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_add_saturate_u: return deferASM(BuiltinNames.v128_add_saturate, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_sub_saturate_s: return deferASM(BuiltinNames.v128_sub_saturate, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_sub_saturate_u: return deferASM(BuiltinNames.v128_sub_saturate, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_shl: return deferASM(BuiltinNames.v128_shl, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_shr_s: return deferASM(BuiltinNames.v128_shr, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_shr_u: return deferASM(BuiltinNames.v128_shr, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_any_true: return deferASM(BuiltinNames.v128_any_true, compiler, Type.i16, operands, Type.i32, reportNode); + case BuiltinNames.i16x8_all_true: return deferASM(BuiltinNames.v128_all_true, compiler, Type.i16, operands, Type.i32, reportNode); + case BuiltinNames.i16x8_eq: return deferASM(BuiltinNames.v128_eq, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_ne: return deferASM(BuiltinNames.v128_ne, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_lt_s: return deferASM(BuiltinNames.v128_lt, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_lt_u: return deferASM(BuiltinNames.v128_lt, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_le_s: return deferASM(BuiltinNames.v128_le, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_le_u: return deferASM(BuiltinNames.v128_le, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_gt_s: return deferASM(BuiltinNames.v128_gt, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_gt_u: return deferASM(BuiltinNames.v128_gt, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_ge_s: return deferASM(BuiltinNames.v128_ge, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_ge_u: return deferASM(BuiltinNames.v128_ge, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_narrow_i32x4_s: return deferASM(BuiltinNames.v128_narrow, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_narrow_i32x4_u: return deferASM(BuiltinNames.v128_narrow, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_widen_low_i8x16_s: return deferASM(BuiltinNames.v128_widen_low, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_widen_low_i8x16_u: return deferASM(BuiltinNames.v128_widen_low, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_widen_high_i8x16_s: return deferASM(BuiltinNames.v128_widen_high, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_widen_high_i8x16_u: return deferASM(BuiltinNames.v128_widen_high, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_load8x8_s: return deferASM(BuiltinNames.v128_load_ext, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.i16x8_load8x8_u: return deferASM(BuiltinNames.v128_load_ext, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_splat: return deferASM(BuiltinSymbols.v128_splat, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_extract_lane: return deferASM(BuiltinSymbols.v128_extract_lane, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i32x4_replace_lane: return deferASM(BuiltinSymbols.v128_replace_lane, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_add: return deferASM(BuiltinSymbols.v128_add, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_sub: return deferASM(BuiltinSymbols.v128_sub, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_mul: return deferASM(BuiltinSymbols.v128_mul, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_min_s: return deferASM(BuiltinSymbols.v128_min, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_min_u: return deferASM(BuiltinSymbols.v128_min, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_max_s: return deferASM(BuiltinSymbols.v128_max, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_max_u: return deferASM(BuiltinSymbols.v128_max, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_dot_i16x8_s: return deferASM(BuiltinSymbols.v128_dot, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_neg: return deferASM(BuiltinSymbols.v128_neg, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_shl: return deferASM(BuiltinSymbols.v128_shl, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_shr_s: return deferASM(BuiltinSymbols.v128_shr, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_shr_u: return deferASM(BuiltinSymbols.v128_shr, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_any_true: return deferASM(BuiltinSymbols.v128_any_true, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i32x4_all_true: return deferASM(BuiltinSymbols.v128_all_true, compiler, Type.i32, operands, Type.i32, reportNode); - case BuiltinSymbols.i32x4_eq: return deferASM(BuiltinSymbols.v128_eq, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_ne: return deferASM(BuiltinSymbols.v128_ne, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_lt_s: return deferASM(BuiltinSymbols.v128_lt, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_lt_u: return deferASM(BuiltinSymbols.v128_lt, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_le_s: return deferASM(BuiltinSymbols.v128_le, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_le_u: return deferASM(BuiltinSymbols.v128_le, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_gt_s: return deferASM(BuiltinSymbols.v128_gt, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_gt_u: return deferASM(BuiltinSymbols.v128_gt, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_ge_s: return deferASM(BuiltinSymbols.v128_ge, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_ge_u: return deferASM(BuiltinSymbols.v128_ge, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_trunc_sat_f32x4_s: return deferASM(BuiltinSymbols.v128_trunc_sat, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_trunc_sat_f32x4_u: return deferASM(BuiltinSymbols.v128_trunc_sat, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_widen_low_i16x8_s: return deferASM(BuiltinSymbols.v128_widen_low, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_widen_low_i16x8_u: return deferASM(BuiltinSymbols.v128_widen_low, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_widen_high_i16x8_s: return deferASM(BuiltinSymbols.v128_widen_high, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_widen_high_i16x8_u: return deferASM(BuiltinSymbols.v128_widen_high, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_load16x4_s: return deferASM(BuiltinSymbols.v128_load_ext, compiler, Type.i16, operands, Type.v128, reportNode); - case BuiltinSymbols.i32x4_load16x4_u: return deferASM(BuiltinSymbols.v128_load_ext, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_splat: return deferASM(BuiltinNames.v128_splat, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_extract_lane: return deferASM(BuiltinNames.v128_extract_lane, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i32x4_replace_lane: return deferASM(BuiltinNames.v128_replace_lane, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_add: return deferASM(BuiltinNames.v128_add, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_sub: return deferASM(BuiltinNames.v128_sub, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_mul: return deferASM(BuiltinNames.v128_mul, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_min_s: return deferASM(BuiltinNames.v128_min, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_min_u: return deferASM(BuiltinNames.v128_min, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_max_s: return deferASM(BuiltinNames.v128_max, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_max_u: return deferASM(BuiltinNames.v128_max, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_dot_i16x8_s: return deferASM(BuiltinNames.v128_dot, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_neg: return deferASM(BuiltinNames.v128_neg, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_shl: return deferASM(BuiltinNames.v128_shl, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_shr_s: return deferASM(BuiltinNames.v128_shr, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_shr_u: return deferASM(BuiltinNames.v128_shr, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_any_true: return deferASM(BuiltinNames.v128_any_true, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i32x4_all_true: return deferASM(BuiltinNames.v128_all_true, compiler, Type.i32, operands, Type.i32, reportNode); + case BuiltinNames.i32x4_eq: return deferASM(BuiltinNames.v128_eq, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_ne: return deferASM(BuiltinNames.v128_ne, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_lt_s: return deferASM(BuiltinNames.v128_lt, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_lt_u: return deferASM(BuiltinNames.v128_lt, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_le_s: return deferASM(BuiltinNames.v128_le, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_le_u: return deferASM(BuiltinNames.v128_le, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_gt_s: return deferASM(BuiltinNames.v128_gt, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_gt_u: return deferASM(BuiltinNames.v128_gt, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_ge_s: return deferASM(BuiltinNames.v128_ge, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_ge_u: return deferASM(BuiltinNames.v128_ge, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_trunc_sat_f32x4_s: return deferASM(BuiltinNames.v128_trunc_sat, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_trunc_sat_f32x4_u: return deferASM(BuiltinNames.v128_trunc_sat, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_widen_low_i16x8_s: return deferASM(BuiltinNames.v128_widen_low, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_widen_low_i16x8_u: return deferASM(BuiltinNames.v128_widen_low, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_widen_high_i16x8_s: return deferASM(BuiltinNames.v128_widen_high, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_widen_high_i16x8_u: return deferASM(BuiltinNames.v128_widen_high, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_load16x4_s: return deferASM(BuiltinNames.v128_load_ext, compiler, Type.i16, operands, Type.v128, reportNode); + case BuiltinNames.i32x4_load16x4_u: return deferASM(BuiltinNames.v128_load_ext, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_splat: return deferASM(BuiltinSymbols.v128_splat, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_extract_lane: return deferASM(BuiltinSymbols.v128_extract_lane, compiler, Type.i64, operands, Type.i64, reportNode); - case BuiltinSymbols.i64x2_replace_lane: return deferASM(BuiltinSymbols.v128_replace_lane, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_add: return deferASM(BuiltinSymbols.v128_add, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_sub: return deferASM(BuiltinSymbols.v128_sub, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_neg: return deferASM(BuiltinSymbols.v128_neg, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_shl: return deferASM(BuiltinSymbols.v128_shl, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_shr_s: return deferASM(BuiltinSymbols.v128_shr, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_shr_u: return deferASM(BuiltinSymbols.v128_shr, compiler, Type.u64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_any_true: return deferASM(BuiltinSymbols.v128_any_true, compiler, Type.i64, operands, Type.i32, reportNode); - case BuiltinSymbols.i64x2_all_true: return deferASM(BuiltinSymbols.v128_all_true, compiler, Type.i64, operands, Type.i32, reportNode); - case BuiltinSymbols.i64x2_trunc_sat_f64x2_s: return deferASM(BuiltinSymbols.v128_trunc_sat, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_trunc_sat_f64x2_u: return deferASM(BuiltinSymbols.v128_trunc_sat, compiler, Type.u64, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_load32x2_s: return deferASM(BuiltinSymbols.v128_load_ext, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.i64x2_load32x2_u: return deferASM(BuiltinSymbols.v128_load_ext, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_splat: return deferASM(BuiltinNames.v128_splat, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_extract_lane: return deferASM(BuiltinNames.v128_extract_lane, compiler, Type.i64, operands, Type.i64, reportNode); + case BuiltinNames.i64x2_replace_lane: return deferASM(BuiltinNames.v128_replace_lane, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_add: return deferASM(BuiltinNames.v128_add, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_sub: return deferASM(BuiltinNames.v128_sub, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_neg: return deferASM(BuiltinNames.v128_neg, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_shl: return deferASM(BuiltinNames.v128_shl, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_shr_s: return deferASM(BuiltinNames.v128_shr, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_shr_u: return deferASM(BuiltinNames.v128_shr, compiler, Type.u64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_any_true: return deferASM(BuiltinNames.v128_any_true, compiler, Type.i64, operands, Type.i32, reportNode); + case BuiltinNames.i64x2_all_true: return deferASM(BuiltinNames.v128_all_true, compiler, Type.i64, operands, Type.i32, reportNode); + case BuiltinNames.i64x2_trunc_sat_f64x2_s: return deferASM(BuiltinNames.v128_trunc_sat, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_trunc_sat_f64x2_u: return deferASM(BuiltinNames.v128_trunc_sat, compiler, Type.u64, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_load32x2_s: return deferASM(BuiltinNames.v128_load_ext, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.i64x2_load32x2_u: return deferASM(BuiltinNames.v128_load_ext, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_splat: return deferASM(BuiltinSymbols.v128_splat, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_extract_lane: return deferASM(BuiltinSymbols.v128_extract_lane, compiler, Type.f32, operands, Type.f32, reportNode); - case BuiltinSymbols.f32x4_replace_lane: return deferASM(BuiltinSymbols.v128_replace_lane, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_add: return deferASM(BuiltinSymbols.v128_add, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_sub: return deferASM(BuiltinSymbols.v128_sub, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_mul: return deferASM(BuiltinSymbols.v128_mul, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_div: return deferASM(BuiltinSymbols.v128_div, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_neg: return deferASM(BuiltinSymbols.v128_neg, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_min: return deferASM(BuiltinSymbols.v128_min, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_max: return deferASM(BuiltinSymbols.v128_max, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_abs: return deferASM(BuiltinSymbols.v128_abs, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_sqrt: return deferASM(BuiltinSymbols.v128_sqrt, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_eq: return deferASM(BuiltinSymbols.v128_eq, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_ne: return deferASM(BuiltinSymbols.v128_ne, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_lt: return deferASM(BuiltinSymbols.v128_lt, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_le: return deferASM(BuiltinSymbols.v128_le, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_gt: return deferASM(BuiltinSymbols.v128_gt, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_ge: return deferASM(BuiltinSymbols.v128_ge, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_convert_i32x4_s: return deferASM(BuiltinSymbols.v128_convert, compiler, Type.i32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_convert_i32x4_u: return deferASM(BuiltinSymbols.v128_convert, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_qfma: return deferASM(BuiltinSymbols.v128_qfma, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f32x4_qfms: return deferASM(BuiltinSymbols.v128_qfms, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_splat: return deferASM(BuiltinNames.v128_splat, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_extract_lane: return deferASM(BuiltinNames.v128_extract_lane, compiler, Type.f32, operands, Type.f32, reportNode); + case BuiltinNames.f32x4_replace_lane: return deferASM(BuiltinNames.v128_replace_lane, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_add: return deferASM(BuiltinNames.v128_add, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_sub: return deferASM(BuiltinNames.v128_sub, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_mul: return deferASM(BuiltinNames.v128_mul, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_div: return deferASM(BuiltinNames.v128_div, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_neg: return deferASM(BuiltinNames.v128_neg, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_min: return deferASM(BuiltinNames.v128_min, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_max: return deferASM(BuiltinNames.v128_max, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_abs: return deferASM(BuiltinNames.v128_abs, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_sqrt: return deferASM(BuiltinNames.v128_sqrt, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_eq: return deferASM(BuiltinNames.v128_eq, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_ne: return deferASM(BuiltinNames.v128_ne, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_lt: return deferASM(BuiltinNames.v128_lt, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_le: return deferASM(BuiltinNames.v128_le, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_gt: return deferASM(BuiltinNames.v128_gt, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_ge: return deferASM(BuiltinNames.v128_ge, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_convert_i32x4_s: return deferASM(BuiltinNames.v128_convert, compiler, Type.i32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_convert_i32x4_u: return deferASM(BuiltinNames.v128_convert, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_qfma: return deferASM(BuiltinNames.v128_qfma, compiler, Type.f32, operands, Type.v128, reportNode); + case BuiltinNames.f32x4_qfms: return deferASM(BuiltinNames.v128_qfms, compiler, Type.f32, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_splat: return deferASM(BuiltinSymbols.v128_splat, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_extract_lane: return deferASM(BuiltinSymbols.v128_extract_lane, compiler, Type.f64, operands, Type.f64, reportNode); - case BuiltinSymbols.f64x2_replace_lane: return deferASM(BuiltinSymbols.v128_replace_lane, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_add: return deferASM(BuiltinSymbols.v128_add, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_sub: return deferASM(BuiltinSymbols.v128_sub, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_mul: return deferASM(BuiltinSymbols.v128_mul, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_div: return deferASM(BuiltinSymbols.v128_div, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_neg: return deferASM(BuiltinSymbols.v128_neg, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_min: return deferASM(BuiltinSymbols.v128_min, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_max: return deferASM(BuiltinSymbols.v128_max, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_abs: return deferASM(BuiltinSymbols.v128_abs, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_sqrt: return deferASM(BuiltinSymbols.v128_sqrt, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_eq: return deferASM(BuiltinSymbols.v128_eq, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_ne: return deferASM(BuiltinSymbols.v128_ne, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_lt: return deferASM(BuiltinSymbols.v128_lt, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_le: return deferASM(BuiltinSymbols.v128_le, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_gt: return deferASM(BuiltinSymbols.v128_gt, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_ge: return deferASM(BuiltinSymbols.v128_ge, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_convert_i64x2_s: return deferASM(BuiltinSymbols.v128_convert, compiler, Type.i64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_convert_i64x2_u: return deferASM(BuiltinSymbols.v128_convert, compiler, Type.u64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_qfma: return deferASM(BuiltinSymbols.v128_qfma, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.f64x2_qfms: return deferASM(BuiltinSymbols.v128_qfms, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_splat: return deferASM(BuiltinNames.v128_splat, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_extract_lane: return deferASM(BuiltinNames.v128_extract_lane, compiler, Type.f64, operands, Type.f64, reportNode); + case BuiltinNames.f64x2_replace_lane: return deferASM(BuiltinNames.v128_replace_lane, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_add: return deferASM(BuiltinNames.v128_add, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_sub: return deferASM(BuiltinNames.v128_sub, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_mul: return deferASM(BuiltinNames.v128_mul, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_div: return deferASM(BuiltinNames.v128_div, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_neg: return deferASM(BuiltinNames.v128_neg, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_min: return deferASM(BuiltinNames.v128_min, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_max: return deferASM(BuiltinNames.v128_max, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_abs: return deferASM(BuiltinNames.v128_abs, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_sqrt: return deferASM(BuiltinNames.v128_sqrt, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_eq: return deferASM(BuiltinNames.v128_eq, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_ne: return deferASM(BuiltinNames.v128_ne, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_lt: return deferASM(BuiltinNames.v128_lt, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_le: return deferASM(BuiltinNames.v128_le, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_gt: return deferASM(BuiltinNames.v128_gt, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_ge: return deferASM(BuiltinNames.v128_ge, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_convert_i64x2_s: return deferASM(BuiltinNames.v128_convert, compiler, Type.i64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_convert_i64x2_u: return deferASM(BuiltinNames.v128_convert, compiler, Type.u64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_qfma: return deferASM(BuiltinNames.v128_qfma, compiler, Type.f64, operands, Type.v128, reportNode); + case BuiltinNames.f64x2_qfms: return deferASM(BuiltinNames.v128_qfms, compiler, Type.f64, operands, Type.v128, reportNode); - case BuiltinSymbols.v8x16_shuffle: return deferASM(BuiltinSymbols.v128_shuffle, compiler, Type.i8, operands, Type.v128, reportNode); - case BuiltinSymbols.v8x16_swizzle: return deferASM(BuiltinSymbols.v128_swizzle, compiler, null, operands, Type.v128, reportNode); - case BuiltinSymbols.v8x16_load_splat: return deferASM(BuiltinSymbols.v128_load_splat, compiler, Type.u8, operands, Type.v128, reportNode); - case BuiltinSymbols.v16x8_load_splat: return deferASM(BuiltinSymbols.v128_load_splat, compiler, Type.u16, operands, Type.v128, reportNode); - case BuiltinSymbols.v32x4_load_splat: return deferASM(BuiltinSymbols.v128_load_splat, compiler, Type.u32, operands, Type.v128, reportNode); - case BuiltinSymbols.v64x2_load_splat: return deferASM(BuiltinSymbols.v128_load_splat, compiler, Type.u64, operands, Type.v128, reportNode); + case BuiltinNames.v8x16_shuffle: return deferASM(BuiltinNames.v128_shuffle, compiler, Type.i8, operands, Type.v128, reportNode); + case BuiltinNames.v8x16_swizzle: return deferASM(BuiltinNames.v128_swizzle, compiler, null, operands, Type.v128, reportNode); + case BuiltinNames.v8x16_load_splat: return deferASM(BuiltinNames.v128_load_splat, compiler, Type.u8, operands, Type.v128, reportNode); + case BuiltinNames.v16x8_load_splat: return deferASM(BuiltinNames.v128_load_splat, compiler, Type.u16, operands, Type.v128, reportNode); + case BuiltinNames.v32x4_load_splat: return deferASM(BuiltinNames.v128_load_splat, compiler, Type.u32, operands, Type.v128, reportNode); + case BuiltinNames.v64x2_load_splat: return deferASM(BuiltinNames.v128_load_splat, compiler, Type.u64, operands, Type.v128, reportNode); } /* tslint:enable:max-line-length */ return 0; @@ -4828,7 +4815,7 @@ export function compileVisitGlobals(compiler: Compiler): void { } } } - module.addFunction(BuiltinSymbols.visit_globals, + module.addFunction(BuiltinNames.visit_globals, NativeType.I32, // cookie NativeType.None, // => void [ nativeSizeType ], @@ -4933,7 +4920,7 @@ export function compileVisitMembers(compiler: Compiler): void { } if (!instance.base) code.push(module.return()); let block = relooper.addBlock( - flatten(module, code, NativeType.None) + module.flatten(code) ); relooper.addBranchForSwitch(outer, block, [ id ]); blocks.push(block); @@ -4951,7 +4938,7 @@ export function compileVisitMembers(compiler: Compiler): void { ); relooper.addBranchForSwitch(outer, blocks[blocks.length - 1], []); // default compiler.compileFunction(visitInstance); - module.addFunction(BuiltinSymbols.visit_members, + module.addFunction(BuiltinNames.visit_members, createType([ usizeType.toNativeType(), NativeType.I32 ]), // ref, cookie NativeType.None, // => void [ nativeSizeType ], @@ -5015,9 +5002,9 @@ export function compileRTTI(compiler: Compiler): void { var segment = compiler.addMemorySegment(data); if (usizeType.size == 8) { let offset = segment.offset; - module.addGlobal(BuiltinSymbols.rtti_base, NativeType.I64, false, module.i64(i64_low(offset), i64_high(offset))); + module.addGlobal(BuiltinNames.rtti_base, NativeType.I64, false, module.i64(i64_low(offset), i64_high(offset))); } else { - module.addGlobal(BuiltinSymbols.rtti_base, NativeType.I32, false, module.i32(i64_low(segment.offset))); + module.addGlobal(BuiltinNames.rtti_base, NativeType.I32, false, module.i32(i64_low(segment.offset))); } } diff --git a/src/common.ts b/src/common.ts index 600a560fd4..849485c240 100644 --- a/src/common.ts +++ b/src/common.ts @@ -100,8 +100,8 @@ export const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER; /** Path index suffix. */ export const INDEX_SUFFIX = PATH_DELIMITER + "index"; -/** Common compiler symbols. */ -export namespace CommonSymbols { +/** Common names. */ +export namespace CommonNames { // special export const EMPTY = ""; // types diff --git a/src/compiler.ts b/src/compiler.ts index 48d3a1088c..2c68a86340 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -4,7 +4,7 @@ *//***/ import { - BuiltinSymbols, + BuiltinNames, compileCall as compileBuiltinCall, compileAbort, compileVisitGlobals, @@ -27,7 +27,6 @@ import { FunctionRef, ExpressionId, GlobalRef, - EventRef, FeatureFlags, getExpressionId, getExpressionType, @@ -46,7 +45,8 @@ import { getLocalSetValue, getGlobalGetName, isGlobalMutable, - createType + createType, + hasSideEffects } from "./module"; import { @@ -55,7 +55,7 @@ import { STATIC_DELIMITER, GETTER_PREFIX, SETTER_PREFIX, - CommonSymbols, + CommonNames, INDEX_SUFFIX, Feature, Target @@ -90,6 +90,7 @@ import { FlowFlags, Flow, LocalFlags, + ConditionKind, findUsedLocals } from "./flow"; @@ -106,10 +107,10 @@ import { import { Node, NodeKind, - NamedTypeNode, Range, DecoratorKind, AssertionKind, + SourceKind, Statement, BlockStatement, @@ -120,6 +121,7 @@ import { DoStatement, EmptyStatement, EnumDeclaration, + ExportDefaultStatement, ExportStatement, ExpressionStatement, FieldDeclaration, @@ -128,7 +130,6 @@ import { IfStatement, ImportStatement, InstanceOfExpression, - InterfaceDeclaration, NamespaceDeclaration, ReturnStatement, SwitchStatement, @@ -162,9 +163,7 @@ import { nodeIsConstantValue, findDecorator, - isTypeOmitted, - ExportDefaultStatement, - SourceKind + isTypeOmitted } from "./ast"; import { @@ -276,6 +275,18 @@ export const enum RuntimeFeatures { visitMembers = 1 << 3 } +/** Exported names of compiler-generated elements. */ +export namespace ExportNames { + /** Name of the explicit start function, if applicable. */ + export const start = "_start"; // match WASI + /** Name of the argumentsLength varargs helper global. */ + export const argumentsLength = "__argumentsLength"; + /** Name of the memory instance, if exported. */ + export const memory = "memory"; + /** Name of the table instance, if exported. */ + export const table = "table"; +} + /** Compiler interface. */ export class Compiler extends DiagnosticEmitter { @@ -287,10 +298,9 @@ export class Compiler extends DiagnosticEmitter { get options(): Options { return this.program.options; } /** Module instance being compiled. */ module: Module; + /** Current control flow. */ currentFlow: Flow; - /** Current inline functions stack. */ - currentInlineFunctions: Function[] = []; /** Current parent element if not a function, i.e. an enum or namespace. */ currentParent: Element | null = null; /** Current type in compilation. */ @@ -305,16 +315,14 @@ export class Compiler extends DiagnosticEmitter { stringSegments: Map = new Map(); /** Function table being compiled. First elem is blank. */ functionTable: string[] = []; - /** Argument count helper global. */ - argcVar: GlobalRef = 0; - /** Argument count helper setter. */ - argcSet: FunctionRef = 0; + /** Arguments length helper global. */ + builtinArgumentsLength: GlobalRef = 0; /** Requires runtime features. */ runtimeFeatures: RuntimeFeatures = RuntimeFeatures.NONE; /** Expressions known to have skipped an autorelease. Usually function returns. */ skippedAutoreleases: Set = new Set(); - /** Registered event types. */ - events: Map = new Map(); + /** Current inline functions stack. */ + inlineStack: Function[] = []; /** Compiles a {@link Program} to a {@link Module} using the specified options. */ static compile(program: Program): Module { @@ -356,19 +364,19 @@ export class Compiler extends DiagnosticEmitter { program.initialize(options); // set up the main start function - var startFunctionInstance = program.makeNativeFunction("start", new Signature(program, [], Type.void)); - startFunctionInstance.internalName = "start"; + var startFunctionInstance = program.makeNativeFunction(BuiltinNames.start, new Signature(program, [], Type.void)); + startFunctionInstance.internalName = BuiltinNames.start; var startFunctionBody = new Array(); this.currentFlow = startFunctionInstance.flow; this.currentBody = startFunctionBody; - // add a mutable heap and rtti base dummies + // add mutable heap and rtti base dummies if (options.isWasm64) { - module.addGlobal(BuiltinSymbols.heap_base, NativeType.I64, true, module.i64(0)); - module.addGlobal(BuiltinSymbols.rtti_base, NativeType.I64, true, module.i64(0)); + module.addGlobal(BuiltinNames.heap_base, NativeType.I64, true, module.i64(0)); + module.addGlobal(BuiltinNames.rtti_base, NativeType.I64, true, module.i64(0)); } else { - module.addGlobal(BuiltinSymbols.heap_base, NativeType.I32, true, module.i32(0)); - module.addGlobal(BuiltinSymbols.rtti_base, NativeType.I32, true, module.i32(0)); + module.addGlobal(BuiltinNames.heap_base, NativeType.I32, true, module.i32(0)); + module.addGlobal(BuiltinNames.rtti_base, NativeType.I32, true, module.i32(0)); } // compile entry file(s) while traversing reachable elements @@ -386,12 +394,12 @@ export class Compiler extends DiagnosticEmitter { if (!startIsEmpty || explicitStart) { let signature = startFunctionInstance.signature; if (!startIsEmpty && explicitStart) { - module.addGlobal(BuiltinSymbols.started, NativeType.I32, true, module.i32(0)); + module.addGlobal(BuiltinNames.started, NativeType.I32, true, module.i32(0)); startFunctionBody.unshift( module.if( - module.global_get(BuiltinSymbols.started, NativeType.I32), + module.global_get(BuiltinNames.started, NativeType.I32), module.return(), - module.global_set(BuiltinSymbols.started, module.i32(1)) + module.global_set(BuiltinNames.started, module.i32(1)) ) ); } @@ -400,35 +408,35 @@ export class Compiler extends DiagnosticEmitter { signature.nativeParams, signature.nativeResults, typesToNativeTypes(startFunctionInstance.additionalLocals), - module.block(null, startFunctionBody) + module.flatten(startFunctionBody) ); startFunctionInstance.finalize(module, funcRef); if (!explicitStart) module.setStart(funcRef); - else module.addFunctionExport(startFunctionInstance.internalName, "_start"); + else module.addFunctionExport(startFunctionInstance.internalName, ExportNames.start); } // compile runtime features if (this.runtimeFeatures & RuntimeFeatures.visitGlobals) compileVisitGlobals(this); if (this.runtimeFeatures & RuntimeFeatures.visitMembers) compileVisitMembers(this); - module.removeGlobal(BuiltinSymbols.rtti_base); + module.removeGlobal(BuiltinNames.rtti_base); if (this.runtimeFeatures & RuntimeFeatures.RTTI) compileRTTI(this); // update the heap base pointer var memoryOffset = this.memoryOffset; memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize); this.memoryOffset = memoryOffset; - module.removeGlobal(BuiltinSymbols.heap_base); + module.removeGlobal(BuiltinNames.heap_base); if (this.runtimeFeatures & RuntimeFeatures.HEAP) { if (options.isWasm64) { module.addGlobal( - BuiltinSymbols.heap_base, + BuiltinNames.heap_base, NativeType.I64, false, module.i64(i64_low(memoryOffset), i64_high(memoryOffset)) ); } else { module.addGlobal( - BuiltinSymbols.heap_base, + BuiltinNames.heap_base, NativeType.I32, false, module.i32(i64_low(memoryOffset)) @@ -445,7 +453,7 @@ export class Compiler extends DiagnosticEmitter { isSharedMemory ? options.sharedMemory : Module.UNLIMITED_MEMORY, this.memorySegments, options.target, - "memory", + ExportNames.memory, isSharedMemory ); @@ -458,7 +466,7 @@ export class Compiler extends DiagnosticEmitter { // import and/or export table if requested (default table is named '0' by Binaryen) if (options.importTable) module.addTableImport("0", "env", "table"); - if (options.exportTable) module.addTableExport("0", "table"); + if (options.exportTable) module.addTableExport("0", ExportNames.table); // set up module exports for (let file of this.program.filesByName.values()) { @@ -514,8 +522,8 @@ export class Compiler extends DiagnosticEmitter { } case ElementKind.PROPERTY_PROTOTYPE: { let getter = (element).getterPrototype; - let setter = (element).setterPrototype; if (getter) this.ensureModuleExport(GETTER_PREFIX + name, getter, prefix); + let setter = (element).setterPrototype; if (setter) this.ensureModuleExport(SETTER_PREFIX + name, setter, prefix); break; } @@ -550,7 +558,7 @@ export class Compiler extends DiagnosticEmitter { if (signature.requiredParameters < signature.parameterTypes.length) { // utilize trampoline to fill in omitted arguments instance = this.ensureTrampoline(instance); - this.ensureArgcSet(); + this.ensureBuiltinArgumentsLength(); } if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name); break; @@ -563,9 +571,9 @@ export class Compiler extends DiagnosticEmitter { break; } case ElementKind.FIELD: { - this.ensureModuleFieldGetter(prefix + GETTER_PREFIX + name, element); + this.makeExportedFieldGetter(prefix + GETTER_PREFIX + name, element); if (!element.is(CommonFlags.READONLY)) { - this.ensureModuleFieldSetter(prefix + SETTER_PREFIX + name, element); + this.makeExportedFieldSetter(prefix + SETTER_PREFIX + name, element); } break; } @@ -614,55 +622,43 @@ export class Compiler extends DiagnosticEmitter { } } - /** Makes a function to get the value of a field of an exported class. */ - private ensureModuleFieldGetter(name: string, field: Field): void { + /** Makes an exported function to get the value of an instance field. */ + private makeExportedFieldGetter(name: string, field: Field): void { var type = field.type; + var nativeThisType = this.options.nativeSizeType; + var nativeValueType = type.toNativeType(); var module = this.module; - var usizeType = this.options.usizeType; - var loadExpr = module.load(type.byteSize, type.is(TypeFlags.SIGNED), - module.local_get(0, usizeType.toNativeType()), - type.toNativeType(), field.memoryOffset - ); - // a user-defined getter would return a retained value, so: - if (type.isManaged) loadExpr = this.makeRetain(loadExpr); - module.addFunction( - name, - usizeType.toNativeType(), - type.toNativeType(), - null, - loadExpr + var returnExpr = module.load(type.byteSize, type.is(TypeFlags.SIGNED), + module.local_get(0, nativeThisType), + nativeValueType, field.memoryOffset ); + // functions retain the return value for the caller + if (type.isManaged) returnExpr = this.makeRetain(returnExpr); + module.addFunction(name, nativeThisType, nativeValueType, null, returnExpr); module.addFunctionExport(name, name); } - /** Makes a function to set the value of a field of an exported class. */ - private ensureModuleFieldSetter(name: string, field: Field): void { + /** Makes an exported function to set the value of an instance field. */ + private makeExportedFieldSetter(name: string, field: Field): void { var type = field.type; + var nativeThisType = this.options.nativeSizeType; + var nativeValueType = type.toNativeType(); var module = this.module; - var nativeType = type.toNativeType(); - var usizeType = this.options.usizeType; - var nativeSizeType = usizeType.toNativeType(); - var valueExpr = module.local_get(1, nativeType); + var valueExpr = module.local_get(1, nativeValueType); if (type.isManaged) { valueExpr = this.makeReplace( - module.load(type.byteSize, false, // oldRef - module.local_get(0, nativeSizeType), - nativeType, field.memoryOffset + module.load(type.byteSize, false, + module.local_get(0, nativeThisType), + nativeValueType, field.memoryOffset ), - valueExpr // newRef + valueExpr ); } - module.addFunction( - name, - createType([ usizeType.toNativeType(), type.toNativeType() ]), - NativeType.None, - null, - module.store( - type.byteSize, - module.local_get(0, nativeSizeType), + module.addFunction(name, createType([ nativeThisType, nativeValueType ]), NativeType.None, null, + module.store(type.byteSize, + module.local_get(0, nativeThisType), valueExpr, - nativeType, - field.memoryOffset + nativeValueType, field.memoryOffset ) ); module.addFunctionExport(name, name); @@ -683,24 +679,30 @@ export class Compiler extends DiagnosticEmitter { } case ElementKind.FUNCTION_PROTOTYPE: { if (!element.is(CommonFlags.GENERIC)) { - this.compileFunctionUsingTypeArguments(element, []); + let instance = this.resolver.resolveFunction(element, null); + if (instance) this.compileFunction(instance); } break; } case ElementKind.CLASS_PROTOTYPE: { if (!element.is(CommonFlags.GENERIC)) { - this.compileClassUsingTypeArguments(element, []); + let instance = this.resolver.resolveClass(element, null); + if (instance) this.compileClass(instance); } break; } case ElementKind.PROPERTY_PROTOTYPE: { let getterPrototype = (element).getterPrototype; if (getterPrototype) { - this.compileFunctionUsingTypeArguments(getterPrototype, []); + assert(!getterPrototype.is(CommonFlags.GENERIC)); + let instance = this.resolver.resolveFunction(getterPrototype, null); + if (instance) this.compileFunction(instance); } let setterPrototype = (element).setterPrototype; if (setterPrototype) { - this.compileFunctionUsingTypeArguments(setterPrototype, []); + assert(!setterPrototype.is(CommonFlags.GENERIC)); + let instance = this.resolver.resolveFunction(setterPrototype, null); + if (instance) this.compileFunction(instance); } break; } @@ -710,13 +712,10 @@ export class Compiler extends DiagnosticEmitter { case ElementKind.INDEXSIGNATURE: break; default: assert(false, ElementKind[element.kind]); } - if (compileMembers) this.compileMembers(element); - } - - /** Compiles an element's members. */ - compileMembers(element: Element): void { - var members = element.members; - if (members) for (let element of members.values()) this.compileElement(element); + if (compileMembers) { + let members = element.members; + if (members) for (let element of members.values()) this.compileElement(element); + } } /** Compiles a file's exports. */ @@ -773,6 +772,7 @@ export class Compiler extends DiagnosticEmitter { this.compileTopLevelStatement(statements[i], startFunctionBody); } this.finishAutoreleases(flow, startFunctionBody); + // no need to insert unreachable since last statement should have done that this.currentFlow = previousFlow; this.currentBody = previousBody; @@ -783,15 +783,12 @@ export class Compiler extends DiagnosticEmitter { let numLocals = locals.length; let varTypes = new Array(numLocals); for (let i = 0; i < numLocals; ++i) varTypes[i] = locals[i].type.toNativeType(); - module.addFunction( startFunction.internalName, startSignature.nativeParams, startSignature.nativeResults, varTypes, - startFunctionBody.length > 1 - ? module.block(null, startFunctionBody) - : startFunctionBody[0] + module.flatten(startFunctionBody) ); previousBody.push( module.call(startFunction.internalName, null, NativeType.None) @@ -801,13 +798,13 @@ export class Compiler extends DiagnosticEmitter { // === Globals ================================================================================== + /** Compiles a global variable. */ compileGlobal(global: Global): bool { if (global.is(CommonFlags.COMPILED)) return true; global.set(CommonFlags.COMPILED); var module = this.module; var initExpr: ExpressionRef = 0; - var initAutoreleaseSkipped: bool = false; var typeNode = global.typeNode; var initializerNode = global.initializerNode; @@ -835,7 +832,6 @@ export class Compiler extends DiagnosticEmitter { initExpr = this.compileExpression(initializerNode, Type.auto, // reports Constraints.MUST_WRAP | Constraints.WILL_RETAIN ); - if (this.skippedAutoreleases.has(initExpr)) initAutoreleaseSkipped = true; this.currentFlow = previousFlow; if (this.currentType == Type.void) { this.error( @@ -858,8 +854,8 @@ export class Compiler extends DiagnosticEmitter { // Handle ambient builtins like '__heap_base' that need to be resolved but are added explicitly if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) { - if (global.internalName == BuiltinSymbols.heap_base) this.runtimeFeatures |= RuntimeFeatures.HEAP; - else if (global.internalName == BuiltinSymbols.rtti_base) this.runtimeFeatures |= RuntimeFeatures.RTTI; + if (global.internalName == BuiltinNames.heap_base) this.runtimeFeatures |= RuntimeFeatures.HEAP; + else if (global.internalName == BuiltinNames.rtti_base) this.runtimeFeatures |= RuntimeFeatures.RTTI; return true; } @@ -909,15 +905,16 @@ export class Compiler extends DiagnosticEmitter { initExpr = this.compileExpression(initializerNode, type, Constraints.CONV_IMPLICIT | Constraints.MUST_WRAP | Constraints.WILL_RETAIN | Constraints.PREFER_STATIC ); - if (this.skippedAutoreleases.has(initExpr)) initAutoreleaseSkipped = true; this.currentFlow = previousFlow; } // If not a constant, attempt to precompute if (getExpressionId(initExpr) != ExpressionId.Const) { if (isDeclaredConstant) { + let origInitExpr = initExpr; initExpr = module.precomputeExpression(initExpr); if (getExpressionId(initExpr) != ExpressionId.Const) initializeInStart = true; + if (this.skippedAutoreleases.has(origInitExpr)) this.skippedAutoreleases.add(initExpr); } else { initializeInStart = true; } @@ -993,7 +990,7 @@ export class Compiler extends DiagnosticEmitter { ); } module.addGlobal(internalName, nativeType, true, this.makeZero(type)); - if (type.isManaged && !initAutoreleaseSkipped) initExpr = this.makeRetain(initExpr); + if (type.isManaged && !this.skippedAutoreleases.has(initExpr)) initExpr = this.makeRetain(initExpr); this.currentBody.push( module.global_set(internalName, initExpr) ); @@ -1005,6 +1002,7 @@ export class Compiler extends DiagnosticEmitter { // === Enums ==================================================================================== + /** Compiles an enum. */ compileEnum(element: Enum): bool { if (element.is(CommonFlags.COMPILED)) return true; element.set(CommonFlags.COMPILED); @@ -1096,136 +1094,17 @@ export class Compiler extends DiagnosticEmitter { // === Functions ================================================================================ - /** Resolves the specified type arguments prior to compiling the resulting function instance. */ - compileFunctionUsingTypeArguments( - prototype: FunctionPrototype, - typeArguments: NamedTypeNode[], - contextualTypeArguments: Map = makeMap(), - alternativeReportNode: Node | null = null - ): Function | null { - if (prototype.hasDecorator(DecoratorFlags.BUILTIN)) return null; - var instance = this.resolver.resolveFunctionInclTypeArguments( - prototype, - typeArguments, - prototype.parent, // relative to itself - contextualTypeArguments, - alternativeReportNode || prototype.declaration - ); - if (!instance) return null; - if (!this.compileFunction(instance)) return null; // reports - return instance; - } - - /** Compiles the body of a function within the specified flow. */ - compileFunctionBody( + /** Compiles a priorly resolved function. */ + compileFunction( /** Function to compile. */ instance: Function, - /** Target array of statements. */ - stmts: ExpressionRef[] | null = null - ): ExpressionRef[] { - var module = this.module; - var bodyNode = assert(instance.prototype.bodyNode); - var returnType = instance.signature.returnType; - var flow = this.currentFlow; - - // compile statements - if (bodyNode.kind == NodeKind.BLOCK) { - stmts = this.compileStatements((bodyNode).statements, true, stmts); - } else { - // must be an expression statement if not a block - assert(bodyNode.kind == NodeKind.EXPRESSION); - - // must be an arrow function - assert(instance.prototype.arrowKind); - - // none of the following can be an arrow function - assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET)); - - // take special care of properly retaining the returned value - let expr = this.compileReturnedExpression((bodyNode).expression, returnType, Constraints.CONV_IMPLICIT); - - if (!stmts) stmts = [ expr ]; - else stmts.push(expr); - - if (!flow.is(FlowFlags.TERMINATES)) { - let indexBefore = stmts.length; - this.performAutoreleases(flow, stmts); - this.finishAutoreleases(flow, stmts); - let canOverflow = flow.canOverflow(expr, returnType); - let nonNull = flow.isNonnull(expr, returnType); - if (stmts.length > indexBefore) { - let temp = flow.getTempLocal(returnType); - if (!canOverflow) flow.setLocalFlag(temp.index, LocalFlags.WRAPPED); - if (nonNull) flow.setLocalFlag(temp.index, LocalFlags.NONNULL); - stmts[indexBefore - 1] = module.local_set(temp.index, expr); - stmts.push(module.local_get(temp.index, returnType.toNativeType())); - flow.freeTempLocal(temp); - } - if (!canOverflow) flow.set(FlowFlags.RETURNS_WRAPPED); - if (nonNull) flow.set(FlowFlags.RETURNS_NONNULL); - flow.set(FlowFlags.RETURNS | FlowFlags.TERMINATES); - } - } - - // make constructors return their instance pointer - if (instance.is(CommonFlags.CONSTRUCTOR)) { - let nativeSizeType = this.options.nativeSizeType; - assert(instance.is(CommonFlags.INSTANCE)); - let classInstance = assert(instance.parent); assert(classInstance.kind == ElementKind.CLASS); - - if (!flow.is(FlowFlags.TERMINATES)) { - let thisLocal = assert(flow.lookupLocal(CommonSymbols.this_)); - - // if `this` wasn't accessed before, allocate if necessary and initialize `this` - if (!flow.is(FlowFlags.ALLOCATES)) { - // { - // if (!this) this = - // this.a = X - // this.b = Y - // } - stmts.push( - module.if( - module.unary(nativeSizeType == NativeType.I64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, - module.local_get(thisLocal.index, nativeSizeType) - ), - module.local_set(thisLocal.index, - this.makeRetain( - this.makeAllocation(classInstance) - ), - ) - ) - ); - this.makeFieldInitialization(classInstance, stmts); - } - this.performAutoreleases(flow, stmts); // `this` is excluded anyway - this.finishAutoreleases(flow, stmts); - stmts.push(module.local_get(thisLocal.index, this.options.nativeSizeType)); - flow.set(FlowFlags.RETURNS | FlowFlags.RETURNS_NONNULL | FlowFlags.TERMINATES); - } - - // check that super has been called if this is a derived class - if ((classInstance).base && !flow.is(FlowFlags.CALLS_SUPER)) { - this.error( - DiagnosticCode.Constructors_for_derived_classes_must_contain_a_super_call, - instance.prototype.declaration.range - ); - } - - // if this is a normal function, make sure that all branches terminate - } else if (returnType != Type.void && !flow.is(FlowFlags.TERMINATES)) { - this.error( - DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value, - instance.prototype.functionTypeNode.returnType.range - ); - } - - return stmts; - } - - /** Compiles a readily resolved function instance. */ - compileFunction(instance: Function): bool { + /** Force compilation of stdlib alternative if a builtin. */ + forceStdAlternative: bool = false + ): bool { if (instance.is(CommonFlags.COMPILED)) return true; - assert(!(instance.is(CommonFlags.AMBIENT) && instance.hasDecorator(DecoratorFlags.BUILTIN))); + if (instance.hasDecorator(DecoratorFlags.BUILTIN)) { + if (!forceStdAlternative) return true; + } var previousType = this.currentType; // remember to retain it if compiling a function lazily instance.set(CommonFlags.COMPILED); @@ -1281,7 +1160,7 @@ export class Compiler extends DiagnosticEmitter { ) ) ); - flow.setLocalFlag(index, LocalFlags.RETAINED | LocalFlags.PARAMETER); + flow.setLocalFlag(index, LocalFlags.RETAINED); } } @@ -1298,7 +1177,7 @@ export class Compiler extends DiagnosticEmitter { signature.nativeParams, signature.nativeResults, typesToNativeTypes(instance.additionalLocals), - flatten(module, stmts, instance.signature.returnType.toNativeType()) + module.flatten(stmts, instance.signature.returnType.toNativeType()) ); // imported function @@ -1329,25 +1208,115 @@ export class Compiler extends DiagnosticEmitter { return true; } - // === Classes ================================================================================== + /** Compiles the body of a function within the specified flow. */ + private compileFunctionBody( + /** Function to compile. */ + instance: Function, + /** Target array of statements also being returned. Creates a new array if omitted. */ + stmts: ExpressionRef[] | null = null + ): ExpressionRef[] { + var module = this.module; + var bodyNode = assert(instance.prototype.bodyNode); + var returnType = instance.signature.returnType; + var flow = this.currentFlow; - compileClassUsingTypeArguments( - prototype: ClassPrototype, - typeArguments: NamedTypeNode[], - contextualTypeArguments: Map = makeMap(), - alternativeReportNode: Node | null = null - ): void { - var instance = this.resolver.resolveClassInclTypeArguments( - prototype, - typeArguments, - prototype.parent, // relative to itself - contextualTypeArguments, - alternativeReportNode || prototype.declaration - ); - if (!instance) return; - this.compileClass(instance); + // compile statements + if (bodyNode.kind == NodeKind.BLOCK) { + stmts = this.compileStatements((bodyNode).statements, true, stmts); + } else { + // must be an expression statement if not a block + assert(bodyNode.kind == NodeKind.EXPRESSION); + + // must be an arrow function + assert(instance.prototype.arrowKind); + + // none of the following can be an arrow function + assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET)); + + // take special care of properly retaining the returned value + let expr = this.compileReturnedExpression((bodyNode).expression, returnType, Constraints.CONV_IMPLICIT); + + if (!stmts) stmts = [ expr ]; + else stmts.push(expr); + + if (!flow.is(FlowFlags.TERMINATES)) { + let indexBefore = stmts.length; + this.performAutoreleases(flow, stmts); + this.finishAutoreleases(flow, stmts); + let canOverflow = flow.canOverflow(expr, returnType); + let nonNull = flow.isNonnull(expr, returnType); + if (stmts.length > indexBefore) { + let temp = flow.getTempLocal(returnType); + if (!canOverflow) flow.setLocalFlag(temp.index, LocalFlags.WRAPPED); + if (nonNull) flow.setLocalFlag(temp.index, LocalFlags.NONNULL); + stmts[indexBefore - 1] = module.local_set(temp.index, expr); + stmts.push(module.local_get(temp.index, returnType.toNativeType())); + flow.freeTempLocal(temp); + } + if (!canOverflow) flow.set(FlowFlags.RETURNS_WRAPPED); + if (nonNull) flow.set(FlowFlags.RETURNS_NONNULL); + flow.set(FlowFlags.RETURNS | FlowFlags.TERMINATES); + } + } + + // make constructors return their instance pointer + if (instance.is(CommonFlags.CONSTRUCTOR)) { + let nativeSizeType = this.options.nativeSizeType; + assert(instance.is(CommonFlags.INSTANCE)); + let classInstance = assert(instance.parent); assert(classInstance.kind == ElementKind.CLASS); + + if (!flow.is(FlowFlags.TERMINATES)) { + let thisLocal = assert(flow.lookupLocal(CommonNames.this_)); + + // if `this` wasn't accessed before, allocate if necessary and initialize `this` + if (!flow.is(FlowFlags.ALLOCATES)) { + // { + // if (!this) this = + // this.a = X + // this.b = Y + // } + stmts.push( + module.if( + module.unary(nativeSizeType == NativeType.I64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, + module.local_get(thisLocal.index, nativeSizeType) + ), + module.local_set(thisLocal.index, + this.makeRetain( + this.makeAllocation(classInstance) + ), + ) + ) + ); + this.makeFieldInitializationInConstructor(classInstance, stmts); + } + this.performAutoreleases(flow, stmts); // `this` is excluded anyway + this.finishAutoreleases(flow, stmts); + stmts.push(module.local_get(thisLocal.index, this.options.nativeSizeType)); + flow.set(FlowFlags.RETURNS | FlowFlags.RETURNS_NONNULL | FlowFlags.TERMINATES); + } + + // check that super has been called if this is a derived class + if ((classInstance).base && !flow.is(FlowFlags.CALLS_SUPER)) { + this.error( + DiagnosticCode.Constructors_for_derived_classes_must_contain_a_super_call, + instance.prototype.declaration.range + ); + } + + // if this is a normal function, make sure that all branches terminate + } else if (returnType != Type.void && !flow.is(FlowFlags.TERMINATES)) { + this.error( + DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value, + instance.prototype.functionTypeNode.returnType.range + ); + } + + return stmts; } + // === Classes ================================================================================== + + /** Compiles a priorly resolved class. */ compileClass(instance: Class): bool { if (instance.is(CommonFlags.COMPILED)) return true; instance.set(CommonFlags.COMPILED); @@ -1361,41 +1330,27 @@ export class Compiler extends DiagnosticEmitter { break; } case ElementKind.FUNCTION_PROTOTYPE: { - if ( - !(element).is(CommonFlags.GENERIC) - ) { - this.compileFunctionUsingTypeArguments( - element, - [], - makeMap(), - (element).identifierNode - ); + if (!element.is(CommonFlags.GENERIC)) { + let instance = this.resolver.resolveFunction(element, null); + if (instance) this.compileFunction(instance); } break; } case ElementKind.PROPERTY_PROTOTYPE: { - let getter = (element).getterPrototype; - if (getter) { - this.compileFunctionUsingTypeArguments( - getter, - [], - makeMap(), - getter.identifierNode - ); + let getterPrototype = (element).getterPrototype; + if (getterPrototype) { + assert(!getterPrototype.is(CommonFlags.GENERIC)); + let instance = this.resolver.resolveFunction(getterPrototype, null); + if (instance) this.compileFunction(instance); } - let setter = (element).setterPrototype; - if (setter) { - this.compileFunctionUsingTypeArguments( - setter, - [], - makeMap(), - setter.identifierNode - ); + let setterPrototype = (element).setterPrototype; + if (setterPrototype) { + assert(!setterPrototype.is(CommonFlags.GENERIC)); + let instance = this.resolver.resolveFunction(setterPrototype, null); + if (instance) this.compileFunction(instance); } break; } - case ElementKind.PROPERTY: { - } } } } @@ -1406,15 +1361,9 @@ export class Compiler extends DiagnosticEmitter { for (let element of instanceMembers.values()) { switch (element.kind) { case ElementKind.FUNCTION_PROTOTYPE: { - if ( - !(element).is(CommonFlags.GENERIC) - ) { - this.compileFunctionUsingTypeArguments( - element, - [], - makeMap(instance.contextualTypeArguments), - (element).declaration.name - ); + if (!element.is(CommonFlags.GENERIC)) { + let instance = this.resolver.resolveFunction(element, null); + if (instance) this.compileFunction(instance); } break; } @@ -1423,10 +1372,10 @@ export class Compiler extends DiagnosticEmitter { break; } case ElementKind.PROPERTY: { - let getter = (element).getterInstance; - if (getter) this.compileFunction(getter); - let setter = (element).setterInstance; - if (setter) this.compileFunction(setter); + let getterInstance = (element).getterInstance; + if (getterInstance) this.compileFunction(getterInstance); + let setterInstance = (element).setterInstance; + if (setterInstance) this.compileFunction(setterInstance); break; } } @@ -1435,19 +1384,6 @@ export class Compiler extends DiagnosticEmitter { return true; } - compileInterfaceDeclaration( - declaration: InterfaceDeclaration, - typeArguments: NamedTypeNode[], - contextualTypeArguments: Map | null = null, - alternativeReportNode: Node | null = null - ): void { - // TODO - this.error( - DiagnosticCode.Not_implemented, - declaration.range - ); - } - // === Memory =================================================================================== /** Adds a static memory segment with the specified data. */ @@ -1459,7 +1395,7 @@ export class Compiler extends DiagnosticEmitter { return segment; } - /** Ensures that the specified string exists in static memory and returns a pointer to it. */ + /** Ensures that a string exists in static memory and returns a pointer to it. Deduplicates. */ ensureStaticString(stringValue: string): ExpressionRef { var program = this.program; var rtHeaderSize = program.runtimeHeaderSize; @@ -1488,7 +1424,8 @@ export class Compiler extends DiagnosticEmitter { } } - ensureStaticArrayBuffer(elementType: Type, values: ExpressionRef[]): MemorySegment { + /** Adds a buffer to static memory and returns the created segment. */ + private addStaticBuffer(elementType: Type, values: ExpressionRef[]): MemorySegment { var program = this.program; var length = values.length; var byteSize = elementType.byteSize; @@ -1574,7 +1511,8 @@ export class Compiler extends DiagnosticEmitter { return this.addMemorySegment(buf); } - ensureStaticArrayHeader(elementType: Type, bufferSegment: MemorySegment): MemorySegment { + /** Adds an array header to static memory and returns the created segment. */ + private addStaticArrayHeader(elementType: Type, bufferSegment: MemorySegment): MemorySegment { var program = this.program; var runtimeHeaderSize = program.runtimeHeaderSize; var arrayPrototype = assert(program.arrayPrototype); @@ -1599,24 +1537,27 @@ export class Compiler extends DiagnosticEmitter { // === Table ==================================================================================== /** Ensures that a table entry exists for the specified function and returns its index. */ - ensureFunctionTableEntry(func: Function): i32 { - assert(func.is(CommonFlags.COMPILED)); - if (func.functionTableIndex >= 0) { - return func.functionTableIndex; + ensureFunctionTableEntry(instance: Function): i32 { + assert(instance.is(CommonFlags.COMPILED)); + var index = instance.functionTableIndex; + if (index >= 0) { + assert(index != 0); // first elem must be blank + return index; } var functionTable = this.functionTable; - var index = 1 + functionTable.length; // first elem is blank - if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) { + index = 1 + functionTable.length; // first elem is blank + if (!instance.is(CommonFlags.TRAMPOLINE) && instance.signature.requiredParameters < instance.signature.parameterTypes.length) { // insert the trampoline if the function has optional parameters - func = this.ensureTrampoline(func); + instance = this.ensureTrampoline(instance); } - functionTable.push(func.internalName); - func.functionTableIndex = index; + functionTable.push(instance.internalName); + instance.functionTableIndex = index; return index; } // === Statements =============================================================================== + /** Compiles a top level statement (incl. function declarations etc.) to the specified body. */ compileTopLevelStatement(statement: Statement, body: ExpressionRef[]): void { switch (statement.kind) { case NodeKind.CLASSDECLARATION: { @@ -1702,8 +1643,11 @@ export class Compiler extends DiagnosticEmitter { } } + /** Compiles a statement. */ compileStatement( + /** Statement to compile. */ statement: Statement, + /** Whether this is the last statement of the body, if known. */ isLastInBody: bool = false ): ExpressionRef { var module = this.module; @@ -1788,9 +1732,13 @@ export class Compiler extends DiagnosticEmitter { return stmt; } + /** Compiles a series of statements. */ compileStatements( + /** Statements to compile. */ statements: Statement[], + /** Whether this is an immediate body statement. */ isBody: bool = false, + /** Statements to append to that is also returned. Created if omitted. */ stmts: ExpressionRef[] | null = null ): ExpressionRef[] { var numStatements = statements.length; @@ -1821,7 +1769,7 @@ export class Compiler extends DiagnosticEmitter { return stmts; } - compileBlockStatement( + private compileBlockStatement( statement: BlockStatement ): ExpressionRef { var statements = statement.statements; @@ -1832,12 +1780,12 @@ export class Compiler extends DiagnosticEmitter { var stmts = this.compileStatements(statements); if (!innerFlow.isAny(FlowFlags.TERMINATES | FlowFlags.BREAKS)) this.performAutoreleases(innerFlow, stmts); innerFlow.freeScopedLocals(); - outerFlow.inherit(innerFlow); // TODO: only if not terminated? + outerFlow.inherit(innerFlow); this.currentFlow = outerFlow; - return flatten(this.module, stmts, NativeType.None); + return this.module.flatten(stmts); } - compileBreakStatement( + private compileBreakStatement( statement: BreakStatement ): ExpressionRef { var module = this.module; @@ -1867,10 +1815,10 @@ export class Compiler extends DiagnosticEmitter { flow.freeScopedLocals(); stmts.push(module.br(breakLabel)); flow.set(FlowFlags.BREAKS); - return flatten(module, stmts, NativeType.None); + return module.flatten(stmts); } - compileContinueStatement( + private compileContinueStatement( statement: ContinueStatement ): ExpressionRef { var module = this.module; @@ -1902,347 +1850,453 @@ export class Compiler extends DiagnosticEmitter { } flow.freeScopedLocals(); stmts.push(module.br(continueLabel)); - return flatten(module, stmts, NativeType.None); + return module.flatten(stmts); } - compileDoStatement( + private compileDoStatement( + /** Statement to compile. */ statement: DoStatement ): ExpressionRef { - var module = this.module; + return this.doCompileDoStatement(statement, null); + } + private doCompileDoStatement( + /** Statement to compile. */ + statement: DoStatement, + /** If recompiling, the flow with differing local flags that triggered it. */ + flowAfter: Flow | null + ): ExpressionRef { + var module = this.module; var outerFlow = this.currentFlow; + + // (block $break └►┐ flow + // (loop $continue ├◄───────────┐ recompile? + // (body) └─┐ bodyFlow │ + // [autorelease] ┌─┘ │ + // ┌◄┼►╢ │ breaks or terminates? + // (local.set $tcond (condition)) │ └─┐ condFlow │ + // [autorelease] │ ┌─┘ │ + // (br_if (local.get $tcond) $continue) ├◄┴────────────┘ condition? + // ) └─┐ + // ) ┌─┘ + var label = outerFlow.pushBreakLabel(); - var innerFlow = outerFlow.fork(); - var breakLabel = "break|" + label; - innerFlow.breakLabel = breakLabel; - var continueLabel = "continue|" + label; - innerFlow.continueLabel = continueLabel; + var flow = outerFlow.fork(/* resetBreakContext */ true); + if (flowAfter) flow.unifyLocalFlags(flowAfter); + var flowBefore = flow.fork(); + this.currentFlow = flow; - // Compile the condition before the body in order to... - var condFlow = outerFlow.fork(); - this.currentFlow = condFlow; - var condExpr = module.precomputeExpression( - this.makeIsTrueish( - this.compileExpression(statement.condition, Type.i32), - this.currentType - ) - ); - assert(!condFlow.hasScopedLocals); - // ...unify local states before and after the condition has been executed the first time - innerFlow.unifyLocalFlags(condFlow); - this.currentFlow = innerFlow; + var breakLabel = "do-break|" + label; + flow.breakLabel = breakLabel; + var continueLabel = "do-continue|" + label; + flow.continueLabel = continueLabel; - var stmts = new Array(); - if (statement.statement.kind == NodeKind.BLOCK) { - this.compileStatements((statement.statement).statements, false, stmts); + // Compile the body (always executes) + var bodyFlow = flow.fork(); + this.currentFlow = bodyFlow; + var bodyStmts = new Array(); + var body = statement.statement; + if (body.kind == NodeKind.BLOCK) { + this.compileStatements((body).statements, false, bodyStmts); } else { - stmts.push( - this.compileStatement(statement.statement) - ); - } - var alwaysFalse = false; - if (getExpressionId(condExpr) == ExpressionId.Const) { - assert(getExpressionType(condExpr) == NativeType.I32); - if (!getConstValueI32(condExpr)) alwaysFalse = true; + bodyStmts.push(this.compileStatement(body)); } - var terminates = innerFlow.is(FlowFlags.TERMINATES); - var continues = innerFlow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES); - var breaks = innerFlow.isAny(FlowFlags.BREAKS | FlowFlags.CONDITIONALLY_BREAKS); - // (block $break ;; (1) skip if no breaks - // (loop $continue ;; (2) skip if skipping (4) + no continues - // (...) ;; (3) - // (br_if cond $continue) ;; (4) skip if (3) does not fall through or always false - // ) - // ) - var fallsThrough = !terminates && !innerFlow.is(FlowFlags.BREAKS); + // Shortcut if body never falls through + if (bodyFlow.isAny(FlowFlags.TERMINATES | FlowFlags.BREAKS)) { + bodyStmts.push( + module.unreachable() + ); + flow.inherit(bodyFlow); + + // Otherwise evaluate the condition + } else { + this.performAutoreleases(bodyFlow, bodyStmts); + + let condFlow = flow.fork(); + this.currentFlow = condFlow; + let condExpr = module.precomputeExpression( + this.makeIsTrueish( + this.compileExpression(statement.condition, Type.i32), + this.currentType + ) + ); + let condKind = evaluateConditionKind(condExpr); + + // Shortcut if condition is always false + if (condKind == ConditionKind.FALSE) { + if (hasSideEffects(condExpr)) { + bodyStmts.push( + module.drop(condExpr) + ); + } + this.performAutoreleases(condFlow, bodyStmts); + flow.inherit(bodyFlow); + } else { + let tcond = condFlow.getTempLocal(Type.bool); + bodyStmts.push( + module.local_set(tcond.index, condExpr) + ); + this.performAutoreleases(condFlow, bodyStmts); + bodyStmts.push( + module.br(continueLabel, + module.local_get(tcond.index, NativeType.I32) + ) + ); + condFlow.freeTempLocal(tcond); + flow.inherit(condFlow); - if (fallsThrough) { - this.performAutoreleases(innerFlow, stmts); - if (!alwaysFalse) { // (4) - stmts.push(module.br(continueLabel, condExpr)); + // Detect if local flags are incompatible before and after looping, and + // if so recompile by unifying local flags between iterations. + if (Flow.hasIncompatibleLocalStates(flowBefore, flow)) { + assert(!flowAfter); // should work on the first attempt + outerFlow.popBreakLabel(); + this.currentFlow = outerFlow; + return this.doCompileWhileStatement(statement, flow); + } } } - var expr = flatten(module, stmts, NativeType.None); - if (fallsThrough && !alwaysFalse || continues) { // (2) - expr = module.loop(continueLabel, expr); - } - if (breaks) { // (1) - expr = module.block(breakLabel, [ expr ]); - } - // Switch back to the parent flow - innerFlow.freeScopedLocals(); + // Finalize + assert(!flow.hasScopedLocals); + outerFlow.inherit(flow); outerFlow.popBreakLabel(); - innerFlow.unset( - FlowFlags.BREAKS | - FlowFlags.CONDITIONALLY_BREAKS | - FlowFlags.CONTINUES | - FlowFlags.CONDITIONALLY_CONTINUES - ); - outerFlow.inherit(innerFlow); this.currentFlow = outerFlow; + var expr = module.block(breakLabel, [ + module.loop(continueLabel, + module.flatten(bodyStmts) + ) + ]); + if (outerFlow.is(FlowFlags.TERMINATES)) { + expr = module.block(null, [ expr, module.unreachable() ]); + } return expr; } - compileEmptyStatement( + private compileEmptyStatement( statement: EmptyStatement ): ExpressionRef { return this.module.nop(); } - compileExpressionStatement( + private compileExpressionStatement( statement: ExpressionStatement ): ExpressionRef { return this.compileExpression(statement.expression, Type.void, Constraints.CONV_IMPLICIT); } - compileForStatement( + private compileForStatement( + /** Statement to compile. */ statement: ForStatement ): ExpressionRef { - var module = this.module; + return this.doCompileForStatement(statement, null); + } - // Set up and use the inner flow + private doCompileForStatement( + /** Statement to compile. */ + statement: ForStatement, + /** If recompiling, the flow with differing local flags that triggered it. */ + flowAfter: Flow | null + ): ExpressionRef { + var module = this.module; var outerFlow = this.currentFlow; + + // (initializer) └►┐ flow + // (block $break │ + // (loop $loop ├◄───────────┐ recompile? + // (local.set $tcond (condition)) └─┐ condFlow │ + // [autorelease] ┌─┘ │ + // (if (local.get $tcond) ┌◄┤ │ condition? + // (block $continue │ │ │ + // (body) │ └─┐ bodyFlow │ + // [autorelease] │ ┌─┘ │ + // ) ├◄┼►╢ │ breaks or terminates? + // (incrementor) │ └─┐ incrFlow │ + // [autorelease] │ ┌─┘ │ + // │ └────────────┘ + // (br $loop) └─┐ + // ) │ + // ) │ + // ) │ + // [autorelease] ┌─┘ + var label = outerFlow.pushBreakLabel(); - var innerFlow = outerFlow.fork(); - this.currentFlow = innerFlow; + var stmts = new Array(); + var flow = outerFlow.fork(/* resetBreakContext */ true); + this.currentFlow = flow; + + var breakLabel = "for-break" + label; + flow.breakLabel = breakLabel; + var continueLabel = "for-continue|" + label; + flow.continueLabel = continueLabel; + var loopLabel = "for-loop|" + label; - // Compile the initializer + // Compile initializer if present (but wait with autoreleases) var initializer = statement.initializer; - var initExpr: ExpressionRef = 0; - if (initializer) initExpr = this.compileStatement(initializer); + if (initializer) { + assert( + initializer.kind == NodeKind.EXPRESSION || + initializer.kind == NodeKind.VARIABLE + ); + stmts.push(this.compileStatement(initializer)); + } + + if (flowAfter) flow.unifyLocalFlags(flowAfter); + var flowBefore = flow.fork(); - // Compile the condition - var condExpr: ExpressionRef = 0; - var alwaysTrue = false; - if (statement.condition) { + // Precompute the condition + var condFlow = flow.fork(); + this.currentFlow = condFlow; + var condExpr: ExpressionRef; + var condKind: ConditionKind; + var condition = statement.condition; + if (condition) { condExpr = module.precomputeExpression( this.makeIsTrueish( - this.compileExpression(statement.condition, Type.bool), + this.compileExpression(condition, Type.bool), this.currentType ) ); - // Simplify if the condition is constant - if (getExpressionId(condExpr) == ExpressionId.Const) { - assert(getExpressionType(condExpr) == NativeType.I32); - if (getConstValueI32(condExpr) == /* false */ 0) { - let stmts = new Array(); - if (initExpr) stmts.push(initExpr); - this.performAutoreleases(innerFlow, stmts); - innerFlow.freeScopedLocals(); - outerFlow.popBreakLabel(); - this.currentFlow = outerFlow; - return flatten(module, stmts, NativeType.None); + condKind = evaluateConditionKind(condExpr); + + // Shortcut if condition is always false (body never runs) + if (condKind == ConditionKind.FALSE) { + if (hasSideEffects(condExpr)) { + stmts.push( + module.drop(condExpr) + ); } - alwaysTrue = true; + this.performAutoreleases(condFlow, stmts); + condFlow.freeScopedLocals(); + flow.inherit(condFlow); + this.performAutoreleases(flow, stmts); + flow.freeScopedLocals(); + outerFlow.inherit(flow); + outerFlow.popBreakLabel(); + this.currentFlow = outerFlow; + return module.flatten(stmts); } - } else { // Omitted condition is always true + } else { condExpr = module.i32(1); - alwaysTrue = true; - } - innerFlow.inheritNonnullIfTrue(condExpr); - - // Compile the incrementor before the body in order to... - var incrementor = statement.incrementor; - var incrExpr: ExpressionRef = 0; - if (incrementor) { - let incrFlow = innerFlow.fork(); - this.currentFlow = incrFlow; - incrExpr = this.compileExpression(incrementor, Type.void, Constraints.CONV_IMPLICIT | Constraints.WILL_DROP); - assert(!incrFlow.hasScopedLocals); - this.currentFlow = innerFlow; - // ...unify local states before and after the incrementor has been executed the first time - innerFlow.unifyLocalFlags(incrFlow); + condKind = ConditionKind.TRUE; } - // Compile body (break: drop out, continue: fall through to incrementor, + loop) - var bodyFlow = innerFlow.fork(); + // From here on condition is either always true or unknown + + // Store condition result in a temp while we autorelease + var tcond = flow.getTempLocal(Type.bool); + var loopStmts = new Array(); + loopStmts.push( + module.local_set(tcond.index, condExpr) + ); + this.performAutoreleases(condFlow, loopStmts); + condFlow.freeScopedLocals(); + + flow.inherit(condFlow); // always executes + this.currentFlow = flow; + + // Compile the body assuming the condition turned out true + var bodyFlow = flow.fork(); + bodyFlow.inheritNonnullIfTrue(condExpr); this.currentFlow = bodyFlow; - var breakLabel = innerFlow.breakLabel = "break|" + label; bodyFlow.breakLabel = breakLabel; - bodyFlow.breakLabel = breakLabel; - var continueLabel = "continue|" + label; - bodyFlow.continueLabel = continueLabel; - var loopLabel = "loop|" + label; - var bodyStatement = statement.statement; - var stmts = new Array(); - if (bodyStatement.kind == NodeKind.BLOCK) { - this.compileStatements((bodyStatement).statements, false, stmts); + var bodyStmts = new Array(); + var body = statement.statement; + if (body.kind == NodeKind.BLOCK) { + this.compileStatements((body).statements, false, bodyStmts); } else { - stmts.push(this.compileStatement(bodyStatement)); + bodyStmts.push(this.compileStatement(body)); } - var terminates = bodyFlow.is(FlowFlags.TERMINATES); - var continues = bodyFlow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES); - var breaks = bodyFlow.isAny(FlowFlags.BREAKS | FlowFlags.CONDITIONALLY_BREAKS); - var fallsThrough = !terminates && !innerFlow.is(FlowFlags.BREAKS); - // Finalize body flow - if (fallsThrough) this.performAutoreleases(bodyFlow, stmts); + // Check if body terminates + if (bodyFlow.isAny(FlowFlags.TERMINATES | FlowFlags.BREAKS)) { + bodyStmts.push(module.unreachable()); + } else { + this.performAutoreleases(bodyFlow, bodyStmts); + } + if (condKind == ConditionKind.TRUE) flow.inherit(bodyFlow); + else flow.inheritBranch(bodyFlow); bodyFlow.freeScopedLocals(); - innerFlow.inherit(bodyFlow); - this.currentFlow = innerFlow; - // (block $break ;; (1) skip label (needed anyway) if skipping (4) + no breaks - // (initializer) ;; (2) [may be empty] - // (loop $loop ;; (3) skip if (6) does not fall through + no continues - // (br_if !cond $break) ;; (4) skip if always true - // (block $continue ;; (5) skip if no continues or nothing else than continue - // (...) ;; (6) - // ) - // (incrementor) ;; (7) skip if skipping (3) [may be empty] - // (br $loop) ;; (8) skip if skipping (3) - // ) - // ) - var needsLabel = !alwaysTrue || breaks; - - var loop = new Array(); - if (!alwaysTrue) { // (4) - loop.push(module.br(breakLabel, module.unary(UnaryOp.EqzI32, condExpr))); - } - if (continues) { // (5) - if (stmts.length > 1 || getExpressionId(stmts[0]) != ExpressionId.Break) { // otherwise lonely continue - loop.push(module.block(continueLabel, stmts)); + var ifStmts = new Array(); + ifStmts.push( + module.block(continueLabel, bodyStmts) + ); + + // Compile the incrementor if it runs + // Can still fall through to here if body continues, hence is already known to terminate + if (!bodyFlow.is(FlowFlags.TERMINATES) || bodyFlow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES)) { + let incrementor = statement.incrementor; + if (incrementor) { + let incrFlow = flow.fork(); + this.currentFlow = incrFlow; + ifStmts.push( + this.compileExpression(incrementor, Type.void, Constraints.CONV_IMPLICIT | Constraints.WILL_DROP) + ); + this.performAutoreleases(incrFlow, ifStmts); + incrFlow.freeScopedLocals(); + flow.inherit(incrFlow); // mostly local flags, also covers late termination by throwing + this.currentFlow = flow; } - } else { - for (let i = 0, k = stmts.length; i < k; ++i) loop.push(stmts[i]); - } - var expr: ExpressionRef; - if (fallsThrough || continues) { // (3) - if (incrExpr) loop.push(incrExpr); // (7) - this.performAutoreleases(innerFlow, loop); - loop.push(module.br(loopLabel)); // (8) - if (initExpr) { // (2) - expr = module.block(needsLabel ? breakLabel : null, [ - initExpr, - module.loop(loopLabel, module.block(null, loop)) - ]); - } else { - expr = module.block(needsLabel ? breakLabel : null, [ - module.loop(loopLabel, flatten(module, loop, NativeType.None)) - ]); + + ifStmts.push( + module.br(loopLabel) + ); + + // Detect if local flags are incompatible before and after looping, and if + // so recompile by unifying local flags between iterations. + if (Flow.hasIncompatibleLocalStates(flowBefore, flow)) { + assert(!flowAfter); // should work on the first attempt + assert(!bodyFlow.hasScopedLocals); + flow.freeScopedLocals(); + outerFlow.popBreakLabel(); + this.currentFlow = outerFlow; + return this.doCompileForStatement(statement, flow); } - } else { - if (initExpr) loop.unshift(initExpr); // (2) - this.performAutoreleases(innerFlow, loop); - expr = module.block(needsLabel ? breakLabel : null, loop); } + loopStmts.push( + module.if(module.local_get(tcond.index, NativeType.I32), + module.flatten(ifStmts) + ) + ); - // Switch back to the parent flow - innerFlow.freeScopedLocals(); - outerFlow.popBreakLabel(); - innerFlow.unset( - FlowFlags.BREAKS | - FlowFlags.CONDITIONALLY_BREAKS | - FlowFlags.CONTINUES | - FlowFlags.CONDITIONALLY_CONTINUES + stmts.push( + module.block(breakLabel, [ + module.loop(loopLabel, + module.flatten(loopStmts) + ) + ]) ); - if (alwaysTrue) outerFlow.inherit(innerFlow); - else outerFlow.inheritConditional(innerFlow); + flow.freeTempLocal(tcond); + this.currentFlow = flow; + + // Finalize + flow.freeScopedLocals(); + outerFlow.inherit(flow); + outerFlow.popBreakLabel(); + if (outerFlow.is(FlowFlags.TERMINATES)) { + stmts.push(module.unreachable()); + } else { + this.performAutoreleases(flow, stmts); + } this.currentFlow = outerFlow; - return expr; + return module.flatten(stmts); } - compileIfStatement( + private compileIfStatement( statement: IfStatement ): ExpressionRef { var module = this.module; var ifTrue = statement.ifTrue; var ifFalse = statement.ifFalse; - var outerFlow = this.currentFlow; - // The condition doesn't initiate a branch yet + // (if └►┐ flow + // (condition) ┌┴───────────┐ condition? + // (block │ │ + // (ifTrue) └►┐ thenFlow │ + // [autorelease] ┌─┘ │ + // ) ├─╢ │ + // (block │ ┌◄┤ present? + // (ifFalse) │ │ └►┐ elseFlow + // [autorelease] │ │ ┌─┘ + // ) │ │ ├─╢ + // ) └┬─────────┴─┘ + // ... ┌◄┘ + // [autorelease] incl. condition + + // Precompute the condition (always executes) var condExpr = module.precomputeExpression( this.makeIsTrueish( this.compileExpression(statement.condition, Type.bool), this.currentType ) ); + var condKind = evaluateConditionKind(condExpr); - // Try to eliminate unnecesssary branches if the condition is constant - if ( - getExpressionId(condExpr) == ExpressionId.Const && - getExpressionType(condExpr) == NativeType.I32 - ) { - return getConstValueI32(condExpr) - ? this.compileStatement(ifTrue) - : ifFalse + // Shortcut if the condition is constant + switch (condKind) { + case ConditionKind.TRUE: { + if (hasSideEffects(condExpr)) { + return module.block(null, [ + module.drop(condExpr), + this.compileStatement(ifTrue) + ]); + } + return this.compileStatement(ifTrue); + } + case ConditionKind.FALSE: { + if (hasSideEffects(condExpr)) { + return ifFalse + ? module.block(null, [ + module.drop(condExpr), + this.compileStatement(ifFalse) + ]) + : module.drop(condExpr); + } + return ifFalse ? this.compileStatement(ifFalse) : module.nop(); + } } - // Each arm initiates a branch - var ifTrueStmts = new Array(); - var ifTrueFlow = outerFlow.fork(); - this.currentFlow = ifTrueFlow; - ifTrueFlow.inheritNonnullIfTrue(condExpr); + // From here on condition is always unknown + + var flow = this.currentFlow; + + // Compile ifTrue assuming the condition turned out true + var thenStmts = new Array(); + var thenFlow = flow.fork(); + this.currentFlow = thenFlow; + thenFlow.inheritNonnullIfTrue(condExpr); if (ifTrue.kind == NodeKind.BLOCK) { - this.compileStatements((ifTrue).statements, false, ifTrueStmts); + this.compileStatements((ifTrue).statements, false, thenStmts); } else { - ifTrueStmts.push(this.compileStatement(ifTrue)); + thenStmts.push(this.compileStatement(ifTrue)); } - if (!ifTrueFlow.isAny(FlowFlags.TERMINATES | FlowFlags.BREAKS)) this.performAutoreleases(ifTrueFlow, ifTrueStmts); - ifTrueFlow.freeScopedLocals(); - this.currentFlow = outerFlow; + if (thenFlow.isAny(FlowFlags.TERMINATES | FlowFlags.BREAKS)) { + thenStmts.push(module.unreachable()); + } else { + this.performAutoreleases(thenFlow, thenStmts); + } + thenFlow.freeScopedLocals(); + this.currentFlow = flow; + // Compile ifFalse assuming the condition turned out false, if present if (ifFalse) { - let ifFalseFlow = outerFlow.fork(); - this.currentFlow = ifFalseFlow; - ifFalseFlow.inheritNonnullIfFalse(condExpr); - let ifFalseStmts = new Array(); + let elseStmts = new Array(); + let elseFlow = flow.fork(); + this.currentFlow = elseFlow; + elseFlow.inheritNonnullIfFalse(condExpr); if (ifFalse.kind == NodeKind.BLOCK) { - this.compileStatements((ifFalse).statements, false, ifFalseStmts); + this.compileStatements((ifFalse).statements, false, elseStmts); } else { - ifFalseStmts.push(this.compileStatement(ifFalse)); + elseStmts.push(this.compileStatement(ifFalse)); } - if (!ifFalseFlow.isAny(FlowFlags.TERMINATES | FlowFlags.BREAKS)) this.performAutoreleases(ifFalseFlow, ifFalseStmts); - ifFalseFlow.freeScopedLocals(); - this.currentFlow = outerFlow; - outerFlow.inheritMutual(ifTrueFlow, ifFalseFlow); + if (elseFlow.isAny(FlowFlags.TERMINATES | FlowFlags.BREAKS)) { + elseStmts.push(module.unreachable()); + } else { + this.performAutoreleases(elseFlow, elseStmts); + } + elseFlow.freeScopedLocals(); + this.currentFlow = flow; + flow.inheritMutual(thenFlow, elseFlow); return module.if(condExpr, - flatten(module, ifTrueStmts, NativeType.None), - flatten(module, ifFalseStmts, NativeType.None) + module.flatten(thenStmts), + module.flatten(elseStmts) ); } else { - outerFlow.inheritConditional(ifTrueFlow); - if (ifTrueFlow.is(FlowFlags.TERMINATES)) outerFlow.inheritNonnullIfFalse(condExpr); + flow.inheritBranch(thenFlow); + flow.inheritNonnullIfFalse(condExpr, + thenFlow.isAny(FlowFlags.TERMINATES | FlowFlags.BREAKS) + ? null // thenFlow terminates: just inherit + : thenFlow // must become nonnull in thenFlow otherwise + ); return module.if(condExpr, - flatten(module, ifTrueStmts, NativeType.None) + module.flatten(thenStmts) ); } - // TODO: Detect neglected condition - // if (!foo) { - // foo = [notNull] - // } - // foo // is possibly null - } - - /** Compiles an expression that is about to be returned, taking special care of retaining and setting flow states. */ - compileReturnedExpression( - /** Expression to compile. */ - expression: Expression, - /** Return type of the function. */ - returnType: Type, - /** Constraints indicating contextual conditions. */ - constraints: Constraints = Constraints.NONE - ): ExpressionRef { - // pretend to retain the expression immediately so the autorelease, if any, is skipped - var expr = this.compileExpression(expression, returnType, constraints | Constraints.WILL_RETAIN); - var flow = this.currentFlow; - if (returnType.isManaged) { - // check if that worked, and if it didn't, keep the reference alive - if (!this.skippedAutoreleases.has(expr)) { - let index = this.tryUndoAutorelease(expr, flow); - if (index == -1) expr = this.makeRetain(expr); - this.skippedAutoreleases.add(expr); - } - } - // remember return states - if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED); - if (flow.isNonnull(expr, returnType)) flow.set(FlowFlags.RETURNS_NONNULL); - return expr; } - compileReturnStatement( + private compileReturnStatement( statement: ReturnStatement, isLastInBody: bool ): ExpressionRef { @@ -2296,24 +2350,24 @@ export class Compiler extends DiagnosticEmitter { if (isLastInBody && expr && returnType != Type.void) { if (!stmts.length) return expr; stmts.push(expr); - return module.block(null, stmts, returnType.toNativeType()); + return module.flatten(stmts, returnType.toNativeType()); } // When inlining, break to the end of the inlined function's block (no need to wrap) - if (flow.is(FlowFlags.INLINE_CONTEXT)) { + if (flow.isInline) { if (!stmts.length) return module.br(assert(flow.inlineReturnLabel), 0, expr); stmts.push(module.br(assert(flow.inlineReturnLabel), 0, expr)); // stmts.push(module.createUnreachable()); - return module.block(null, stmts); + return module.flatten(stmts); } // Otherwise emit a normal return if (!stmts.length) return module.return(expr); stmts.push(module.return(expr)); - return module.block(null, stmts); + return module.flatten(stmts); } - compileSwitchStatement( + private compileSwitchStatement( statement: SwitchStatement ): ExpressionRef { var module = this.module; @@ -2427,7 +2481,7 @@ export class Compiler extends DiagnosticEmitter { return currentBlock; } - compileThrowStatement( + private compileThrowStatement( statement: ThrowStatement ): ExpressionRef { var flow = this.currentFlow; @@ -2447,10 +2501,10 @@ export class Compiler extends DiagnosticEmitter { } stmts.push(compileAbort(this, message, statement)); - return flatten(this.module, stmts, NativeType.None); + return this.module.flatten(stmts); } - compileTryStatement( + private compileTryStatement( statement: TryStatement ): ExpressionRef { // TODO: can't yet support something like: try { return ... } finally { ... } @@ -2463,7 +2517,7 @@ export class Compiler extends DiagnosticEmitter { } /** Compiles a variable statement. Returns `0` if an initializer is not necessary. */ - compileVariableStatement( + private compileVariableStatement( statement: VariableStatement ): ExpressionRef { var module = this.module; @@ -2590,7 +2644,7 @@ export class Compiler extends DiagnosticEmitter { let local: Local; if ( declaration.isAny(CommonFlags.LET | CommonFlags.CONST) || - flow.is(FlowFlags.INLINE_CONTEXT) + flow.isInline ) { // here: not top-level let existingLocal = flow.getScopedLocal(name); if (existingLocal) { @@ -2668,10 +2722,10 @@ export class Compiler extends DiagnosticEmitter { } return initializers.length == 0 ? 0 - : flatten(module, initializers, NativeType.None); + : module.flatten(initializers); } - compileVoidStatement( + private compileVoidStatement( statement: VoidStatement ): ExpressionRef { return this.compileExpression(statement.expression, Type.void, @@ -2679,81 +2733,146 @@ export class Compiler extends DiagnosticEmitter { ); } - compileWhileStatement( + private compileWhileStatement( + /** Statement to compile. */ statement: WhileStatement + ): ExpressionRef { + return this.doCompileWhileStatement(statement, null); + } + + private doCompileWhileStatement( + /** Statement to compile. */ + statement: WhileStatement, + /** If recompiling, the flow with differing local flags that triggered it. */ + flowAfter: Flow | null ): ExpressionRef { var module = this.module; var outerFlow = this.currentFlow; - // Compile condition + // (block $break └►┐ flow + // (loop $continue ├◄───────────┐ recompile? + // (local.set $tcond (condition)) └─┐ condFlow │ + // [autorelease] ┌─┘ │ + // (if (local.get $tcond) ┌◄┤ │ condition? + // (body) │ └─┐ bodyFlow │ + // [autorelease] │ ┌─┘ │ + // ├◄┼►╢ │ breaks or terminates? + // (br $continue) │ └────────────┘ + // ) └─┐ + // ) │ + // ) ┌─┘ + + var label = outerFlow.pushBreakLabel(); + var stmts = new Array(); + var flow = outerFlow.fork(/* resetBreakContext */ true); + if (flowAfter) flow.unifyLocalFlags(flowAfter); + var flowBefore = flow.fork(); + this.currentFlow = flow; + + var breakLabel = "while-break|" + label; + flow.breakLabel = breakLabel; + var continueLabel = "while-continue|" + label; + flow.continueLabel = continueLabel; + + // Precompute the condition + var condFlow = flow.fork(); + this.currentFlow = condFlow; var condExpr = module.precomputeExpression( this.makeIsTrueish( this.compileExpression(statement.condition, Type.bool), this.currentType ) ); + var condKind = evaluateConditionKind(condExpr); - // Simplify if the condition is constant - var alwaysTrue = false; - if (getExpressionId(condExpr) == ExpressionId.Const) { - assert(getExpressionType(condExpr) == NativeType.I32); - if (!getConstValueI32(condExpr)) return module.nop(); // simplify - alwaysTrue = true; + // Shortcut if condition is always false (body never runs) + if (condKind == ConditionKind.FALSE) { + this.performAutoreleases(condFlow, stmts); + assert(!flow.hasScopedLocals); + outerFlow.popBreakLabel(); + this.currentFlow = outerFlow; + return module.flatten(stmts); } - // Compile body - var label = outerFlow.pushBreakLabel(); - var innerFlow = outerFlow.fork(); - this.currentFlow = innerFlow; - var breakLabel = "break|" + label; - innerFlow.breakLabel = breakLabel; - var continueLabel = "continue|" + label; - innerFlow.continueLabel = continueLabel; - innerFlow.inheritNonnullIfTrue(condExpr); - var stmts = new Array(); - if (statement.statement.kind == NodeKind.BLOCK) { - this.compileStatements((statement.statement).statements, false, stmts); + // From here on condition is either always true or unknown + + // Store condition result in a temp while we autorelease + var tcond = flow.getTempLocal(Type.bool); + stmts.push( + module.local_set(tcond.index, condExpr) + ); + this.performAutoreleases(condFlow, stmts); + condFlow.freeScopedLocals(); + + flow.inherit(condFlow); // always executes + this.currentFlow = flow; + + // Compile the body assuming the condition turned out true + var bodyFlow = flow.fork(); + bodyFlow.inheritNonnullIfTrue(condExpr); + this.currentFlow = bodyFlow; + var bodyStmts = new Array(); + var body = statement.statement; + if (body.kind == NodeKind.BLOCK) { + this.compileStatements((body).statements, false, bodyStmts); } else { - stmts.push(this.compileStatement(statement.statement)); + bodyStmts.push(this.compileStatement(body)); } - var terminates = innerFlow.is(FlowFlags.TERMINATES); - // (block $break ;; (1) skip if skipping (3) + no breaks - // (loop $continue ;; (2) skip if skipping (5) + no continues - // (br_if !cond $break) ;; (3) skip if always true - // (...) ;; (4) - // (br $continue) ;; (5) skip if (4) does not fall through - // ) - // ) - var fallsThrough = !terminates && !innerFlow.is(FlowFlags.BREAKS); + // Check if body terminates + if (bodyFlow.is(FlowFlags.TERMINATES)) { + bodyStmts.push( + module.unreachable() + ); + if (condKind == ConditionKind.TRUE) flow.inherit(bodyFlow); + else flow.inheritBranch(bodyFlow); + } else { + let breaks = bodyFlow.is(FlowFlags.BREAKS); + if (breaks) { + bodyStmts.push( + module.unreachable() + ); + } else { + this.performAutoreleases(bodyFlow, bodyStmts); + bodyStmts.push( + module.br(continueLabel) + ); + } + if (condKind == ConditionKind.TRUE) flow.inherit(bodyFlow); + else flow.inheritBranch(bodyFlow); - if (fallsThrough) { // (5) - this.performAutoreleases(innerFlow, stmts); - stmts.push(module.br(continueLabel)); - } - if (!alwaysTrue) { // (3) - stmts.unshift(module.br(breakLabel, module.unary(UnaryOp.EqzI32, condExpr))); - } - var expr = flatten(module, stmts, NativeType.None); - if (fallsThrough || innerFlow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES)) { // (2) - expr = module.loop(continueLabel, expr); - } - if (!alwaysTrue || innerFlow.isAny(FlowFlags.BREAKS | FlowFlags.CONDITIONALLY_BREAKS)) { // (1) - expr = module.block(breakLabel, [ expr ]); + // Detect if local flags are incompatible before and after looping, and + // if so recompile by unifying local flags between iterations. + // Here: Only relevant if flow does not always break. + if (!breaks && Flow.hasIncompatibleLocalStates(flowBefore, flow)) { + assert(!flowAfter); // should work on the first attempt + flow.freeTempLocal(tcond); + outerFlow.popBreakLabel(); + this.currentFlow = outerFlow; + return this.doCompileWhileStatement(statement, flow); + } } + stmts.push( + module.if(module.local_get(tcond.index, NativeType.I32), + module.flatten(bodyStmts) + ) + ); + flow.freeTempLocal(tcond); + this.currentFlow = flow; - // Switch back to the parent flow - innerFlow.freeScopedLocals(); + // Finalize + assert(!flow.hasScopedLocals); + outerFlow.inherit(flow); outerFlow.popBreakLabel(); - innerFlow.unset( - FlowFlags.BREAKS | - FlowFlags.CONDITIONALLY_BREAKS | - FlowFlags.CONTINUES | - FlowFlags.CONDITIONALLY_CONTINUES - ); - if (alwaysTrue) outerFlow.inherit(innerFlow); - else outerFlow.inheritConditional(innerFlow); this.currentFlow = outerFlow; + var expr = module.block(breakLabel, [ + module.loop(continueLabel, + module.flatten(stmts) + ) + ]); + if (condKind == ConditionKind.TRUE && outerFlow.is(FlowFlags.TERMINATES)) { + expr = module.block(null, [ expr, module.unreachable() ]); + } return expr; } @@ -2924,7 +3043,7 @@ export class Compiler extends DiagnosticEmitter { // ensure conversion and wrapping in case the respective function doesn't on its own var currentType = this.currentType; var wrap = (constraints & Constraints.MUST_WRAP) != 0; - if (currentType != contextualType) { + if (currentType != contextualType.nonNullableType) { // allow assigning non-nullable to nullable if (constraints & Constraints.CONV_EXPLICIT) { expr = this.convertExpression(expr, currentType, contextualType, true, wrap, expression); wrap = false; @@ -2953,6 +3072,32 @@ export class Compiler extends DiagnosticEmitter { ); } + /** Compiles an expression that is about to be returned, taking special care of retaining and setting flow states. */ + private compileReturnedExpression( + /** Expression to compile. */ + expression: Expression, + /** Return type of the function. */ + returnType: Type, + /** Constraints indicating contextual conditions. */ + constraints: Constraints = Constraints.NONE + ): ExpressionRef { + // pretend to retain the expression immediately so the autorelease, if any, is skipped + var expr = this.compileExpression(expression, returnType, constraints | Constraints.WILL_RETAIN); + var flow = this.currentFlow; + if (returnType.isManaged) { + // check if that worked, and if it didn't, keep the reference alive + if (!this.skippedAutoreleases.has(expr)) { + let index = this.tryUndoAutorelease(expr, flow); + if (index == -1) expr = this.makeRetain(expr); + this.skippedAutoreleases.add(expr); + } + } + // remember return states + if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED); + if (flow.isNonnull(expr, returnType)) flow.set(FlowFlags.RETURNS_NONNULL); + return expr; + } + convertExpression( expr: ExpressionRef, /** Original type. */ @@ -3146,7 +3291,7 @@ export class Compiler extends DiagnosticEmitter { : expr; } - compileAssertionExpression( + private compileAssertionExpression( expression: AssertionExpression, contextualType: Type, constraints: Constraints @@ -3199,7 +3344,7 @@ export class Compiler extends DiagnosticEmitter { private f32PowInstance: Function | null = null; private f64PowInstance: Function | null = null; - compileBinaryExpression( + private compileBinaryExpression( expression: BinaryExpression, contextualType: Type, constraints: Constraints @@ -4121,7 +4266,7 @@ export class Compiler extends DiagnosticEmitter { rightExpr = this.compileExpression(right, Type.f32, Constraints.CONV_IMPLICIT); rightType = this.currentType; if (!(instance = this.f32PowInstance)) { - let namespace = this.program.lookupGlobal(CommonSymbols.Mathf); + let namespace = this.program.lookupGlobal(CommonNames.Mathf); if (!namespace) { this.error( DiagnosticCode.Cannot_find_name_0, @@ -4130,7 +4275,7 @@ export class Compiler extends DiagnosticEmitter { expr = module.unreachable(); break; } - let prototype = namespace.members ? namespace.members.get(CommonSymbols.pow) : null; + let prototype = namespace.members ? namespace.members.get(CommonNames.pow) : null; if (!prototype) { this.error( DiagnosticCode.Cannot_find_name_0, @@ -4155,7 +4300,7 @@ export class Compiler extends DiagnosticEmitter { rightExpr = this.compileExpression(right, Type.f64, Constraints.CONV_IMPLICIT); rightType = this.currentType; if (!(instance = this.f64PowInstance)) { - let namespace = this.program.lookupGlobal(CommonSymbols.Math); + let namespace = this.program.lookupGlobal(CommonNames.Math); if (!namespace) { this.error( DiagnosticCode.Cannot_find_name_0, @@ -4164,7 +4309,7 @@ export class Compiler extends DiagnosticEmitter { expr = module.unreachable(); break; } - let prototype = namespace.members ? namespace.members.get(CommonSymbols.pow) : null; + let prototype = namespace.members ? namespace.members.get(CommonNames.pow) : null; if (!prototype) { this.error( DiagnosticCode.Cannot_find_name_0, @@ -4397,7 +4542,7 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.F32: { let instance = this.f32ModInstance; if (!instance) { - let namespace = this.program.lookupGlobal(CommonSymbols.Mathf); + let namespace = this.program.lookupGlobal(CommonNames.Mathf); if (!namespace) { this.error( DiagnosticCode.Cannot_find_name_0, @@ -4406,7 +4551,7 @@ export class Compiler extends DiagnosticEmitter { expr = module.unreachable(); break; } - let prototype = namespace.members ? namespace.members.get(CommonSymbols.mod) : null; + let prototype = namespace.members ? namespace.members.get(CommonNames.mod) : null; if (!prototype) { this.error( DiagnosticCode.Cannot_find_name_0, @@ -4428,7 +4573,7 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.F64: { let instance = this.f64ModInstance; if (!instance) { - let namespace = this.program.lookupGlobal(CommonSymbols.Math); + let namespace = this.program.lookupGlobal(CommonNames.Math); if (!namespace) { this.error( DiagnosticCode.Cannot_find_name_0, @@ -4437,7 +4582,7 @@ export class Compiler extends DiagnosticEmitter { expr = module.unreachable(); break; } - let prototype = namespace.members ? namespace.members.get(CommonSymbols.mod) : null; + let prototype = namespace.members ? namespace.members.get(CommonNames.mod) : null; if (!prototype) { this.error( DiagnosticCode.Cannot_find_name_0, @@ -5191,6 +5336,7 @@ export class Compiler extends DiagnosticEmitter { return this.makeAssignment( target, expr, // TODO: delay release above if possible? + this.currentType, left, resolver.currentThisExpression, resolver.currentElementExpression, @@ -5198,7 +5344,7 @@ export class Compiler extends DiagnosticEmitter { ); } - compileUnaryOverload( + private compileUnaryOverload( operatorInstance: Function, value: Expression, valueExpr: ExpressionRef, @@ -5209,7 +5355,7 @@ export class Compiler extends DiagnosticEmitter { return this.makeCallDirect(operatorInstance, [ valueExpr ], reportNode, false); } - compileBinaryOverload( + private compileBinaryOverload( operatorInstance: Function, left: Expression, leftExpr: ExpressionRef, @@ -5235,7 +5381,7 @@ export class Compiler extends DiagnosticEmitter { return this.makeCallDirect(operatorInstance, [ leftExpr, rightExpr ], reportNode); } - compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef { + private compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef { var program = this.program; var resolver = program.resolver; var flow = this.currentFlow; @@ -5324,9 +5470,11 @@ export class Compiler extends DiagnosticEmitter { // compile the value and do the assignment assert(targetType != Type.void); + var valueExpr = this.compileExpression(valueExpression, targetType, Constraints.CONV_IMPLICIT | Constraints.WILL_RETAIN); return this.makeAssignment( target, - this.compileExpression(valueExpression, targetType, Constraints.CONV_IMPLICIT | Constraints.WILL_RETAIN), + valueExpr, + this.currentType, expression, thisExpression, elementExpression, @@ -5340,6 +5488,8 @@ export class Compiler extends DiagnosticEmitter { target: Element, /** Value expression that has been compiled in a previous step already. */ valueExpr: ExpressionRef, + /** Value expression type. */ + valueType: Type, /** Expression reference. Has already been compiled to `valueExpr`. */ valueExpression: Expression, /** `this` expression reference if a field or property set. */ @@ -5365,7 +5515,7 @@ export class Compiler extends DiagnosticEmitter { this.currentType = tee ? (target).type : Type.void; return module.unreachable(); } - return this.makeLocalAssignment(target, valueExpr, tee); + return this.makeLocalAssignment(target, valueExpr, valueType, tee); } case ElementKind.GLOBAL: { if (!this.compileGlobal(target)) return module.unreachable(); @@ -5530,10 +5680,12 @@ export class Compiler extends DiagnosticEmitter { /** Makes an assignment to a local, possibly retaining and releasing affected references and keeping track of wrap and null states. */ private makeLocalAssignment( - /** The local to assign to. */ + /** Local to assign to. */ local: Local, - /** The value to assign. */ + /** Value to assign. */ valueExpr: ExpressionRef, + /** Value type. */ + valueType: Type, /** Whether to tee the value. */ tee: bool ): ExpressionRef { @@ -5544,10 +5696,10 @@ export class Compiler extends DiagnosticEmitter { var localIndex = local.index; if (type.is(TypeFlags.NULLABLE)) { - if (flow.isNonnull(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.NONNULL); + if (!valueType.is(TypeFlags.NULLABLE) || flow.isNonnull(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.NONNULL); else flow.unsetLocalFlag(localIndex, LocalFlags.NONNULL); } - flow.setLocalFlag(localIndex, LocalFlags.WRITTENTO); + flow.setLocalFlag(localIndex, LocalFlags.INITIALIZED); if (type.isManaged) { let alreadyRetained = this.skippedAutoreleases.has(valueExpr); @@ -5642,7 +5794,7 @@ export class Compiler extends DiagnosticEmitter { } /** Makes an assignment to a field, possibly retaining and releasing affected references. */ - makeFieldAssignment( + private makeFieldAssignment( /** The field to assign to. */ field: Field, /** The value to assign. */ @@ -5730,7 +5882,7 @@ export class Compiler extends DiagnosticEmitter { } /** Compiles a call expression according to the specified context. */ - compileCallExpression( + private compileCallExpression( /** Call expression to compile. */ expression: CallExpression, /** Contextual type indicating the return type the caller expects, if any. */ @@ -5756,7 +5908,7 @@ export class Compiler extends DiagnosticEmitter { let classInstance = assert(actualFunction.parent); assert(classInstance.kind == ElementKind.CLASS); let baseClassInstance = assert((classInstance).base); - let thisLocal = assert(flow.lookupLocal(CommonSymbols.this_)); + let thisLocal = assert(flow.lookupLocal(CommonNames.this_)); let nativeSizeType = this.options.nativeSizeType; // { @@ -5781,7 +5933,7 @@ export class Compiler extends DiagnosticEmitter { let stmts: ExpressionRef[] = [ module.local_set(thisLocal.index, theCall) ]; - this.makeFieldInitialization(classInstance, stmts); + this.makeFieldInitializationInConstructor(classInstance, stmts); // check that super had been called before accessing `this` if (flow.isAny( @@ -5796,7 +5948,7 @@ export class Compiler extends DiagnosticEmitter { } flow.set(FlowFlags.ALLOCATES | FlowFlags.CALLS_SUPER); this.currentType = Type.void; - return module.block(null, stmts); + return module.flatten(stmts); } // otherwise resolve normally @@ -6076,13 +6228,14 @@ export class Compiler extends DiagnosticEmitter { // Inline if explicitly requested if (instance.hasDecorator(DecoratorFlags.INLINE)) { assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense - if (this.currentInlineFunctions.includes(instance)) { + let inlineStack = this.inlineStack; + if (inlineStack.includes(instance)) { this.warning( DiagnosticCode.Function_0_cannot_be_inlined_into_itself, reportNode.range, instance.internalName ); } else { - this.currentInlineFunctions.push(instance); + inlineStack.push(instance); let parameterTypes = signature.parameterTypes; assert(numArguments <= parameterTypes.length); // compile argument expressions @@ -6101,7 +6254,7 @@ export class Compiler extends DiagnosticEmitter { this.skippedAutoreleases.add(expr); } } - this.currentInlineFunctions.pop(); + inlineStack.pop(); return expr; } } @@ -6183,13 +6336,13 @@ export class Compiler extends DiagnosticEmitter { if (thisArg) { let classInstance = assert(instance.parent); assert(classInstance.kind == ElementKind.CLASS); let thisType = assert(instance.signature.thisType); - let thisLocal = flow.addScopedLocal(CommonSymbols.this_, thisType, usedLocals); + let thisLocal = flow.addScopedLocal(CommonNames.this_, thisType, usedLocals); // No need to retain `this` as it can't be reassigned and thus can't become prematurely released body.unshift( module.local_set(thisLocal.index, thisArg) ); let baseInstance = (classInstance).base; - if (baseInstance) flow.addScopedAlias(CommonSymbols.super_, baseInstance.type, thisLocal.index); + if (baseInstance) flow.addScopedAlias(CommonNames.super_, baseInstance.type, thisLocal.index); } else { assert(!instance.signature.thisType); } @@ -6321,10 +6474,10 @@ export class Compiler extends DiagnosticEmitter { minArguments ? module.binary( BinaryOp.SubI32, - module.global_get(BuiltinSymbols.argc, NativeType.I32), + module.global_get(BuiltinNames.argumentsLength, NativeType.I32), module.i32(minArguments) ) - : module.global_get(BuiltinSymbols.argc, NativeType.I32) + : module.global_get(BuiltinNames.argumentsLength, NativeType.I32) ) ]), module.unreachable() @@ -6373,41 +6526,19 @@ export class Compiler extends DiagnosticEmitter { trampolineSignature.nativeParams, trampolineSignature.nativeResults, typesToNativeTypes(trampoline.additionalLocals), - module.block(null, stmts, returnType.toNativeType()) + module.flatten(stmts, returnType.toNativeType()) ); trampoline.finalize(module, funcRef); return trampoline; } - /** Makes sure that the argument count helper global is present and returns its name. */ - private ensureArgcVar(): string { - if (!this.argcVar) { + /** Makes sure that the arguments length helper global is present. */ + ensureBuiltinArgumentsLength(): void { + if (!this.builtinArgumentsLength) { let module = this.module; - this.argcVar = module.addGlobal( - BuiltinSymbols.argc, - NativeType.I32, - true, - module.i32(0) - ); - } - return BuiltinSymbols.argc; - } - - /** Makes sure that the argument count helper setter is present and returns its name. */ - private ensureArgcSet(): string { - if (!this.argcSet) { - let module = this.module; - this.argcSet = module.addFunction(BuiltinSymbols.setargc, - NativeType.I32, - NativeType.None, - null, - module.global_set(this.ensureArgcVar(), - module.local_get(0, NativeType.I32) - ) - ); - module.addFunctionExport(BuiltinSymbols.setargc, "__setargc"); + this.builtinArgumentsLength = module.addGlobal(BuiltinNames.argumentsLength, NativeType.I32, true, module.i32(0)); + module.addGlobalExport(BuiltinNames.argumentsLength, ExportNames.argumentsLength); } - return BuiltinSymbols.setargc; } // @@ -6623,22 +6754,22 @@ export class Compiler extends DiagnosticEmitter { ); var lengthBefore = stmts.length; this.performAutoreleases(flow, stmts, finalize); + var module = this.module; if (stmts.length > lengthBefore) { let nativeType = valueType.toNativeType(); let temp = flow.getTempLocal(valueType); if (!flow.canOverflow(valueExpr, valueType)) flow.setLocalFlag(temp.index, LocalFlags.WRAPPED); if (flow.isNonnull(valueExpr, valueType)) flow.setLocalFlag(temp.index, LocalFlags.NONNULL); - let module = this.module; stmts[lengthBefore - 1] = module.local_set(temp.index, valueExpr); // nop -> set stmts.push( module.local_get(temp.index, nativeType) // append get ); - let ret = module.block(null, stmts, nativeType); + let ret = module.flatten(stmts, nativeType); flow.freeTempLocal(temp); return ret; } else if (stmts.length > 1) { stmts[lengthBefore - 1] = valueExpr; // nop -> value - return this.module.block(null, stmts, valueType.toNativeType()); + return module.flatten(stmts, valueType.toNativeType()); } return valueExpr; } @@ -6652,7 +6783,7 @@ export class Compiler extends DiagnosticEmitter { ): void { // Differs from `performAutoreleases` in that concluding this flow also // concludes all its parent flows, for example on a `return`. - if (flow.is(FlowFlags.INLINE_CONTEXT)) { + if (flow.isInline) { // Traverse to the top-most flow containing the inlined function's // locals as scoped locals and release these instead of all the locals. let current = flow; @@ -6705,13 +6836,14 @@ export class Compiler extends DiagnosticEmitter { ): ExpressionRef { if (instance.hasDecorator(DecoratorFlags.INLINE)) { assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense - if (this.currentInlineFunctions.includes(instance)) { + let inlineStack = this.inlineStack; + if (inlineStack.includes(instance)) { this.warning( DiagnosticCode.Function_0_cannot_be_inlined_into_itself, reportNode.range, instance.internalName ); } else { - this.currentInlineFunctions.push(instance); + inlineStack.push(instance); let expr: ExpressionRef; if (instance.is(CommonFlags.INSTANCE)) { let theOperands = assert(operands); @@ -6728,7 +6860,7 @@ export class Compiler extends DiagnosticEmitter { this.skippedAutoreleases.add(expr); } } - this.currentInlineFunctions.pop(); + inlineStack.pop(); return expr; } } @@ -6815,8 +6947,9 @@ export class Compiler extends DiagnosticEmitter { this.skippedAutoreleases.add(expr); } } + this.ensureBuiltinArgumentsLength(); return module.block(null, [ - module.global_set(this.ensureArgcVar(), module.i32(numArguments)), + module.global_set(BuiltinNames.argumentsLength, module.i32(numArguments)), expr ], this.currentType.toNativeType()); } @@ -6911,8 +7044,9 @@ export class Compiler extends DiagnosticEmitter { } var returnType = signature.returnType; + this.ensureBuiltinArgumentsLength(); var expr = module.block(null, [ - module.global_set(this.ensureArgcVar(), // might be calling a trampoline + module.global_set(BuiltinNames.argumentsLength, // might be calling a trampoline module.i32(numArguments) ), module.call_indirect( @@ -6936,7 +7070,7 @@ export class Compiler extends DiagnosticEmitter { return expr; } - compileCommaExpression( + private compileCommaExpression( expression: CommaExpression, contextualType: Type, constraints: Constraints @@ -6950,10 +7084,10 @@ export class Compiler extends DiagnosticEmitter { ); } exprs[numExpressions] = this.compileExpression(expressions[numExpressions], contextualType, constraints); - return this.module.block(null, exprs, this.currentType.toNativeType()); + return this.module.flatten(exprs, this.currentType.toNativeType()); } - compileElementAccessExpression( + private compileElementAccessExpression( expression: ElementAccessExpression, contextualType: Type, constraints: Constraints @@ -6984,7 +7118,7 @@ export class Compiler extends DiagnosticEmitter { return module.unreachable(); } - compileFunctionExpression( + private compileFunctionExpression( expression: FunctionExpression, contextualSignature: Signature | null, constraints: Constraints @@ -7107,12 +7241,9 @@ export class Compiler extends DiagnosticEmitter { // otherwise compile like a normal function } else { - instance = this.compileFunctionUsingTypeArguments( - prototype, - [], - contextualTypeArguments - ); + instance = this.resolver.resolveFunction(prototype, null, contextualTypeArguments); if (!instance) return this.module.unreachable(); + this.compileFunction(instance); this.currentType = instance.signature.type; } @@ -7133,12 +7264,7 @@ export class Compiler extends DiagnosticEmitter { } } - /** - * Compiles an identifier in the specified context. - * @param retainConstantType Retains the type of inlined constants if `true`, otherwise - * precomputes them according to context. - */ - compileIdentifierExpression( + private compileIdentifierExpression( expression: IdentifierExpression, contextualType: Type, constraints: Constraints @@ -7179,7 +7305,7 @@ export class Compiler extends DiagnosticEmitter { } case NodeKind.THIS: { if (actualFunction.is(CommonFlags.INSTANCE)) { - let thisLocal = assert(flow.lookupLocal(CommonSymbols.this_)); + let thisLocal = assert(flow.lookupLocal(CommonNames.this_)); let classInstance = assert(actualFunction.parent); assert(classInstance.kind == ElementKind.CLASS); let nativeSizeType = this.options.nativeSizeType; if (actualFunction.is(CommonFlags.CONSTRUCTOR)) { @@ -7203,12 +7329,12 @@ export class Compiler extends DiagnosticEmitter { ) ) ]; - this.makeFieldInitialization(classInstance, stmts); + this.makeFieldInitializationInConstructor(classInstance, stmts); stmts.push( module.local_get(thisLocal.index, nativeSizeType) ); this.currentType = thisLocal.type; - return module.block(null, stmts, nativeSizeType); + return module.flatten(stmts, nativeSizeType); } } // if not a constructor, `this` type can differ @@ -7235,8 +7361,8 @@ export class Compiler extends DiagnosticEmitter { ); } } - if (flow.is(FlowFlags.INLINE_CONTEXT)) { - let scopedThis = flow.lookupLocal(CommonSymbols.this_); + if (flow.isInline) { + let scopedThis = flow.lookupLocal(CommonNames.this_); if (scopedThis) { let scopedThisClass = assert(scopedThis.type.classReference); let base = scopedThisClass.base; @@ -7272,7 +7398,11 @@ export class Compiler extends DiagnosticEmitter { flow, this.currentParent || actualFunction ); - if (!target) return module.unreachable(); + if (!target) { + // make a guess to avoid assertions in calling code + if (this.currentType == Type.void) this.currentType = Type.i32; + return module.unreachable(); + } switch (target.kind) { case ElementKind.LOCAL: { @@ -7349,7 +7479,7 @@ export class Compiler extends DiagnosticEmitter { return this.module.unreachable(); } - compileInstanceOfExpression( + private compileInstanceOfExpression( expression: InstanceOfExpression, contextualType: Type, constraints: Constraints @@ -7481,7 +7611,7 @@ export class Compiler extends DiagnosticEmitter { ], NativeType.I32); } - compileLiteralExpression( + private compileLiteralExpression( expression: LiteralExpression, contextualType: Type, constraints: Constraints, @@ -7573,7 +7703,7 @@ export class Compiler extends DiagnosticEmitter { return module.unreachable(); } - compileStringLiteral( + private compileStringLiteral( expression: StringLiteralExpression, constraints: Constraints ): ExpressionRef { @@ -7587,7 +7717,7 @@ export class Compiler extends DiagnosticEmitter { return expr; } - compileArrayLiteral( + private compileArrayLiteral( elementType: Type, expressions: (Expression | null)[], constraints: Constraints, @@ -7658,13 +7788,13 @@ export class Compiler extends DiagnosticEmitter { flow.freeTempLocal(tempDataStart); let runtimeHeaderSize = program.runtimeHeaderSize; - let bufferSegment = this.ensureStaticArrayBuffer(elementType, values); + let bufferSegment = this.addStaticBuffer(elementType, values); let bufferAddress = i64_add(bufferSegment.offset, i64_new(runtimeHeaderSize)); // make both the buffer and array header static if assigned to a global. this can't be done // if inside of a function because each invocation must create a new array reference then. if (constraints & Constraints.PREFER_STATIC) { - let arraySegment = this.ensureStaticArrayHeader(elementType, bufferSegment); + let arraySegment = this.addStaticArrayHeader(elementType, bufferSegment); let arrayAddress = i64_add(arraySegment.offset, i64_new(runtimeHeaderSize)); this.currentType = arrayType; return program.options.isWasm64 @@ -7685,7 +7815,15 @@ export class Compiler extends DiagnosticEmitter { : module.i32(i64_low(bufferAddress)) ], reportNode); this.currentType = arrayType; - return this.makeAutorelease(this.makeRetain(expr), arrayType); + expr = this.makeRetain(expr); + if (arrayType.isManaged) { + if (!(constraints & Constraints.WILL_RETAIN)) { + expr = this.makeAutorelease(expr, arrayType); + } else { + this.skippedAutoreleases.add(expr); + } + } + return expr; } } @@ -7707,16 +7845,18 @@ export class Compiler extends DiagnosticEmitter { // tempThis = makeArray(length, alignLog2, classId, source = 0) stmts.push( module.local_set(tempThis.index, - this.makeCallDirect(program.allocArrayInstance, [ - module.i32(length), - program.options.isWasm64 - ? module.i64(elementType.alignLog2) - : module.i32(elementType.alignLog2), - module.i32(arrayInstance.id), - program.options.isWasm64 - ? module.i64(0) - : module.i32(0) - ], reportNode), + this.makeRetain( + this.makeCallDirect(program.allocArrayInstance, [ + module.i32(length), + program.options.isWasm64 + ? module.i64(elementType.alignLog2) + : module.i32(elementType.alignLog2), + module.i32(arrayInstance.id), + program.options.isWasm64 + ? module.i64(0) + : module.i32(0) + ], reportNode) + ) ) ); // tempData = tempThis.dataStart @@ -7755,10 +7895,18 @@ export class Compiler extends DiagnosticEmitter { flow.freeTempLocal(tempThis); flow.freeTempLocal(tempDataStart); this.currentType = arrayType; - return module.block(null, stmts, nativeArrayType); + var expr = module.flatten(stmts, nativeArrayType); + if (arrayType.isManaged) { + if (!(constraints & Constraints.WILL_RETAIN)) { + expr = this.makeAutorelease(expr, arrayType, this.currentFlow); + } else { + this.skippedAutoreleases.add(expr); + } + } + return expr; } - compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef { + private compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef { var module = this.module; // contextual type must be a class @@ -7844,10 +7992,10 @@ export class Compiler extends DiagnosticEmitter { exprs[exprs.length - 1] = module.local_get(tempLocal.index, this.options.nativeSizeType); this.currentType = classReference.type; - return module.block(null, exprs, this.options.nativeSizeType); + return module.flatten(exprs, this.options.nativeSizeType); } - compileNewExpression( + private compileNewExpression( expression: NewExpression, contextualType: Type, constraints: Constraints @@ -7907,9 +8055,9 @@ export class Compiler extends DiagnosticEmitter { if (baseClass) { let baseCtor = this.ensureConstructor(baseClass, reportNode); instance = new Function( - CommonSymbols.constructor, + CommonNames.constructor, new FunctionPrototype( - CommonSymbols.constructor, + CommonNames.constructor, classInstance, // declaration is important, i.e. to access optional parameter initializers (baseCtor.declaration).clone() @@ -7921,11 +8069,11 @@ export class Compiler extends DiagnosticEmitter { // otherwise make a default constructor } else { instance = new Function( - CommonSymbols.constructor, + CommonNames.constructor, new FunctionPrototype( - CommonSymbols.constructor, + CommonNames.constructor, classInstance, - this.program.makeNativeFunctionDeclaration(CommonSymbols.constructor, + this.program.makeNativeFunctionDeclaration(CommonNames.constructor, CommonFlags.INSTANCE | CommonFlags.CONSTRUCTOR ) ), @@ -7980,7 +8128,7 @@ export class Compiler extends DiagnosticEmitter { ) ); } - this.makeFieldInitialization(classInstance, stmts); + this.makeFieldInitializationInConstructor(classInstance, stmts); var body = this.performAutoreleasesWithValue(flow, module.local_get(0, nativeSizeType), classInstance.type, stmts); flow.freeScopedLocals(); this.currentFlow = previousFlow; @@ -8023,12 +8171,7 @@ export class Compiler extends DiagnosticEmitter { return expr; } - /** - * Compiles a property access in the specified context. - * @param retainConstantType Retains the type of inlined constants if `true`, otherwise - * precomputes them according to context. - */ - compilePropertyAccessExpression( + private compilePropertyAccessExpression( expression: PropertyAccessExpression, ctxType: Type, constraints: Constraints @@ -8070,7 +8213,18 @@ export class Compiler extends DiagnosticEmitter { } case ElementKind.FIELD: { // instance field assert((target).memoryOffset >= 0); - let thisExpr = this.compileExpression(assert(this.resolver.currentThisExpression), this.options.usizeType); + let thisExpression = assert(this.resolver.currentThisExpression); + let thisExpr = this.compileExpression(thisExpression, this.options.usizeType); + // FIXME + let thisType = this.currentType; + if (thisType.is(TypeFlags.NULLABLE)) { + if (!flow.isNonnull(thisExpr, thisType)) { + this.error( + DiagnosticCode.Object_is_possibly_null, + thisExpression.range + ); + } + } this.currentType = (target).type; return module.load( (target).type.byteSize, @@ -8098,18 +8252,11 @@ export class Compiler extends DiagnosticEmitter { let prototype = target; if (prototype.is(CommonFlags.STATIC)) { - let instance = this.compileFunctionUsingTypeArguments( - prototype, - [], - makeMap(), - expression, - ); - if (instance == null) { - return module.unreachable(); - } else { - this.currentType = instance.type; - return module.i32(this.ensureFunctionTableEntry(instance)); - } + let instance = this.resolver.resolveFunction(prototype, null); + if (!instance) return module.unreachable(); + if (!this.compileFunction(instance)) return module.unreachable(); + this.currentType = instance.type; + return module.i32(this.ensureFunctionTableEntry(instance)); } this.error( @@ -8126,7 +8273,7 @@ export class Compiler extends DiagnosticEmitter { return module.unreachable(); } - compileTernaryExpression( + private compileTernaryExpression( expression: TernaryExpression, ctxType: Type, constraints: Constraints @@ -8227,7 +8374,7 @@ export class Compiler extends DiagnosticEmitter { return expr; } - compileUnaryPostfixExpression( + private compileUnaryPostfixExpression( expression: UnaryPostfixExpression, contextualType: Type, constraints: Constraints @@ -8455,6 +8602,7 @@ export class Compiler extends DiagnosticEmitter { return this.makeAssignment( target, expr, + this.currentType, expression.operand, resolver.currentThisExpression, resolver.currentElementExpression, @@ -8466,6 +8614,7 @@ export class Compiler extends DiagnosticEmitter { var setValue = this.makeAssignment( target, expr, // includes a tee of getValue to tempLocal + this.currentType, expression.operand, resolver.currentThisExpression, resolver.currentElementExpression, @@ -8482,7 +8631,7 @@ export class Compiler extends DiagnosticEmitter { ], nativeType); // result of 'x++' / 'x--' might overflow } - compileUnaryPrefixExpression( + private compileUnaryPrefixExpression( expression: UnaryPrefixExpression, contextualType: Type, constraints: Constraints @@ -8839,6 +8988,7 @@ export class Compiler extends DiagnosticEmitter { return this.makeAssignment( target, expr, + this.currentType, expression.operand, resolver.currentThisExpression, resolver.currentElementExpression, @@ -8846,7 +8996,7 @@ export class Compiler extends DiagnosticEmitter { ); } - compileTypeof( + private compileTypeof( expression: UnaryPrefixExpression, contextualType: Type, constraints: Constraints @@ -9158,19 +9308,21 @@ export class Compiler extends DiagnosticEmitter { ], options.nativeSizeType); } - /** Makes the initializers for a class's fields. */ - makeFieldInitialization( + /** Makes the initializers for a class's fields within the constructor. */ + makeFieldInitializationInConstructor( + /** Class being initialized. */ classInstance: Class, + /** Statements to append to also being returned. Created if omitted. */ stmts: ExpressionRef[] = [] ): ExpressionRef[] { var members = classInstance.members; - if (!members) return []; + if (!members) return stmts; var module = this.module; var flow = this.currentFlow; - var isInline = flow.is(FlowFlags.INLINE_CONTEXT); + var isInline = flow.isInline; var thisLocalIndex = isInline - ? assert(flow.lookupLocal(CommonSymbols.this_)).index + ? assert(flow.lookupLocal(CommonNames.this_)).index : 0; var nativeSizeType = this.options.nativeSizeType; @@ -9180,21 +9332,17 @@ export class Compiler extends DiagnosticEmitter { member.parent != classInstance // inherited field ) continue; - let field = member; assert(!field.isAny(CommonFlags.CONST)); + let field = member; + assert(!field.isAny(CommonFlags.CONST)); let fieldType = field.type; let nativeFieldType = fieldType.toNativeType(); let fieldPrototype = field.prototype; let initializerNode = fieldPrototype.initializerNode; let parameterIndex = fieldPrototype.parameterIndex; let initExpr: ExpressionRef; - if (initializerNode) { // use initializer - initExpr = this.compileExpression(initializerNode, fieldType, // reports - Constraints.CONV_IMPLICIT | Constraints.WILL_RETAIN - ); - if (fieldType.isManaged && !this.skippedAutoreleases.has(initExpr)) { - initExpr = this.makeRetain(initExpr); - } - } else if (parameterIndex >= 0) { // initialized via parameter (here: a local) + + // if declared as a constructor parameter, use its value + if (parameterIndex >= 0) { initExpr = module.local_get( isInline ? assert(flow.lookupLocal(field.name)).index @@ -9202,9 +9350,21 @@ export class Compiler extends DiagnosticEmitter { nativeFieldType ); if (fieldType.isManaged) initExpr = this.makeRetain(initExpr); - } else { // initialize with zero + + // fall back to use initializer if present + } else if (initializerNode) { + initExpr = this.compileExpression(initializerNode, fieldType, + Constraints.CONV_IMPLICIT | Constraints.WILL_RETAIN + ); + if (fieldType.isManaged && !this.skippedAutoreleases.has(initExpr)) { + initExpr = this.makeRetain(initExpr); + } + + // otherwise initialize with zero + } else { initExpr = this.makeZero(fieldType); } + stmts.push( module.store(fieldType.byteSize, module.local_get(thisLocalIndex, nativeSizeType), @@ -9216,44 +9376,6 @@ export class Compiler extends DiagnosticEmitter { } return stmts; } - - makeInstanceOfClass( - expr: ExpressionRef, - classInstance: Class - ): ExpressionRef { - var module = this.module; - var flow = this.currentFlow; - var idTemp = flow.getTempLocal(Type.i32); - var idExpr = module.load(4, false, - module.binary(BinaryOp.SubI32, - expr, - module.i32(this.program.runtimeHeaderSize) - ), - NativeType.I32 - ); - var label = "instanceof_" + classInstance.name + "|" + flow.pushBreakLabel(); - var conditions: ExpressionRef[] = []; - conditions.push( - module.drop( // br_if returns the value too - module.br(label, - module.binary(BinaryOp.EqI32, // classId == class.id - module.local_tee(idTemp.index, idExpr), - module.i32(classInstance.id) - ), - module.i32(1) // ? true - ) - ) - ); - // TODO: insert conditions for all possible subclasses (i.e. cat is also animal) - // TODO: simplify if there are none - conditions.push( - module.i32(0) // : false - ); - flow.freeTempLocal(idTemp); - flow.popBreakLabel(); - return module.block(label, conditions, NativeType.I32); - } - } // helpers @@ -9316,23 +9438,13 @@ function mangleImportName( var mangleImportName_moduleName: string; var mangleImportName_elementName: string; -/** Flattens a series of expressions to a nop, a single statement or a block depending on statement count. */ -export function flatten(module: Module, stmts: ExpressionRef[], type: NativeType): ExpressionRef { - var length = stmts.length; - if (length == 0) return module.nop(); // usually filtered out again - if (length == 1) { - let single = stmts[0]; - switch (getExpressionId(single)) { - case ExpressionId.Return: - case ExpressionId.Throw: - case ExpressionId.Unreachable: { - // type does no matter, terminates anyway - return single; - } - } - let singleType = getExpressionType(single); - assert(singleType == NativeType.Unreachable || singleType == type); - return single; +/** Evaluates the kind of a boolean condition from its expression. */ +function evaluateConditionKind(expr: ExpressionRef): ConditionKind { + assert(getExpressionType(expr) == NativeType.I32 || getExpressionType(expr) == NativeType.Unreachable); + if (getExpressionId(expr) == ExpressionId.Const) { + return getConstValueI32(expr) + ? ConditionKind.TRUE + : ConditionKind.FALSE; } - return module.block(null, stmts, type); + return ConditionKind.UNKNOWN; } diff --git a/src/decompiler.ts b/src/decompiler.ts deleted file mode 100644 index 9e9d48a76a..0000000000 --- a/src/decompiler.ts +++ /dev/null @@ -1,899 +0,0 @@ -/** - * A decompiler that generates low-level AssemblyScript from WebAssembly binaries. - * @module decompiler - *//***/ - -import { - Module, - NativeType, - ExpressionId, - UnaryOp, - BinaryOp, - HostOp, - FunctionRef, - ExpressionRef, - Index, - getFunctionName, - getFunctionBody, - getFunctionParams, - getFunctionResults, - getExpressionId, - getExpressionType, - getBlockName, - getBlockChildCount, - getBlockChild, - getIfCondition, - getIfTrue, - getIfFalse, - getLoopName, - getLoopBody, - getBreakName, - getBreakCondition, - getLocalGetIndex, - getLocalSetIndex, - getLocalSetValue, - getLoadOffset, - getLoadPtr, - getStoreOffset, - getStorePtr, - getStoreValue, - getConstValueI32, - getConstValueI64Low, - getConstValueI64High, - getConstValueF32, - getConstValueF64, - getUnaryOp, - getUnaryValue, - getBinaryOp, - getBinaryLeft, - getBinaryRight, - getSelectThen, - getSelectElse, - getSelectCondition, - getDropValue, - getReturnValue, - getHostOp, - getHostOperand, - expandType -} from "./module"; - -// TODO :-) - -export class Decompiler { - - static decompile(module: Module): string { - var decompiler = new Decompiler(); - decompiler.decompile(module); - return decompiler.finish(); - } - - text: string[] = []; - functionId: i32 = 0; - - constructor() { } - - /** Decompiles a module to an AST that can then be serialized. */ - decompile(module: Module): void { - throw new Error("not implemented"); - } - - decompileFunction(func: FunctionRef): void { - var name = getFunctionName(func) || "$" + this.functionId.toString(10); - var body = getFunctionBody(func); - this.push("function "); - this.push(name); - this.push("("); - var params = expandType(getFunctionParams(func)); - for (let i = 0, k = params.length; i < k; ++i) { - if (i > 0) this.push(", "); - this.push("$"); - this.push(i.toString(10)); - this.push(": "); - this.push(nativeTypeToType(params[i])); - } - this.push("): "); - var results = expandType(getFunctionResults(func)); - switch (results.length) { - case 0: { - this.push("void"); - break; - } - default: assert(false); // TODO: multi-value - case 1: { - this.push(nativeTypeToType(results[0])); - break; - } - } - this.push(" "); - if (getExpressionId(body) != ExpressionId.Block) { - this.push("{\n"); - } - this.decompileExpression(body); - if (getExpressionId(body) != ExpressionId.Block) { - this.push("\n}\n"); - } - ++this.functionId; - } - - decompileExpression(expr: ExpressionRef): void { - var id = getExpressionId(expr); - var type = getExpressionType(expr); - - var nested: ExpressionRef; - var string: string | null; - var i: Index, k: Index; - - switch (id) { - case ExpressionId.Block: { // TODO: magic - if ((string = getBlockName(expr)) != null) { - this.push(string); - this.push(": "); - } - this.push("{\n"); - k = getBlockChildCount(expr); - for (i = 0; i < k; ++i) { - this.decompileExpression(getBlockChild(expr, i)); - } - this.push("}\n"); - return; - } - case ExpressionId.If: { - if (type == NativeType.None) { - this.push("if ("); - this.decompileExpression(getIfCondition(expr)); - this.push(") "); - this.decompileExpression(getIfTrue(expr)); - if (nested = getIfFalse(expr)) { - this.push(" else "); - this.decompileExpression(nested); - } - } else { - this.decompileExpression(getIfCondition(expr)); - this.push(" ? "); - this.decompileExpression(getIfTrue(expr)); - this.push(" : "); - this.decompileExpression(getIfFalse(expr)); - } - return; - } - case ExpressionId.Loop: { - if ((string = getLoopName(expr)) != null) { - this.push(string); - this.push(": "); - } - this.push("do "); - this.decompileExpression(getLoopBody(expr)); - this.push("while (0);\n"); - } - case ExpressionId.Break: { - if (nested = getBreakCondition(expr)) { - this.push("if ("); - this.decompileExpression(nested); - this.push(") "); - } - if ((string = getBreakName(expr)) != null) { - this.push("break "); - this.push(string); - this.push(";\n"); - } else { - this.push("break;\n"); - } - return; - } - case ExpressionId.Switch: - case ExpressionId.Call: - case ExpressionId.CallIndirect: { - throw new Error("not implemented"); - } - case ExpressionId.LocalGet: { - this.push("$"); - this.push(getLocalGetIndex(expr).toString(10)); - return; - } - case ExpressionId.LocalSet: { - this.push("$"); - this.push(getLocalSetIndex(expr).toString(10)); - this.push(" = "); - this.decompileExpression(getLocalSetValue(expr)); - return; - } - case ExpressionId.GlobalGet: - case ExpressionId.GlobalSet: { - throw new Error("not implemented"); - } - case ExpressionId.Load: { - this.push("load<"); - this.push(nativeTypeToType(type)); - this.push(">("); - this.push(getLoadOffset(expr).toString(10)); - this.push(" + "); - this.decompileExpression(getLoadPtr(expr)); - this.push(")"); - return; - } - case ExpressionId.Store: { - this.push("store<"); - this.push(nativeTypeToType(type)); - this.push(">("); - this.push(getStoreOffset(expr).toString(10)); - this.push(" + "); - this.decompileExpression(getStorePtr(expr)); - this.push(", "); - this.decompileExpression(getStoreValue(expr)); - this.push(")"); - return; - } - case ExpressionId.Const: { - switch (type) { - case NativeType.I32: { - this.push(getConstValueI32(expr).toString(10)); - return; - } - case NativeType.I64: { - this.push( - i64_to_string( - i64_new( - getConstValueI64Low(expr), - getConstValueI64High(expr) - ) - ) - ); - return; - } - case NativeType.F32: { - this.push(getConstValueF32(expr).toString(10)); - return; - } - case NativeType.F64: { - this.push(getConstValueF64(expr).toString(10)); - return; - } - } - break; - } - case ExpressionId.Unary: { - switch (getUnaryOp(expr)) { - case UnaryOp.ClzI32: { - this.push("clz("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.CtzI32: { - this.push("ctz("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.PopcntI32: { - this.push("popcnt("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.NegF32: - case UnaryOp.NegF64: { - this.push("-"); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.AbsF32: { - this.push("abs("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.CeilF32: { - this.push("ceil("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.FloorF32: { - this.push("floor("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.TruncF32: { - this.push("trunc("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.NearestF32: { - this.push("nearest("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.SqrtF32: { - this.push("sqrt("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.EqzI32: - case UnaryOp.EqzI64: { - this.push("!"); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ClzI64: { - this.push("clz("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.CtzI64: { - this.push("ctz("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.PopcntI64: { - this.push("popcnt("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.AbsF64: { - this.push("abs("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.CeilF64: { - this.push("ceil("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.FloorF64: { - this.push("floor("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.TruncF64: { - this.push("trunc("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.NearestF64: { - this.push("nearest("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.SqrtF64: { - this.push("sqrt("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.ExtendI32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ExtendU32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.WrapI64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.TruncF32ToI32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.TruncF32ToI64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.TruncF32ToU32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.TruncF32ToU64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.TruncF64ToI32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.TruncF64ToI64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.TruncF64ToU32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.TruncF64ToU64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ReinterpretF32: { - this.push("reinterpret("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.ReinterpretF64: { - this.push("reinterpret("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.ConvertI32ToF32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ConvertI32ToF64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ConvertU32ToF32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ConvertU32ToF64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ConvertI64ToF32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ConvertI64ToF64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ConvertU64ToF32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ConvertU64ToF64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.PromoteF32: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.DemoteF64: { - this.push(""); - this.decompileExpression(getUnaryValue(expr)); - return; - } - case UnaryOp.ReinterpretI32: { - this.push("reinterpret("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - case UnaryOp.ReinterpretI64: { - this.push("reinterpret("); - this.decompileExpression(getUnaryValue(expr)); - this.push(")"); - return; - } - } - break; - } - case ExpressionId.Binary: { // TODO: precedence - switch (getBinaryOp(expr)) { - case BinaryOp.AddI32: - case BinaryOp.AddI64: - case BinaryOp.AddF32: - case BinaryOp.AddF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" + "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.SubI32: - case BinaryOp.SubI64: - case BinaryOp.SubF32: - case BinaryOp.SubF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" - "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.MulI32: - case BinaryOp.MulI64: - case BinaryOp.MulF32: - case BinaryOp.MulF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" * "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.DivI32: - case BinaryOp.DivI64: - case BinaryOp.DivF32: - case BinaryOp.DivF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" / "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.DivU32: { - this.push("("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" / "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.RemI32: - case BinaryOp.RemI64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" % "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.RemU32: { - this.push("("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" / "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.AndI32: - case BinaryOp.AndI64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" & "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.OrI32: - case BinaryOp.OrI64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" | "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.XorI32: - case BinaryOp.XorI64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" ^ "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.ShlI32: - case BinaryOp.ShlI64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" << "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.ShrU32: - case BinaryOp.ShrU64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" >>> "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.ShrI32: - case BinaryOp.ShrI64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" >> "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.RotlI32: { - this.push("rotl("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.RotrI32: { - this.push("rotr("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.EqI32: - case BinaryOp.EqI64: - case BinaryOp.EqF32: - case BinaryOp.EqF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" == "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.NeI32: - case BinaryOp.NeI64: - case BinaryOp.NeF32: - case BinaryOp.NeF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" != "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.LtI32: - case BinaryOp.LtI64: - case BinaryOp.LtF32: - case BinaryOp.LtF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" < "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.LtU32: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" < "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.LeI32: - case BinaryOp.LeI64: - case BinaryOp.LeF32: - case BinaryOp.LeF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" <= "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.LeU32: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" <= "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.GtI32: - case BinaryOp.GtI64: - case BinaryOp.GtF32: - case BinaryOp.GtF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" > "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.GtU32: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" > "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.GeI32: - case BinaryOp.GeI64: - case BinaryOp.GeF32: - case BinaryOp.GeF64: { - this.decompileExpression(getBinaryLeft(expr)); - this.push(" >= "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.GeU32: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" >= "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.DivU64: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" / "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.RemU64: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" % "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.RotlI64: { - this.push("rotl("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.RotrI64: { - this.push("rotr("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.LtU64: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" < "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.LeU64: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" <= "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.GtU64: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" > "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.GeU64: { - this.push(""); - this.decompileExpression(getBinaryLeft(expr)); - this.push(" >= "); - this.decompileExpression(getBinaryRight(expr)); - return; - } - case BinaryOp.CopysignF32: { - this.push("copysign("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.MinF32: { - this.push("min("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.MaxF32: { - this.push("max("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.CopysignF64: { - this.push("copysign("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.MinF64: { - this.push("min("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - case BinaryOp.MaxF64: { - this.push("max("); - this.decompileExpression(getBinaryLeft(expr)); - this.push(", "); - this.decompileExpression(getBinaryRight(expr)); - this.push(")"); - return; - } - } - return; - } - case ExpressionId.Select: { - this.push("select<"); - this.push(nativeTypeToType(type)); - this.push(">("); - this.decompileExpression(getSelectThen(expr)); - this.push(", "); - this.decompileExpression(getSelectElse(expr)); - this.push(", "); - this.decompileExpression(getSelectCondition(expr)); - this.push(")"); - return; - } - case ExpressionId.Drop: { - this.decompileExpression(getDropValue(expr)); - this.push(";\n"); - return; - } - case ExpressionId.Return: { - if (nested = getReturnValue(expr)) { - this.push("return "); - this.decompileExpression(nested); - this.push(";\n"); - } else { - this.push("return;\n"); - } - return; - } - case ExpressionId.Host: { - switch (getHostOp(expr)) { - case HostOp.MemorySize: { - this.push("memory.size()"); - return; - } - case HostOp.MemoryGrow: { - this.push("memory.grow("); - this.decompileExpression(getHostOperand(expr, 0)); - this.push(")"); - return; - } - } - break; - } - case ExpressionId.Nop: { - this.push(";\n"); - return; - } - case ExpressionId.Unreachable: { - this.push("unreachable()"); - return; - } - case ExpressionId.AtomicCmpxchg: - case ExpressionId.AtomicRMW: - case ExpressionId.AtomicWait: - case ExpressionId.AtomicNotify: - } - throw new Error("not implemented"); - } - - private push(text: string): void { - // mostly here so we can add debugging if necessary - this.text.push(text); - } - - finish(): string { - var ret = this.text.join(""); - this.text = []; - return ret; - } -} - -function nativeTypeToType(type: NativeType): string { - switch (type) { - case NativeType.None: return "void"; - case NativeType.I32: return "i32"; - case NativeType.I64: return "i64"; - case NativeType.F32: return "f32"; - case NativeType.F64: return "f64"; - case NativeType.V128: return "v128"; - case NativeType.Unreachable: throw new Error("unreachable type"); - default: throw new Error("unexpected type"); - } -} diff --git a/src/diagnostics.ts b/src/diagnostics.ts index 356fd1d0ab..5fd4a5f47b 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -261,6 +261,8 @@ export abstract class DiagnosticEmitter { /** Diagnostic messages emitted so far. */ diagnostics: DiagnosticMessage[]; + /** Diagnostic messages already seen, by range. */ + private seen: Map> = new Map(); /** Initializes this diagnostic emitter. */ protected constructor(diagnostics: DiagnosticMessage[] | null = null) { @@ -277,6 +279,19 @@ export abstract class DiagnosticEmitter { arg1: string | null = null, arg2: string | null = null ): void { + // It is possible that the same diagnostic is emitted twice, for example + // when compiling generics with different types or when recompiling a loop + // because our initial assumptions didn't hold. Deduplicate these. + var seen = this.seen; + if (seen.has(range)) { + let codes = seen.get(range)!; + if (codes.has(code)) return; + codes.add(code); + } else { + let codes = new Set(); + codes.add(code); + seen.set(range, codes); + } var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range); if (relatedRange) message.relatedRange = relatedRange; this.diagnostics.push(message); diff --git a/src/flow.ts b/src/flow.ts index 355722182c..061c1aacca 100644 --- a/src/flow.ts +++ b/src/flow.ts @@ -75,24 +75,24 @@ export const enum FlowFlags { // categorical - /** This flow returns. */ + /** This flow always returns. */ RETURNS = 1 << 0, - /** This flow returns a wrapped value. */ + /** This flow always returns a wrapped value. */ RETURNS_WRAPPED = 1 << 1, - /** This flow returns a non-null value. */ + /** This flow always returns a non-null value. */ RETURNS_NONNULL = 1 << 2, - /** This flow throws. */ + /** This flow always throws. */ THROWS = 1 << 3, - /** This flow breaks. */ + /** This flow always breaks. */ BREAKS = 1 << 4, - /** This flow continues. */ + /** This flow always continues. */ CONTINUES = 1 << 5, - /** This flow allocates. Constructors only. */ + /** This flow always allocates. Constructors only. */ ALLOCATES = 1 << 6, - /** This flow calls super. Constructors only. */ + /** This flow always calls super. Constructors only. */ CALLS_SUPER = 1 << 7, - /** This flow terminates (returns, throws or continues). */ - TERMINATES = 1 << 8, + /** This flow always terminates (returns, throws or continues). */ + TERMINATES = 1 << 8, // Note that this doesn't cover BREAKS, which is separate // conditional @@ -100,21 +100,17 @@ export const enum FlowFlags { CONDITIONALLY_RETURNS = 1 << 9, /** This flow conditionally throws in a child flow. */ CONDITIONALLY_THROWS = 1 << 10, - /** This flow conditionally terminates in a child flow. */ - CONDITIONALLY_TERMINATES = 1 << 11, /** This flow conditionally breaks in a child flow. */ - CONDITIONALLY_BREAKS = 1 << 12, + CONDITIONALLY_BREAKS = 1 << 11, /** This flow conditionally continues in a child flow. */ - CONDITIONALLY_CONTINUES = 1 << 13, + CONDITIONALLY_CONTINUES = 1 << 12, /** This flow conditionally allocates in a child flow. Constructors only. */ - CONDITIONALLY_ALLOCATES = 1 << 14, + CONDITIONALLY_ALLOCATES = 1 << 13, - // special + // other - /** This is an inlining flow. */ - INLINE_CONTEXT = 1 << 15, /** This is a flow with explicitly disabled bounds checking. */ - UNCHECKED_CONTEXT = 1 << 16, + UNCHECKED_CONTEXT = 1 << 15, // masks @@ -144,80 +140,31 @@ export enum LocalFlags { /** Local is constant. */ CONSTANT = 1 << 0, - /** Local is a function parameter. */ - PARAMETER = 1 << 1, /** Local is properly wrapped. Relevant for small integers. */ - WRAPPED = 1 << 2, + WRAPPED = 1 << 1, /** Local is non-null. */ - NONNULL = 1 << 3, - /** Local is read from. */ - READFROM = 1 << 4, - /** Local is written to. */ - WRITTENTO = 1 << 5, + NONNULL = 1 << 2, + /** Local is initialized. */ + INITIALIZED = 1 << 3, /** Local is retained. */ - RETAINED = 1 << 6, + RETAINED = 1 << 4, - /** Local is conditionally read from. */ - CONDITIONALLY_READFROM = 1 << 7, - /** Local is conditionally written to. */ - CONDITIONALLY_WRITTENTO = 1 << 8, /** Local must be conditionally retained. */ - CONDITIONALLY_RETAINED = 1 << 9, - /** Local is conditionally returned. */ - CONDITIONALLY_RETURNED = 1 << 10, - - /** Any categorical flag. */ - ANY_CATEGORICAL = CONSTANT - | PARAMETER - | WRAPPED - | NONNULL - | READFROM - | WRITTENTO - | RETAINED, - - /** Any conditional flag. */ - ANY_CONDITIONAL = RETAINED - | CONDITIONALLY_READFROM - | CONDITIONALLY_WRITTENTO - | CONDITIONALLY_RETAINED - | CONDITIONALLY_RETURNED, - - /** Any written to flag. */ - ANY_WRITTENTO = WRITTENTO - | CONDITIONALLY_WRITTENTO, + CONDITIONALLY_RETAINED = 1 << 5, /** Any retained flag. */ ANY_RETAINED = RETAINED | CONDITIONALLY_RETAINED } -export namespace LocalFlags { - export function join(left: LocalFlags, right: LocalFlags): LocalFlags { - return ((left & LocalFlags.ANY_CATEGORICAL) & (right & LocalFlags.ANY_CATEGORICAL)) - | (left & LocalFlags.ANY_CONDITIONAL) | (right & LocalFlags.ANY_CONDITIONAL); - } -} - -/** Flags indicating the current state of a field. */ -export enum FieldFlags { - /** No specific conditions. */ - NONE = 0, - - /** Field is initialized. Relevant in constructors. */ - INITIALIZED = 1 << 0, - /** Field is conditionally initialized. Relevant in constructors. */ - CONDITIONALLY_INITIALIZED = 1 << 1, - - /** Any categorical flag. */ - ANY_CATEGORICAL = INITIALIZED, - /** Any conditional flag. */ - ANY_CONDITIONAL = CONDITIONALLY_INITIALIZED -} -export namespace FieldFlags { - export function join(left: FieldFlags, right: FieldFlags): FieldFlags { - return ((left & FieldFlags.ANY_CATEGORICAL) & (right & FieldFlags.ANY_CATEGORICAL)) - | (left & FieldFlags.ANY_CONDITIONAL) | (right & FieldFlags.ANY_CONDITIONAL); - } +/** Condition kinds. */ +export const enum ConditionKind { + /** Outcome of the condition is unknown */ + UNKNOWN, + /** Condition is always true. */ + TRUE, + /** Condition is always false. */ + FALSE } /** A control flow evaluator. */ @@ -241,8 +188,6 @@ export class Flow { scopedLocals: Map | null = null; /** Local flags. */ localFlags: LocalFlags[]; - /** Field flags. Relevant in constructors. */ - fieldFlags: Map | null = null; /** Function being inlined, when inlining. */ inlineFunction: Function | null; /** The label we break to when encountering a return statement, when inlining. */ @@ -267,7 +212,6 @@ export class Flow { /** Creates an inline flow within `parentFunction`. */ static createInline(parentFunction: Function, inlineFunction: Function): Flow { var flow = Flow.create(parentFunction); - flow.set(FlowFlags.INLINE_CONTEXT); flow.inlineFunction = inlineFunction; flow.inlineReturnLabel = inlineFunction.internalName + "|inlined." + (inlineFunction.nextInlineId++).toString(10); flow.returnType = inlineFunction.signature.returnType; @@ -277,6 +221,11 @@ export class Flow { private constructor() { } + /** Tests if this is an inline flow. */ + get isInline(): bool { + return this.inlineFunction !== null; + } + /** Gets the actual function being compiled, The inlined function when inlining, otherwise the parent function. */ get actualFunction(): Function { return this.inlineFunction || this.parentFunction; @@ -292,13 +241,22 @@ export class Flow { unset(flag: FlowFlags): void { this.flags &= ~flag; } /** Forks this flow to a child flow. */ - fork(): Flow { + fork(resetBreakContext: bool = false): Flow { var branch = new Flow(); branch.parent = this; - branch.flags = this.flags; branch.parentFunction = this.parentFunction; - branch.continueLabel = this.continueLabel; - branch.breakLabel = this.breakLabel; + if (resetBreakContext) { + branch.flags = this.flags & ~( + FlowFlags.BREAKS | + FlowFlags.CONDITIONALLY_BREAKS | + FlowFlags.CONTINUES | + FlowFlags.CONDITIONALLY_CONTINUES + ); + } else { + branch.flags = this.flags; + branch.continueLabel = this.continueLabel; + branch.breakLabel = this.breakLabel; + } branch.returnType = this.returnType; branch.contextualTypeArguments = this.contextualTypeArguments; branch.localFlags = this.localFlags.slice(); @@ -547,76 +505,281 @@ export class Flow { } } - /** Inherits flags and local wrap states from the specified flow (e.g. blocks). */ + /** Inherits flags of another flow into this one, i.e. a finished inner block. */ inherit(other: Flow): void { - this.flags |= other.flags & (FlowFlags.ANY_CATEGORICAL | FlowFlags.ANY_CONDITIONAL); - this.localFlags = other.localFlags; // no need to slice because other flow is finished + assert(other.parentFunction == this.parentFunction); + assert(other.parent == this); // currently the case, but might change + var otherFlags = other.flags; + + // respective inner flags are irrelevant if contexts differ + if (this.breakLabel != other.breakLabel) { + if (otherFlags & (FlowFlags.BREAKS | FlowFlags.CONDITIONALLY_BREAKS)) { + otherFlags &= ~FlowFlags.TERMINATES; + } + otherFlags &= ~(FlowFlags.BREAKS | FlowFlags.CONDITIONALLY_BREAKS); + } + if (this.continueLabel != other.continueLabel) { + otherFlags &= ~(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES); + } + + this.flags = this.flags | otherFlags; // what happens before is still true + this.localFlags = other.localFlags; } - /** Inherits categorical flags as conditional flags from the specified flow (e.g. then without else). */ - inheritConditional(other: Flow): void { - this.set(other.flags & FlowFlags.ANY_CONDITIONAL); - if (other.is(FlowFlags.RETURNS)) { - this.set(FlowFlags.CONDITIONALLY_RETURNS); + /** Inherits flags of a conditional branch joining again with this one, i.e. then without else. */ + inheritBranch(other: Flow, conditionKind: ConditionKind = ConditionKind.UNKNOWN): void { + assert(other.parentFunction == this.parentFunction); + switch (conditionKind) { + case ConditionKind.TRUE: this.inherit(other); // always executes + case ConditionKind.FALSE: return; // never executes + } + + // Note that flags in `this` flow have already happened. For instance, + // a return cannot be undone no matter what'd happen in subsequent branches, + // but an allocation, which doesn't terminate, can become conditional. Not + // all flags have a corresponding conditional flag that's tracked. + + var thisFlags = this.flags; + var otherFlags = other.flags; + var newFlags = FlowFlags.NONE; + + if (thisFlags & FlowFlags.RETURNS) { // nothing can change that + newFlags |= FlowFlags.RETURNS; + } else if (otherFlags & FlowFlags.RETURNS) { + newFlags |= FlowFlags.CONDITIONALLY_RETURNS; + } else { + newFlags |= (thisFlags | otherFlags) & FlowFlags.CONDITIONALLY_RETURNS; } - if (other.is(FlowFlags.THROWS)) { - this.set(FlowFlags.CONDITIONALLY_THROWS); + + // must be the case in both + newFlags |= thisFlags & otherFlags & FlowFlags.RETURNS_WRAPPED; + newFlags |= thisFlags & otherFlags & FlowFlags.RETURNS_NONNULL; + + if (thisFlags & FlowFlags.THROWS) { // nothing can change that + newFlags |= FlowFlags.THROWS; + } else if (otherFlags & FlowFlags.THROWS) { + newFlags |= FlowFlags.CONDITIONALLY_THROWS; + } else { + newFlags |= (thisFlags | otherFlags) & FlowFlags.CONDITIONALLY_THROWS; } - if (other.is(FlowFlags.BREAKS) && other.breakLabel == this.breakLabel) { - this.set(FlowFlags.CONDITIONALLY_BREAKS); + + if (thisFlags & FlowFlags.BREAKS) { // nothing can change that + newFlags |= FlowFlags.BREAKS; + } else if (other.breakLabel == this.breakLabel) { + if (otherFlags & FlowFlags.BREAKS) { + newFlags |= FlowFlags.CONDITIONALLY_BREAKS; + } else { + newFlags |= (thisFlags | otherFlags) & FlowFlags.CONDITIONALLY_BREAKS; + } + } else { + newFlags |= thisFlags & FlowFlags.CONDITIONALLY_BREAKS; + } + + if (thisFlags & FlowFlags.CONTINUES) { // nothing can change that + newFlags |= FlowFlags.CONTINUES; + } else if (other.continueLabel === this.continueLabel) { + if (otherFlags & FlowFlags.CONTINUES) { + newFlags |= FlowFlags.CONDITIONALLY_CONTINUES; + } else { + newFlags |= (thisFlags | otherFlags) & FlowFlags.CONDITIONALLY_CONTINUES; + } + } else { + newFlags |= thisFlags & FlowFlags.CONDITIONALLY_CONTINUES; } - if (other.is(FlowFlags.CONTINUES) && other.continueLabel == this.continueLabel) { - this.set(FlowFlags.CONDITIONALLY_CONTINUES); + + if (thisFlags & FlowFlags.ALLOCATES) { // can become conditional + if (otherFlags & FlowFlags.ALLOCATES) { + newFlags |= FlowFlags.ALLOCATES; + } else { + newFlags |= FlowFlags.CONDITIONALLY_ALLOCATES; + } + } else if (otherFlags & FlowFlags.ALLOCATES) { + newFlags |= FlowFlags.CONDITIONALLY_ALLOCATES; } - if (other.is(FlowFlags.ALLOCATES)) { - this.set(FlowFlags.CONDITIONALLY_ALLOCATES); + + // must be the case in both + newFlags |= thisFlags & otherFlags & FlowFlags.CALLS_SUPER; + + if (thisFlags & FlowFlags.TERMINATES) { // nothing can change that + newFlags |= FlowFlags.TERMINATES; } - var localFlags = other.localFlags; - for (let i = 0, k = localFlags.length; i < k; ++i) { - let flags = localFlags[i]; - this.setLocalFlag(i, flags & LocalFlags.ANY_CONDITIONAL); - if (flags & LocalFlags.RETAINED) this.setLocalFlag(i, LocalFlags.CONDITIONALLY_RETAINED); - if (flags & LocalFlags.READFROM) this.setLocalFlag(i, LocalFlags.CONDITIONALLY_READFROM); - if (flags & LocalFlags.WRITTENTO) this.setLocalFlag(i, LocalFlags.CONDITIONALLY_WRITTENTO); + + this.flags = newFlags | (thisFlags & FlowFlags.UNCHECKED_CONTEXT); + + var thisLocalFlags = this.localFlags; + var numThisLocalFlags = thisLocalFlags.length; + var otherLocalFlags = other.localFlags; + var numOtherLocalFlags = otherLocalFlags.length; + var maxLocalFlags = max(numThisLocalFlags, numOtherLocalFlags); + for (let i = 0; i < maxLocalFlags; ++i) { + let thisFlags = i < numThisLocalFlags ? thisLocalFlags[i] : 0; + let otherFlags = i < numOtherLocalFlags ? otherLocalFlags[i] : 0; + let newFlags = thisFlags & otherFlags & ( + LocalFlags.CONSTANT | + LocalFlags.WRAPPED | + LocalFlags.NONNULL | + LocalFlags.INITIALIZED + ); + if (thisFlags & LocalFlags.RETAINED) { + if (otherFlags & LocalFlags.RETAINED) { + newFlags |= LocalFlags.RETAINED; + } else { + newFlags |= LocalFlags.CONDITIONALLY_RETAINED; + } + } else if (otherFlags & LocalFlags.RETAINED) { + newFlags |= LocalFlags.CONDITIONALLY_RETAINED; + } else { + newFlags |= (thisFlags | otherFlags) & LocalFlags.CONDITIONALLY_RETAINED; + } + thisLocalFlags[i] = newFlags; } } - /** Inherits mutual flags and local wrap states from the specified flows (e.g. then with else). */ + /** Inherits mutual flags of two alternate branches becoming this one, i.e. then with else. */ inheritMutual(left: Flow, right: Flow): void { - // categorical flags set in both arms - this.set(left.flags & right.flags & FlowFlags.ANY_CATEGORICAL); + assert(left.parentFunction == right.parentFunction); + assert(left.parentFunction == this.parentFunction); + // This differs from the previous method in that no flags are guaranteed + // to happen unless it is the case in both flows. + + var leftFlags = left.flags; + var rightFlags = right.flags; + var newFlags = FlowFlags.NONE; + + if (leftFlags & FlowFlags.RETURNS) { + if (rightFlags & FlowFlags.RETURNS) { + newFlags |= FlowFlags.RETURNS; + } else { + newFlags |= FlowFlags.CONDITIONALLY_RETURNS; + } + } else if (rightFlags & FlowFlags.RETURNS) { + newFlags |= FlowFlags.CONDITIONALLY_RETURNS; + } else { + newFlags |= (leftFlags | rightFlags) & FlowFlags.CONDITIONALLY_RETURNS; + } + + if ((leftFlags & FlowFlags.RETURNS_WRAPPED) && (rightFlags & FlowFlags.RETURNS_WRAPPED)) { + newFlags |= FlowFlags.RETURNS_WRAPPED; + } + + if ((leftFlags & FlowFlags.RETURNS_NONNULL) && (rightFlags & FlowFlags.RETURNS_NONNULL)) { + newFlags |= FlowFlags.RETURNS_NONNULL; + } + + if (leftFlags & FlowFlags.THROWS) { + if (rightFlags & FlowFlags.THROWS) { + newFlags |= FlowFlags.THROWS; + } else { + newFlags |= FlowFlags.CONDITIONALLY_THROWS; + } + } else if (rightFlags & FlowFlags.THROWS) { + newFlags |= FlowFlags.CONDITIONALLY_THROWS; + } else { + newFlags |= (leftFlags | rightFlags) & FlowFlags.CONDITIONALLY_THROWS; + } - // conditional flags set in any arm - this.set(left.flags & FlowFlags.ANY_CONDITIONAL); - this.set(right.flags & FlowFlags.ANY_CONDITIONAL); + if (leftFlags & FlowFlags.BREAKS) { + if (rightFlags & FlowFlags.BREAKS) { + newFlags |= FlowFlags.BREAKS; + } else { + newFlags |= FlowFlags.CONDITIONALLY_BREAKS; + } + } else if (rightFlags & FlowFlags.BREAKS) { + newFlags |= FlowFlags.CONDITIONALLY_BREAKS; + } else { + newFlags |= (leftFlags | rightFlags) & FlowFlags.CONDITIONALLY_BREAKS; + } - // categorical flags in either arm as conditional - this.inheritConditional(left); - this.inheritConditional(right); + if (leftFlags & FlowFlags.CONTINUES) { + if (rightFlags & FlowFlags.CONTINUES) { + newFlags |= FlowFlags.CONTINUES; + } else { + newFlags |= FlowFlags.CONDITIONALLY_CONTINUES; + } + } else if (rightFlags & FlowFlags.CONTINUES) { + newFlags |= FlowFlags.CONDITIONALLY_CONTINUES; + } else { + newFlags |= (leftFlags | rightFlags) & FlowFlags.CONDITIONALLY_CONTINUES; + } + + if (leftFlags & FlowFlags.ALLOCATES) { + if (rightFlags & FlowFlags.ALLOCATES) { + newFlags |= FlowFlags.ALLOCATES; + } else { + newFlags |= FlowFlags.CONDITIONALLY_ALLOCATES; + } + } else if (rightFlags & FlowFlags.ALLOCATES) { + newFlags |= FlowFlags.CONDITIONALLY_ALLOCATES; + } else { + newFlags |= (leftFlags | rightFlags) & FlowFlags.CONDITIONALLY_ALLOCATES; + } + + if ((leftFlags & FlowFlags.CALLS_SUPER) && (rightFlags & FlowFlags.CALLS_SUPER)) { + newFlags |= FlowFlags.CALLS_SUPER; + } + + if ((leftFlags & FlowFlags.TERMINATES) && (rightFlags & FlowFlags.TERMINATES)) { + newFlags |= FlowFlags.TERMINATES; + } + + this.flags = newFlags | (this.flags & FlowFlags.UNCHECKED_CONTEXT); - // categorical local flags set in both arms / conditional local flags set in at least one arm var leftLocalFlags = left.localFlags; var numLeftLocalFlags = leftLocalFlags.length; var rightLocalFlags = right.localFlags; var numRightLocalFlags = rightLocalFlags.length; - var combinedFlags = new Array(max(numLeftLocalFlags, numRightLocalFlags)); - for (let i = 0; i < numLeftLocalFlags; ++i) { - combinedFlags[i] = LocalFlags.join( - unchecked(leftLocalFlags[i]), - i < numRightLocalFlags - ? unchecked(rightLocalFlags[i]) - : 0 - ); - } - for (let i = numLeftLocalFlags; i < numRightLocalFlags; ++i) { - combinedFlags[i] = LocalFlags.join( - 0, - unchecked(rightLocalFlags[i]) + var maxLocalFlags = max(numLeftLocalFlags, numRightLocalFlags); + var combinedFlags = new Array(maxLocalFlags); + for (let i = 0; i < maxLocalFlags; ++i) { + let leftFlags = i < numLeftLocalFlags ? leftLocalFlags[i] : 0; + let rightFlags = i < numRightLocalFlags ? rightLocalFlags[i] : 0; + let newFlags = leftFlags & rightFlags & ( + LocalFlags.CONSTANT | + LocalFlags.WRAPPED | + LocalFlags.NONNULL | + LocalFlags.INITIALIZED ); + if (leftFlags & LocalFlags.RETAINED) { + if (rightFlags & LocalFlags.RETAINED) { + newFlags |= LocalFlags.RETAINED; + } else { + newFlags |= LocalFlags.CONDITIONALLY_RETAINED; + } + } else if (rightFlags & LocalFlags.RETAINED) { + newFlags |= LocalFlags.CONDITIONALLY_RETAINED; + } else { + newFlags |= (leftFlags | rightFlags) & LocalFlags.CONDITIONALLY_RETAINED; + } + combinedFlags[i] = newFlags; } this.localFlags = combinedFlags; } + /** Tests if the specified flows have differing local states. */ + static hasIncompatibleLocalStates(before: Flow, after: Flow): bool { + var numThisLocalFlags = before.localFlags.length; + var numOtherLocalFlags = after.localFlags.length; + var parentFunction = before.parentFunction; + assert(parentFunction === after.parentFunction); + var localsByIndex = parentFunction.localsByIndex; + assert(localsByIndex === after.parentFunction.localsByIndex); + for (let i = 0, k = min(numThisLocalFlags, numOtherLocalFlags); i < k; ++i) { + let local = localsByIndex[i]; + let type = local.type; + if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) { + if (before.isLocalFlag(i, LocalFlags.WRAPPED) && !after.isLocalFlag(i, LocalFlags.WRAPPED)) { + return true; + } + } + if (type.is(TypeFlags.REFERENCE)) { + if (before.isLocalFlag(i, LocalFlags.NONNULL) && !after.isLocalFlag(i, LocalFlags.NONNULL)) { + return true; + } + } + } + return false; + } + /** Unifies local flags between this and the other flow. */ unifyLocalFlags(other: Flow): void { var numThisLocalFlags = this.localFlags.length; @@ -657,19 +820,37 @@ export class Flow { } /** Updates local states to reflect that this branch is only taken when `expr` is true-ish. */ - inheritNonnullIfTrue(expr: ExpressionRef): void { + inheritNonnullIfTrue( + /** Expression being true. */ + expr: ExpressionRef, + /** If specified, only set the flag if also nonnull in this flow. */ + iff: Flow | null = null + ): void { // A: `expr` is true-ish -> Q: how did that happen? + + // The iff argument is useful in situations like + // + // if (!ref) { + // ref = new Ref(); + // } + // // inheritNonnullIfFalse(`!ref`, thenFlow) -> ref != null + // + switch (getExpressionId(expr)) { case ExpressionId.LocalSet: { if (!isLocalTee(expr)) break; let local = this.parentFunction.localsByIndex[getLocalSetIndex(expr)]; - this.setLocalFlag(local.index, LocalFlags.NONNULL); - this.inheritNonnullIfTrue(getLocalSetValue(expr)); // must have been true-ish as well + if (!iff || iff.isLocalFlag(local.index, LocalFlags.NONNULL)) { + this.setLocalFlag(local.index, LocalFlags.NONNULL); + } + this.inheritNonnullIfTrue(getLocalSetValue(expr), iff); // must have been true-ish as well break; } case ExpressionId.LocalGet: { let local = this.parentFunction.localsByIndex[getLocalGetIndex(expr)]; - this.setLocalFlag(local.index, LocalFlags.NONNULL); + if (!iff || iff.isLocalFlag(local.index, LocalFlags.NONNULL)) { + this.setLocalFlag(local.index, LocalFlags.NONNULL); + } break; } case ExpressionId.If: { @@ -682,8 +863,8 @@ export class Flow { (getExpressionType(ifFalse) == NativeType.I32 && getConstValueI32(ifFalse) == 0) || (getExpressionType(ifFalse) == NativeType.I64 && getConstValueI64Low(ifFalse) == 0 && getConstValueI64High(ifFalse) == 0) ) { - this.inheritNonnullIfTrue(getIfCondition(expr)); - this.inheritNonnullIfTrue(getIfTrue(expr)); + this.inheritNonnullIfTrue(getIfCondition(expr), iff); + this.inheritNonnullIfTrue(getIfTrue(expr), iff); } } break; @@ -692,7 +873,7 @@ export class Flow { switch (getUnaryOp(expr)) { case UnaryOp.EqzI32: case UnaryOp.EqzI64: { - this.inheritNonnullIfFalse(getUnaryValue(expr)); // !value -> value must have been false + this.inheritNonnullIfFalse(getUnaryValue(expr), iff); // !value -> value must have been false break; } } @@ -704,9 +885,9 @@ export class Flow { let left = getBinaryLeft(expr); let right = getBinaryRight(expr); if (getExpressionId(left) == ExpressionId.Const && getConstValueI32(left) != 0) { - this.inheritNonnullIfTrue(right); // TRUE == right -> right must have been true + this.inheritNonnullIfTrue(right, iff); // TRUE == right -> right must have been true } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI32(right) != 0) { - this.inheritNonnullIfTrue(left); // left == TRUE -> left must have been true + this.inheritNonnullIfTrue(left, iff); // left == TRUE -> left must have been true } break; } @@ -714,9 +895,9 @@ export class Flow { let left = getBinaryLeft(expr); let right = getBinaryRight(expr); if (getExpressionId(left) == ExpressionId.Const && (getConstValueI64Low(left) != 0 || getConstValueI64High(left) != 0)) { - this.inheritNonnullIfTrue(right); // TRUE == right -> right must have been true + this.inheritNonnullIfTrue(right, iff); // TRUE == right -> right must have been true } else if (getExpressionId(right) == ExpressionId.Const && (getConstValueI64Low(right) != 0 && getConstValueI64High(right) != 0)) { - this.inheritNonnullIfTrue(left); // left == TRUE -> left must have been true + this.inheritNonnullIfTrue(left, iff); // left == TRUE -> left must have been true } break; } @@ -724,9 +905,9 @@ export class Flow { let left = getBinaryLeft(expr); let right = getBinaryRight(expr); if (getExpressionId(left) == ExpressionId.Const && getConstValueI32(left) == 0) { - this.inheritNonnullIfTrue(right); // FALSE != right -> right must have been true + this.inheritNonnullIfTrue(right, iff); // FALSE != right -> right must have been true } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI32(right) == 0) { - this.inheritNonnullIfTrue(left); // left != FALSE -> left must have been true + this.inheritNonnullIfTrue(left, iff); // left != FALSE -> left must have been true } break; } @@ -734,9 +915,9 @@ export class Flow { let left = getBinaryLeft(expr); let right = getBinaryRight(expr); if (getExpressionId(left) == ExpressionId.Const && getConstValueI64Low(left) == 0 && getConstValueI64High(left) == 0) { - this.inheritNonnullIfTrue(right); // FALSE != right -> right must have been true + this.inheritNonnullIfTrue(right, iff); // FALSE != right -> right must have been true } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI64Low(right) == 0 && getConstValueI64High(right) == 0) { - this.inheritNonnullIfTrue(left); // left != FALSE -> left must have been true + this.inheritNonnullIfTrue(left, iff); // left != FALSE -> left must have been true } break; } @@ -748,7 +929,7 @@ export class Flow { let program = this.parentFunction.program; switch (name) { case program.retainInstance.internalName: { - this.inheritNonnullIfTrue(getCallOperand(expr, 0)); + this.inheritNonnullIfTrue(getCallOperand(expr, 0), iff); break; } } @@ -758,14 +939,19 @@ export class Flow { } /** Updates local states to reflect that this branch is only taken when `expr` is false-ish. */ - inheritNonnullIfFalse(expr: ExpressionRef): void { + inheritNonnullIfFalse( + /** Expression being false. */ + expr: ExpressionRef, + /** If specified, only set the flag if also nonnull in this flow. */ + iff: Flow | null = null + ): void { // A: `expr` is false-ish -> Q: how did that happen? switch (getExpressionId(expr)) { case ExpressionId.Unary: { switch (getUnaryOp(expr)) { case UnaryOp.EqzI32: case UnaryOp.EqzI64: { - this.inheritNonnullIfTrue(getUnaryValue(expr)); // !value -> value must have been true + this.inheritNonnullIfTrue(getUnaryValue(expr), iff); // !value -> value must have been true break; } } @@ -783,8 +969,8 @@ export class Flow { (exprType == NativeType.I32 && getConstValueI32(ifTrue) != 0) || (exprType == NativeType.I64 && (getConstValueI64Low(ifTrue) != 0 || getConstValueI64High(ifTrue) != 0)) ) { - this.inheritNonnullIfFalse(getIfCondition(expr)); - this.inheritNonnullIfFalse(getIfFalse(expr)); + this.inheritNonnullIfFalse(getIfCondition(expr), iff); + this.inheritNonnullIfFalse(getIfFalse(expr), iff); } } @@ -797,9 +983,9 @@ export class Flow { let left = getBinaryLeft(expr); let right = getBinaryRight(expr); if (getExpressionId(left) == ExpressionId.Const && getConstValueI32(left) == 0) { - this.inheritNonnullIfTrue(right); // FALSE == right -> right must have been true + this.inheritNonnullIfTrue(right, iff); // FALSE == right -> right must have been true } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI32(right) == 0) { - this.inheritNonnullIfTrue(left); // left == FALSE -> left must have been true + this.inheritNonnullIfTrue(left, iff); // left == FALSE -> left must have been true } break; } @@ -807,9 +993,9 @@ export class Flow { let left = getBinaryLeft(expr); let right = getBinaryRight(expr); if (getExpressionId(left) == ExpressionId.Const && getConstValueI64Low(left) == 0 && getConstValueI64High(left) == 0) { - this.inheritNonnullIfTrue(right); // FALSE == right -> right must have been true + this.inheritNonnullIfTrue(right, iff); // FALSE == right -> right must have been true } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI64Low(right) == 0 && getConstValueI64High(right) == 0) { - this.inheritNonnullIfTrue(left); // left == FALSE -> left must have been true + this.inheritNonnullIfTrue(left, iff); // left == FALSE -> left must have been true } break; } @@ -817,9 +1003,9 @@ export class Flow { let left = getBinaryLeft(expr); let right = getBinaryRight(expr); if (getExpressionId(left) == ExpressionId.Const && getConstValueI32(left) != 0) { - this.inheritNonnullIfTrue(right); // TRUE != right -> right must have been true + this.inheritNonnullIfTrue(right, iff); // TRUE != right -> right must have been true } else if (getExpressionId(right) == ExpressionId.Const && getConstValueI32(right) != 0) { - this.inheritNonnullIfTrue(left); // left != TRUE -> left must have been true + this.inheritNonnullIfTrue(left, iff); // left != TRUE -> left must have been true } break; } @@ -827,9 +1013,9 @@ export class Flow { let left = getBinaryLeft(expr); let right = getBinaryRight(expr); if (getExpressionId(left) == ExpressionId.Const && (getConstValueI64Low(left) != 0 || getConstValueI64High(left) != 0)) { - this.inheritNonnullIfTrue(right); // TRUE != right -> right must have been true for this to become false + this.inheritNonnullIfTrue(right, iff); // TRUE != right -> right must have been true for this to become false } else if (getExpressionId(right) == ExpressionId.Const && (getConstValueI64Low(right) != 0 || getConstValueI64High(right) != 0)) { - this.inheritNonnullIfTrue(left); // left != TRUE -> left must have been true for this to become false + this.inheritNonnullIfTrue(left, iff); // left != TRUE -> left must have been true for this to become false } break; } @@ -1099,7 +1285,22 @@ export class Flow { parent = parent.parent; ++levels; } - return "Flow(" + this.actualFunction + ")[" + levels.toString() + "]"; + var sb = new Array(); + if (this.is(FlowFlags.RETURNS)) sb.push("RETURNS"); + if (this.is(FlowFlags.RETURNS_WRAPPED)) sb.push("RETURNS_WRAPPED"); + if (this.is(FlowFlags.RETURNS_NONNULL)) sb.push("RETURNS_NONNULL"); + if (this.is(FlowFlags.THROWS)) sb.push("THROWS"); + if (this.is(FlowFlags.BREAKS)) sb.push("BREAKS"); + if (this.is(FlowFlags.CONTINUES)) sb.push("CONTINUES"); + if (this.is(FlowFlags.ALLOCATES)) sb.push("ALLOCATES"); + if (this.is(FlowFlags.CALLS_SUPER)) sb.push("CALLS_SUPER"); + if (this.is(FlowFlags.TERMINATES)) sb.push("TERMINATES"); + if (this.is(FlowFlags.CONDITIONALLY_RETURNS)) sb.push("CONDITIONALLY_RETURNS"); + if (this.is(FlowFlags.CONDITIONALLY_THROWS)) sb.push("CONDITIONALLY_THROWS"); + if (this.is(FlowFlags.CONDITIONALLY_BREAKS)) sb.push("CONDITIONALLY_BREAKS"); + if (this.is(FlowFlags.CONDITIONALLY_CONTINUES)) sb.push("CONDITIONALLY_CONTINUES"); + if (this.is(FlowFlags.CONDITIONALLY_ALLOCATES)) sb.push("CONDITIONALLY_ALLOCATES"); + return "Flow(" + this.actualFunction + ")[" + levels.toString() + "] " + sb.join(" "); } } diff --git a/src/index.ts b/src/index.ts index 436193a6a7..5cd8a1edd5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,7 +5,6 @@ import { Target, Feature } from "./common"; import { Compiler, Options } from "./compiler"; -import { Decompiler } from "./decompiler"; import { IDLBuilder, TSDBuilder } from "./definitions"; import { DiagnosticMessage, DiagnosticCategory, formatDiagnosticMessage } from "./diagnostics"; import { Module } from "./module"; @@ -181,13 +180,6 @@ export function compile(program: Program): Module { return new Compiler(program).compile(); } -/** Decompiles a module to its (low level) source. */ -export function decompile(module: Module): string { - var decompiler = new Decompiler(); - decompiler.decompile(module); - return decompiler.finish(); -} - /** Builds WebIDL definitions for the specified program. */ export function buildIDL(program: Program): string { return IDLBuilder.build(program); @@ -229,10 +221,8 @@ export { LIBRARY_PREFIX } from "./common"; // Full API export * from "./ast"; -// export * from "./binary"; export * from "./common"; export * from "./compiler"; -export * from "./decompiler"; export * from "./definitions"; export * from "./diagnosticMessages.generated"; export * from "./diagnostics"; diff --git a/src/module.ts b/src/module.ts index 4b0e0cae67..78da2e4e80 100644 --- a/src/module.ts +++ b/src/module.ts @@ -701,6 +701,30 @@ export class Module { return ret; } + /** Attempts to trivially flatten a series of expressions instead of emitting a block. */ + flatten( + stmts: ExpressionRef[], + type: NativeType = NativeType.None + ): ExpressionRef { + var length = stmts.length; + if (length == 0) return this.nop(); // usually filtered out again + if (length == 1) { + let single = stmts[0]; + switch (getExpressionId(single)) { + case ExpressionId.Return: + case ExpressionId.Throw: + case ExpressionId.Unreachable: { + // type does no matter, terminates anyway + return single; + } + } + let singleType = getExpressionType(single); + assert(singleType == NativeType.Unreachable || singleType == type); + return single; + } + return this.block(null, stmts, type); + } + br( label: string | null, condition: ExpressionRef = 0, diff --git a/src/program.ts b/src/program.ts index 8a014b3877..d10f11dbac 100644 --- a/src/program.ts +++ b/src/program.ts @@ -13,7 +13,7 @@ import { INNER_DELIMITER, LIBRARY_SUBST, INDEX_SUFFIX, - CommonSymbols, + CommonNames, Feature, Target } from "./common"; @@ -36,6 +36,7 @@ import { } from "./types"; import { + Token, Node, NodeKind, Source, @@ -61,6 +62,7 @@ import { EnumDeclaration, EnumValueDeclaration, ExportMember, + ExportDefaultStatement, ExportStatement, FieldDeclaration, FunctionDeclaration, @@ -72,11 +74,7 @@ import { TypeDeclaration, VariableDeclaration, VariableLikeDeclarationStatement, - VariableStatement, - - ExportDefaultStatement, - Token, - ParameterNode + VariableStatement } from "./ast"; import { @@ -570,7 +568,7 @@ export class Program extends DiagnosticEmitter { null, this.nativeDummySignature || (this.nativeDummySignature = Node.createFunctionType([], Node.createNamedType( // ^ AST signature doesn't really matter, is overridden anyway - Node.createSimpleTypeName(CommonSymbols.void_, range), + Node.createSimpleTypeName(CommonNames.void_, range), null, false, range ), null, false, range) @@ -631,79 +629,79 @@ export class Program extends DiagnosticEmitter { this.options = options; // register native types - this.registerNativeType(CommonSymbols.i8, Type.i8); - this.registerNativeType(CommonSymbols.i16, Type.i16); - this.registerNativeType(CommonSymbols.i32, Type.i32); - this.registerNativeType(CommonSymbols.i64, Type.i64); - this.registerNativeType(CommonSymbols.isize, options.isizeType); - this.registerNativeType(CommonSymbols.u8, Type.u8); - this.registerNativeType(CommonSymbols.u16, Type.u16); - this.registerNativeType(CommonSymbols.u32, Type.u32); - this.registerNativeType(CommonSymbols.u64, Type.u64); - this.registerNativeType(CommonSymbols.usize, options.usizeType); - this.registerNativeType(CommonSymbols.bool, Type.bool); - this.registerNativeType(CommonSymbols.f32, Type.f32); - this.registerNativeType(CommonSymbols.f64, Type.f64); - this.registerNativeType(CommonSymbols.void_, Type.void); - this.registerNativeType(CommonSymbols.number, Type.f64); // alias - this.registerNativeType(CommonSymbols.boolean, Type.bool); // alias - this.nativeFile.add(CommonSymbols.native, new TypeDefinition( - CommonSymbols.native, + this.registerNativeType(CommonNames.i8, Type.i8); + this.registerNativeType(CommonNames.i16, Type.i16); + this.registerNativeType(CommonNames.i32, Type.i32); + this.registerNativeType(CommonNames.i64, Type.i64); + this.registerNativeType(CommonNames.isize, options.isizeType); + this.registerNativeType(CommonNames.u8, Type.u8); + this.registerNativeType(CommonNames.u16, Type.u16); + this.registerNativeType(CommonNames.u32, Type.u32); + this.registerNativeType(CommonNames.u64, Type.u64); + this.registerNativeType(CommonNames.usize, options.usizeType); + this.registerNativeType(CommonNames.bool, Type.bool); + this.registerNativeType(CommonNames.f32, Type.f32); + this.registerNativeType(CommonNames.f64, Type.f64); + this.registerNativeType(CommonNames.void_, Type.void); + this.registerNativeType(CommonNames.number, Type.f64); // alias + this.registerNativeType(CommonNames.boolean, Type.bool); // alias + this.nativeFile.add(CommonNames.native, new TypeDefinition( + CommonNames.native, this.nativeFile, - this.makeNativeTypeDeclaration(CommonSymbols.native, CommonFlags.EXPORT | CommonFlags.GENERIC), + this.makeNativeTypeDeclaration(CommonNames.native, CommonFlags.EXPORT | CommonFlags.GENERIC), DecoratorFlags.BUILTIN )); - this.nativeFile.add(CommonSymbols.indexof, new TypeDefinition( - CommonSymbols.indexof, + this.nativeFile.add(CommonNames.indexof, new TypeDefinition( + CommonNames.indexof, this.nativeFile, - this.makeNativeTypeDeclaration(CommonSymbols.indexof, CommonFlags.EXPORT | CommonFlags.GENERIC), + this.makeNativeTypeDeclaration(CommonNames.indexof, CommonFlags.EXPORT | CommonFlags.GENERIC), DecoratorFlags.BUILTIN )); - this.nativeFile.add(CommonSymbols.valueof, new TypeDefinition( - CommonSymbols.valueof, + this.nativeFile.add(CommonNames.valueof, new TypeDefinition( + CommonNames.valueof, this.nativeFile, - this.makeNativeTypeDeclaration(CommonSymbols.valueof, CommonFlags.EXPORT | CommonFlags.GENERIC), + this.makeNativeTypeDeclaration(CommonNames.valueof, CommonFlags.EXPORT | CommonFlags.GENERIC), DecoratorFlags.BUILTIN )); - this.nativeFile.add(CommonSymbols.returnof, new TypeDefinition( - CommonSymbols.returnof, + this.nativeFile.add(CommonNames.returnof, new TypeDefinition( + CommonNames.returnof, this.nativeFile, - this.makeNativeTypeDeclaration(CommonSymbols.returnof, CommonFlags.EXPORT | CommonFlags.GENERIC), + this.makeNativeTypeDeclaration(CommonNames.returnof, CommonFlags.EXPORT | CommonFlags.GENERIC), DecoratorFlags.BUILTIN )); - if (options.hasFeature(Feature.SIMD)) this.registerNativeType(CommonSymbols.v128, Type.v128); - if (options.hasFeature(Feature.REFERENCE_TYPES)) this.registerNativeType(CommonSymbols.anyref, Type.anyref); + if (options.hasFeature(Feature.SIMD)) this.registerNativeType(CommonNames.v128, Type.v128); + if (options.hasFeature(Feature.REFERENCE_TYPES)) this.registerNativeType(CommonNames.anyref, Type.anyref); // register compiler hints - this.registerConstantInteger(CommonSymbols.ASC_TARGET, Type.i32, + this.registerConstantInteger(CommonNames.ASC_TARGET, Type.i32, i64_new(options.isWasm64 ? Target.WASM64 : Target.WASM32)); - this.registerConstantInteger(CommonSymbols.ASC_NO_ASSERT, Type.bool, + this.registerConstantInteger(CommonNames.ASC_NO_ASSERT, Type.bool, i64_new(options.noAssert ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_MEMORY_BASE, Type.i32, + this.registerConstantInteger(CommonNames.ASC_MEMORY_BASE, Type.i32, i64_new(options.memoryBase, 0)); - this.registerConstantInteger(CommonSymbols.ASC_OPTIMIZE_LEVEL, Type.i32, + this.registerConstantInteger(CommonNames.ASC_OPTIMIZE_LEVEL, Type.i32, i64_new(options.optimizeLevelHint, 0)); - this.registerConstantInteger(CommonSymbols.ASC_SHRINK_LEVEL, Type.i32, + this.registerConstantInteger(CommonNames.ASC_SHRINK_LEVEL, Type.i32, i64_new(options.shrinkLevelHint, 0)); // register feature hints - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_SIGN_EXTENSION, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_SIGN_EXTENSION, Type.bool, i64_new(options.hasFeature(Feature.SIGN_EXTENSION) ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_MUTABLE_GLOBALS, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_MUTABLE_GLOBALS, Type.bool, i64_new(options.hasFeature(Feature.MUTABLE_GLOBALS) ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_NONTRAPPING_F2I, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_NONTRAPPING_F2I, Type.bool, i64_new(options.hasFeature(Feature.NONTRAPPING_F2I) ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_BULK_MEMORY, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_BULK_MEMORY, Type.bool, i64_new(options.hasFeature(Feature.BULK_MEMORY) ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_SIMD, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_SIMD, Type.bool, i64_new(options.hasFeature(Feature.SIMD) ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_THREADS, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_THREADS, Type.bool, i64_new(options.hasFeature(Feature.THREADS) ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_EXCEPTION_HANDLING, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_EXCEPTION_HANDLING, Type.bool, i64_new(options.hasFeature(Feature.EXCEPTION_HANDLING) ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_TAIL_CALLS, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_TAIL_CALLS, Type.bool, i64_new(options.hasFeature(Feature.TAIL_CALLS) ? 1 : 0, 0)); - this.registerConstantInteger(CommonSymbols.ASC_FEATURE_REFERENCE_TYPES, Type.bool, + this.registerConstantInteger(CommonNames.ASC_FEATURE_REFERENCE_TYPES, Type.bool, i64_new(options.hasFeature(Feature.REFERENCE_TYPES) ? 1 : 0, 0)); // remember deferred elements @@ -868,42 +866,42 @@ export class Program extends DiagnosticEmitter { // register ArrayBuffer (id=0), String (id=1), ArrayBufferView (id=2) assert(this.nextClassId == 0); - this.arrayBufferInstance = this.requireClass(CommonSymbols.ArrayBuffer); + this.arrayBufferInstance = this.requireClass(CommonNames.ArrayBuffer); assert(this.arrayBufferInstance.id == 0); - this.stringInstance = this.requireClass(CommonSymbols.String); + this.stringInstance = this.requireClass(CommonNames.String); assert(this.stringInstance.id == 1); - this.arrayBufferViewInstance = this.requireClass(CommonSymbols.ArrayBufferView); + this.arrayBufferViewInstance = this.requireClass(CommonNames.ArrayBufferView); assert(this.arrayBufferViewInstance.id == 2); // register classes backing basic types - this.registerWrapperClass(Type.i8, CommonSymbols.I8); - this.registerWrapperClass(Type.i16, CommonSymbols.I16); - this.registerWrapperClass(Type.i32, CommonSymbols.I32); - this.registerWrapperClass(Type.i64, CommonSymbols.I64); - this.registerWrapperClass(options.isizeType, CommonSymbols.Isize); - this.registerWrapperClass(Type.u8, CommonSymbols.U8); - this.registerWrapperClass(Type.u16, CommonSymbols.U16); - this.registerWrapperClass(Type.u32, CommonSymbols.U32); - this.registerWrapperClass(Type.u64, CommonSymbols.U64); - this.registerWrapperClass(options.usizeType, CommonSymbols.Usize); - this.registerWrapperClass(Type.bool, CommonSymbols.Bool); - this.registerWrapperClass(Type.f32, CommonSymbols.F32); - this.registerWrapperClass(Type.f64, CommonSymbols.F64); - if (options.hasFeature(Feature.SIMD)) this.registerWrapperClass(Type.v128, CommonSymbols.V128); - if (options.hasFeature(Feature.REFERENCE_TYPES)) this.registerWrapperClass(Type.anyref, CommonSymbols.Anyref); + this.registerWrapperClass(Type.i8, CommonNames.I8); + this.registerWrapperClass(Type.i16, CommonNames.I16); + this.registerWrapperClass(Type.i32, CommonNames.I32); + this.registerWrapperClass(Type.i64, CommonNames.I64); + this.registerWrapperClass(options.isizeType, CommonNames.Isize); + this.registerWrapperClass(Type.u8, CommonNames.U8); + this.registerWrapperClass(Type.u16, CommonNames.U16); + this.registerWrapperClass(Type.u32, CommonNames.U32); + this.registerWrapperClass(Type.u64, CommonNames.U64); + this.registerWrapperClass(options.usizeType, CommonNames.Usize); + this.registerWrapperClass(Type.bool, CommonNames.Bool); + this.registerWrapperClass(Type.f32, CommonNames.F32); + this.registerWrapperClass(Type.f64, CommonNames.F64); + if (options.hasFeature(Feature.SIMD)) this.registerWrapperClass(Type.v128, CommonNames.V128); + if (options.hasFeature(Feature.REFERENCE_TYPES)) this.registerWrapperClass(Type.anyref, CommonNames.Anyref); // register views but don't instantiate them yet - this.i8ArrayPrototype = this.require(CommonSymbols.Int8Array, ElementKind.CLASS_PROTOTYPE); - this.i16ArrayPrototype = this.require(CommonSymbols.Int16Array, ElementKind.CLASS_PROTOTYPE); - this.i32ArrayPrototype = this.require(CommonSymbols.Int32Array, ElementKind.CLASS_PROTOTYPE); - this.i64ArrayPrototype = this.require(CommonSymbols.Int64Array, ElementKind.CLASS_PROTOTYPE); - this.u8ArrayPrototype = this.require(CommonSymbols.Uint8Array, ElementKind.CLASS_PROTOTYPE); - this.u8ClampedArrayPrototype = this.require(CommonSymbols.Uint8ClampedArray, ElementKind.CLASS_PROTOTYPE); - this.u16ArrayPrototype = this.require(CommonSymbols.Uint16Array, ElementKind.CLASS_PROTOTYPE); - this.u32ArrayPrototype = this.require(CommonSymbols.Uint32Array, ElementKind.CLASS_PROTOTYPE); - this.u64ArrayPrototype = this.require(CommonSymbols.Uint64Array, ElementKind.CLASS_PROTOTYPE); - this.f32ArrayPrototype = this.require(CommonSymbols.Float32Array, ElementKind.CLASS_PROTOTYPE); - this.f64ArrayPrototype = this.require(CommonSymbols.Float64Array, ElementKind.CLASS_PROTOTYPE); + this.i8ArrayPrototype = this.require(CommonNames.Int8Array, ElementKind.CLASS_PROTOTYPE); + this.i16ArrayPrototype = this.require(CommonNames.Int16Array, ElementKind.CLASS_PROTOTYPE); + this.i32ArrayPrototype = this.require(CommonNames.Int32Array, ElementKind.CLASS_PROTOTYPE); + this.i64ArrayPrototype = this.require(CommonNames.Int64Array, ElementKind.CLASS_PROTOTYPE); + this.u8ArrayPrototype = this.require(CommonNames.Uint8Array, ElementKind.CLASS_PROTOTYPE); + this.u8ClampedArrayPrototype = this.require(CommonNames.Uint8ClampedArray, ElementKind.CLASS_PROTOTYPE); + this.u16ArrayPrototype = this.require(CommonNames.Uint16Array, ElementKind.CLASS_PROTOTYPE); + this.u32ArrayPrototype = this.require(CommonNames.Uint32Array, ElementKind.CLASS_PROTOTYPE); + this.u64ArrayPrototype = this.require(CommonNames.Uint64Array, ElementKind.CLASS_PROTOTYPE); + this.f32ArrayPrototype = this.require(CommonNames.Float32Array, ElementKind.CLASS_PROTOTYPE); + this.f64ArrayPrototype = this.require(CommonNames.Float64Array, ElementKind.CLASS_PROTOTYPE); // resolve base prototypes of derived classes var resolver = this.resolver; @@ -961,21 +959,21 @@ export class Program extends DiagnosticEmitter { } // register stdlib components - this.arrayPrototype = this.require(CommonSymbols.Array, ElementKind.CLASS_PROTOTYPE); - this.fixedArrayPrototype = this.require(CommonSymbols.FixedArray, ElementKind.CLASS_PROTOTYPE); - this.setPrototype = this.require(CommonSymbols.Set, ElementKind.CLASS_PROTOTYPE); - this.mapPrototype = this.require(CommonSymbols.Map, ElementKind.CLASS_PROTOTYPE); - this.abortInstance = this.lookupFunction(CommonSymbols.abort); // can be disabled - this.allocInstance = this.requireFunction(CommonSymbols.alloc); - this.reallocInstance = this.requireFunction(CommonSymbols.realloc); - this.freeInstance = this.requireFunction(CommonSymbols.free); - this.retainInstance = this.requireFunction(CommonSymbols.retain); - this.releaseInstance = this.requireFunction(CommonSymbols.release); - this.collectInstance = this.requireFunction(CommonSymbols.collect); - this.typeinfoInstance = this.requireFunction(CommonSymbols.typeinfo); - this.instanceofInstance = this.requireFunction(CommonSymbols.instanceof_); - this.visitInstance = this.requireFunction(CommonSymbols.visit); - this.allocArrayInstance = this.requireFunction(CommonSymbols.allocArray); + this.arrayPrototype = this.require(CommonNames.Array, ElementKind.CLASS_PROTOTYPE); + this.fixedArrayPrototype = this.require(CommonNames.FixedArray, ElementKind.CLASS_PROTOTYPE); + this.setPrototype = this.require(CommonNames.Set, ElementKind.CLASS_PROTOTYPE); + this.mapPrototype = this.require(CommonNames.Map, ElementKind.CLASS_PROTOTYPE); + this.abortInstance = this.lookupFunction(CommonNames.abort); // can be disabled + this.allocInstance = this.requireFunction(CommonNames.alloc); + this.reallocInstance = this.requireFunction(CommonNames.realloc); + this.freeInstance = this.requireFunction(CommonNames.free); + this.retainInstance = this.requireFunction(CommonNames.retain); + this.releaseInstance = this.requireFunction(CommonNames.release); + this.collectInstance = this.requireFunction(CommonNames.collect); + this.typeinfoInstance = this.requireFunction(CommonNames.typeinfo); + this.instanceofInstance = this.requireFunction(CommonNames.instanceof_); + this.visitInstance = this.requireFunction(CommonNames.visit); + this.allocArrayInstance = this.requireFunction(CommonNames.allocArray); // mark module exports, i.e. to apply proper wrapping behavior on the boundaries for (let file of this.filesByName.values()) { @@ -2854,12 +2852,12 @@ export class Function extends TypedElement { let localIndex = 0; if (this.is(CommonFlags.INSTANCE)) { let local = new Local( - CommonSymbols.this_, + CommonNames.this_, localIndex++, assert(signature.thisType), this ); - this.localsByName.set(CommonSymbols.this_, local); + this.localsByName.set(CommonNames.this_, local); this.localsByIndex[local.index] = local; } let parameterTypes = signature.parameterTypes; diff --git a/src/resolver.ts b/src/resolver.ts index 986ef15579..39d716ca21 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -31,7 +31,6 @@ import { } from "./program"; import { - FlowFlags, Flow } from "./flow"; @@ -79,7 +78,7 @@ import { import { CommonFlags, - CommonSymbols + CommonNames } from "./common"; import { @@ -93,7 +92,7 @@ import { } from "./tokenizer"; import { - BuiltinSymbols + BuiltinNames } from "./builtins"; /** Indicates whether errors are reported or not. */ @@ -277,11 +276,11 @@ export class Resolver extends DiagnosticEmitter { // Handle special built-in types if (isSimpleType) { - switch (nameNode.identifier.symbol) { - case CommonSymbols.native: return this.resolveBuiltinNativeType(node, ctxElement, ctxTypes, reportMode); - case CommonSymbols.indexof: return this.resolveBuiltinIndexofType(node, ctxElement, ctxTypes, reportMode); - case CommonSymbols.valueof: return this.resolveBuiltinValueofType(node, ctxElement, ctxTypes, reportMode); - case CommonSymbols.returnof: return this.resolveBuiltinReturnTypeType(node, ctxElement, ctxTypes, reportMode); + switch (nameNode.identifier.text) { + case CommonNames.native: return this.resolveBuiltinNativeType(node, ctxElement, ctxTypes, reportMode); + case CommonNames.indexof: return this.resolveBuiltinIndexofType(node, ctxElement, ctxTypes, reportMode); + case CommonNames.valueof: return this.resolveBuiltinValueofType(node, ctxElement, ctxTypes, reportMode); + case CommonNames.returnof: return this.resolveBuiltinReturnTypeType(node, ctxElement, ctxTypes, reportMode); } } @@ -712,7 +711,7 @@ export class Resolver extends DiagnosticEmitter { } return this.resolveFunctionInclTypeArguments( prototype, - node.typeArguments, + typeArguments, ctxFlow.actualFunction, makeMap(ctxFlow.contextualTypeArguments), // don't inherit node, @@ -2043,8 +2042,8 @@ export class Resolver extends DiagnosticEmitter { /** How to proceed with eventual diagnostics. */ reportMode: ReportMode = ReportMode.REPORT ): Element | null { - if (ctxFlow.is(FlowFlags.INLINE_CONTEXT)) { - let thisLocal = ctxFlow.lookupLocal(CommonSymbols.this_); + if (ctxFlow.isInline) { + let thisLocal = ctxFlow.lookupLocal(CommonNames.this_); if (thisLocal) { this.currentThisExpression = null; this.currentElementExpression = null; @@ -2102,8 +2101,8 @@ export class Resolver extends DiagnosticEmitter { /** How to proceed with eventual diagnostics. */ reportMode: ReportMode = ReportMode.REPORT ): Element | null { - if (ctxFlow.is(FlowFlags.INLINE_CONTEXT)) { - let superLocal = ctxFlow.lookupLocal(CommonSymbols.super_); + if (ctxFlow.isInline) { + let superLocal = ctxFlow.lookupLocal(CommonNames.super_); if (superLocal) { this.currentThisExpression = null; this.currentElementExpression = null; @@ -2271,7 +2270,7 @@ export class Resolver extends DiagnosticEmitter { case ElementKind.FUNCTION_PROTOTYPE: { // `unchecked` behaves like parenthesized if ( - (target).internalName == BuiltinSymbols.unchecked && + (target).internalName == BuiltinNames.unchecked && node.arguments.length > 0 ) { return this.resolveExpression(node.arguments[0], ctxFlow, ctxType, reportMode); @@ -2576,10 +2575,10 @@ export class Resolver extends DiagnosticEmitter { reportMode ); if (!thisType) return null; - ctxTypes.set(CommonSymbols.this_, thisType); + ctxTypes.set(CommonNames.this_, thisType); } else if (classInstance) { thisType = classInstance.type; - ctxTypes.set(CommonSymbols.this_, thisType); + ctxTypes.set(CommonNames.this_, thisType); } // resolve parameter types @@ -2934,7 +2933,7 @@ export class Resolver extends DiagnosticEmitter { // Link _own_ constructor if present { - let ctorPrototype = instance.lookupInSelf(CommonSymbols.constructor); + let ctorPrototype = instance.lookupInSelf(CommonNames.constructor); if (ctorPrototype && ctorPrototype.parent === instance) { assert(ctorPrototype.kind == ElementKind.FUNCTION_PROTOTYPE); let ctorInstance = this.resolveFunction( diff --git a/tests/allocators/buddy/optimized.wat b/tests/allocators/buddy/optimized.wat index bedcfd44d5..213edaf624 100644 --- a/tests/allocators/buddy/optimized.wat +++ b/tests/allocators/buddy/optimized.wat @@ -65,7 +65,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -91,10 +91,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -115,11 +115,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -140,7 +140,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -152,7 +152,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -173,10 +173,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -192,11 +192,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -210,7 +210,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -222,7 +222,7 @@ local.get $3 i32.mul local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $4 local.get $3 i32.lt_u @@ -237,7 +237,7 @@ local.get $4 i32.add local.set $4 - br $continue|0 + br $while-continue|0 end end ) @@ -259,7 +259,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -281,62 +281,58 @@ local.get $4 i32.sub br $~lib/util/memory/memcmp|inlined.0 - else - local.get $2 - i32.const 1 - i32.sub - local.set $2 - local.get $0 - i32.const 1 - i32.add - local.set $0 - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $continue|0 end - unreachable - end - end - loop $continue|1 - block $break|1 local.get $2 - i32.const 8 - i32.lt_u - br_if $break|1 - local.get $0 - i64.load - local.get $1 - i64.load - i64.ne - br_if $break|1 + i32.const 1 + i32.sub + local.set $2 local.get $0 - i32.const 8 + i32.const 1 i32.add local.set $0 local.get $1 - i32.const 8 + i32.const 1 i32.add local.set $1 - local.get $2 - i32.const 8 - i32.sub - local.set $2 - br $continue|1 + br $while-continue|0 end end - end - loop $continue|2 - block $break|2 + loop $while-continue|1 local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|2 + i32.const 8 + i32.ge_u + if + local.get $0 + i64.load + local.get $1 + i64.load + i64.eq + if + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $2 + i32.const 8 + i32.sub + local.set $2 + br $while-continue|1 + end + end + end + end + loop $while-continue|2 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $0 i32.load8_u local.tee $3 @@ -349,18 +345,16 @@ local.get $4 i32.sub br $~lib/util/memory/memcmp|inlined.0 - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $continue|2 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|2 end end i32.const 0 @@ -434,7 +428,7 @@ local.set $1 i32.const 16 local.set $2 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $0 i32.lt_u @@ -447,7 +441,7 @@ i32.const 1 i32.shl local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $1 @@ -548,7 +542,7 @@ (func $assembly/buddy/lower_bucket_limit (; 17 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - loop $continue|0 + loop $while-continue|0 local.get $0 global.get $assembly/buddy/bucket_limit i32.lt_u @@ -573,7 +567,7 @@ call $assembly/buddy/buckets$get global.get $assembly/buddy/base_ptr call $assembly/buddy/list_push - br $continue|0 + br $while-continue|0 end local.get $1 i32.const 1 @@ -610,7 +604,7 @@ local.get $1 call $assembly/buddy/flip_parent_is_split end - br $continue|0 + br $while-continue|0 end end i32.const 1 @@ -678,7 +672,7 @@ call $assembly/buddy/bucket_for_request local.tee $1 local.set $4 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const -1 i32.ne @@ -708,7 +702,7 @@ i32.const 1 i32.sub local.set $1 - br $continue|0 + br $while-continue|0 end local.get $1 i32.const 1 @@ -762,7 +756,7 @@ local.get $2 call $assembly/buddy/flip_parent_is_split end - loop $continue|1 + loop $while-continue|1 local.get $1 local.get $4 i32.lt_u @@ -785,7 +779,7 @@ local.get $1 call $assembly/buddy/ptr_for_node call $assembly/buddy/list_push - br $continue|1 + br $while-continue|1 end end local.get $3 @@ -819,43 +813,43 @@ local.get $0 call $assembly/buddy/node_for_ptr local.set $1 - loop $continue|0 - block $break|0 - local.get $1 - i32.eqz - br_if $break|0 - local.get $1 - call $assembly/buddy/flip_parent_is_split - local.get $1 - call $assembly/buddy/parent_is_split - if (result i32) + loop $while-continue|0 + local.get $1 + if + block $while-break|0 + local.get $1 + call $assembly/buddy/flip_parent_is_split + local.get $1 + call $assembly/buddy/parent_is_split + if (result i32) + i32.const 1 + else + local.get $0 + global.get $assembly/buddy/bucket_limit + i32.eq + end + br_if $while-break|0 + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + i32.const 1 + i32.xor i32.const 1 - else + i32.add local.get $0 - global.get $assembly/buddy/bucket_limit - i32.eq + call $assembly/buddy/ptr_for_node + call $assembly/buddy/list_remove + local.get $1 + i32.const 2 + i32.div_u + local.set $1 + local.get $0 + i32.const 1 + i32.sub + local.set $0 + br $while-continue|0 end - br_if $break|0 - local.get $1 - i32.const 1 - i32.sub - local.tee $1 - i32.const 1 - i32.xor - i32.const 1 - i32.add - local.get $0 - call $assembly/buddy/ptr_for_node - call $assembly/buddy/list_remove - local.get $1 - i32.const 2 - i32.div_u - local.set $1 - local.get $0 - i32.const 1 - i32.sub - local.set $0 - br $continue|0 end end local.get $0 diff --git a/tests/allocators/buddy/untouched.wat b/tests/allocators/buddy/untouched.wat index f944134ec4..7c04f774c9 100644 --- a/tests/allocators/buddy/untouched.wat +++ b/tests/allocators/buddy/untouched.wat @@ -80,39 +80,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -120,13 +120,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -167,9 +167,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -326,13 +325,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -407,9 +406,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -448,13 +446,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -529,9 +527,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -556,13 +553,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -637,9 +634,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -1109,6 +1105,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -1155,13 +1152,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1172,30 +1169,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -1212,37 +1208,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -1253,15 +1247,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1278,17 +1272,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -1301,16 +1294,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -1322,9 +1314,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -1332,19 +1323,20 @@ (func $~lib/memory/memory.repeat (; 7 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) i32.const 0 local.set $4 local.get $2 local.get $3 i32.mul local.set $5 - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i32.lt_u + local.set $6 + local.get $6 + if local.get $0 local.get $4 i32.add @@ -1355,9 +1347,8 @@ local.get $2 i32.add local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/memory/memory.compare (; 8 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -1366,6 +1357,9 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) block $~lib/util/memory/memcmp|inlined.0 (result i32) local.get $0 local.set $5 @@ -1388,13 +1382,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1403,16 +1397,16 @@ end local.get $5 i32.load8_u - local.set $6 + local.set $7 local.get $4 i32.load8_u - local.set $7 - local.get $6 + local.set $8 local.get $7 + local.get $8 i32.ne if - local.get $6 local.get $7 + local.get $8 i32.sub br $~lib/util/memory/memcmp|inlined.0 end @@ -1428,64 +1422,64 @@ i32.const 1 i32.add local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 + block $while-break|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u - i32.eqz - br_if $break|1 - local.get $5 - i64.load - local.get $4 - i64.load - i64.ne + local.set $6 + local.get $6 if - br $break|1 + local.get $5 + i64.load + local.get $4 + i64.load + i64.ne + if + br $while-break|1 + end + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $4 + i32.const 8 + i32.add + local.set $4 + local.get $3 + i32.const 8 + i32.sub + local.set $3 + br $while-continue|1 end - local.get $5 - i32.const 8 - i32.add - local.set $5 - local.get $4 - i32.const 8 - i32.add - local.set $4 - local.get $3 - i32.const 8 - i32.sub - local.set $3 - br $continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - local.tee $7 - i32.const 1 - i32.sub - local.set $3 - local.get $7 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.tee $6 + i32.const 1 + i32.sub + local.set $3 + local.get $6 + local.set $6 + local.get $6 + if local.get $5 i32.load8_u - local.set $7 + local.set $9 local.get $4 i32.load8_u - local.set $6 - local.get $7 - local.get $6 + local.set $10 + local.get $9 + local.get $10 i32.ne if - local.get $7 - local.get $6 + local.get $9 + local.get $10 i32.sub br $~lib/util/memory/memcmp|inlined.0 end @@ -1497,9 +1491,8 @@ i32.const 1 i32.add local.set $4 - br $continue|2 + br $while-continue|2 end - unreachable end i32.const 0 end @@ -1600,19 +1593,20 @@ (func $assembly/buddy/bucket_for_request (; 13 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) global.get $assembly/buddy/BUCKET_COUNT i32.const 1 i32.sub local.set $1 global.get $assembly/buddy/MIN_ALLOC local.set $2 - block $break|0 - loop $continue|0 - local.get $2 - local.get $0 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $0 + i32.lt_u + local.set $3 + local.get $3 + if local.get $1 i32.const 1 i32.sub @@ -1621,9 +1615,8 @@ i32.const 2 i32.mul local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 ) @@ -1756,18 +1749,19 @@ (func $assembly/buddy/lower_bucket_limit (; 21 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - block $break|0 - loop $continue|0 - local.get $0 - global.get $assembly/buddy/bucket_limit - i32.lt_u - i32.eqz - br_if $break|0 + (local $3 i32) + loop $while-continue|0 + local.get $0 + global.get $assembly/buddy/bucket_limit + i32.lt_u + local.set $1 + local.get $1 + if global.get $assembly/buddy/base_ptr global.get $assembly/buddy/bucket_limit call $assembly/buddy/node_for_ptr - local.set $1 - local.get $1 + local.set $2 + local.get $2 call $assembly/buddy/parent_is_split i32.eqz if @@ -1784,15 +1778,15 @@ call $assembly/buddy/buckets$get global.get $assembly/buddy/base_ptr call $assembly/buddy/list_push - br $continue|0 + br $while-continue|0 end - local.get $1 + local.get $2 i32.const 1 i32.add global.get $assembly/buddy/bucket_limit call $assembly/buddy/ptr_for_node - local.set $2 - local.get $2 + local.set $3 + local.get $3 i32.const 8 i32.add call $assembly/buddy/update_max_ptr @@ -1803,7 +1797,7 @@ end global.get $assembly/buddy/bucket_limit call $assembly/buddy/buckets$get - local.get $2 + local.get $3 call $assembly/buddy/list_push global.get $assembly/buddy/bucket_limit i32.const 1 @@ -1812,22 +1806,21 @@ global.get $assembly/buddy/bucket_limit call $assembly/buddy/buckets$get call $assembly/buddy/list_init - local.get $1 + local.get $2 i32.const 1 i32.sub i32.const 2 i32.div_u - local.set $1 - local.get $1 + local.set $2 + local.get $2 i32.const 0 i32.ne if - local.get $1 + local.get $2 call $assembly/buddy/flip_parent_is_split end - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 1 ) @@ -1854,6 +1847,8 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + (local $8 i32) local.get $0 i32.const 1073741816 i32.gt_u @@ -1908,15 +1903,15 @@ local.set $2 local.get $2 local.set $1 - block $break|0 - loop $continue|0 - local.get $2 - i32.const 1 - i32.add - i32.const 0 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + i32.const 1 + i32.add + i32.const 0 + i32.ne + local.set $3 + local.get $3 + if local.get $2 call $assembly/buddy/lower_bucket_limit i32.eqz @@ -1927,8 +1922,8 @@ local.get $2 call $assembly/buddy/buckets$get call $assembly/buddy/list_pop - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.eqz if local.get $2 @@ -1946,7 +1941,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end local.get $2 i32.const 1 @@ -1960,97 +1955,96 @@ local.get $2 call $assembly/buddy/buckets$get call $assembly/buddy/list_pop - local.set $6 + local.set $7 end i32.const 1 global.get $assembly/buddy/MAX_ALLOC_LOG2 local.get $2 i32.sub i32.shl - local.set $3 + local.set $4 local.get $2 local.get $1 i32.lt_u if (result i32) - local.get $3 + local.get $4 i32.const 2 i32.div_u global.get $assembly/buddy/List.SIZE i32.add else - local.get $3 + local.get $4 end - local.set $4 - local.get $6 - local.get $4 + local.set $5 + local.get $7 + local.get $5 i32.add call $assembly/buddy/update_max_ptr i32.eqz if local.get $2 call $assembly/buddy/buckets$get - local.get $6 + local.get $7 call $assembly/buddy/list_push i32.const 0 return end - local.get $6 + local.get $7 local.get $2 call $assembly/buddy/node_for_ptr - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 0 i32.ne if - local.get $5 + local.get $6 call $assembly/buddy/flip_parent_is_split end - block $break|1 - loop $continue|1 - local.get $2 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 - local.get $5 + loop $while-continue|1 + local.get $2 + local.get $1 + i32.lt_u + local.set $8 + local.get $8 + if + local.get $6 i32.const 2 i32.mul i32.const 1 i32.add - local.set $5 + local.set $6 local.get $2 i32.const 1 i32.add local.set $2 - local.get $5 + local.get $6 call $assembly/buddy/flip_parent_is_split local.get $2 call $assembly/buddy/buckets$get - local.get $5 + local.get $6 i32.const 1 i32.add local.get $2 call $assembly/buddy/ptr_for_node call $assembly/buddy/list_push - br $continue|1 + br $while-continue|1 end - unreachable end - local.get $6 + local.get $7 local.get $0 i32.store - local.get $6 + local.get $7 global.get $assembly/buddy/HEADER_SIZE i32.add return end - unreachable end i32.const 0 ) (func $assembly/buddy/__mem_free (; 24 ;) (param $0 i32) (local $1 i32) (local $2 i32) + (local $3 i32) local.get $0 i32.eqz if @@ -2070,50 +2064,51 @@ local.get $1 call $assembly/buddy/node_for_ptr local.set $2 - block $break|0 - loop $continue|0 + block $while-break|0 + loop $while-continue|0 local.get $2 i32.const 0 i32.ne - i32.eqz - br_if $break|0 - local.get $2 - call $assembly/buddy/flip_parent_is_split - local.get $2 - call $assembly/buddy/parent_is_split - if (result i32) + local.set $3 + local.get $3 + if + local.get $2 + call $assembly/buddy/flip_parent_is_split + local.get $2 + call $assembly/buddy/parent_is_split + if (result i32) + i32.const 1 + else + local.get $1 + global.get $assembly/buddy/bucket_limit + i32.eq + end + if + br $while-break|0 + end + local.get $2 i32.const 1 - else + i32.sub + i32.const 1 + i32.xor + i32.const 1 + i32.add local.get $1 - global.get $assembly/buddy/bucket_limit - i32.eq - end - if - br $break|0 + call $assembly/buddy/ptr_for_node + call $assembly/buddy/list_remove + local.get $2 + i32.const 1 + i32.sub + i32.const 2 + i32.div_u + local.set $2 + local.get $1 + i32.const 1 + i32.sub + local.set $1 + br $while-continue|0 end - local.get $2 - i32.const 1 - i32.sub - i32.const 1 - i32.xor - i32.const 1 - i32.add - local.get $1 - call $assembly/buddy/ptr_for_node - call $assembly/buddy/list_remove - local.get $2 - i32.const 1 - i32.sub - i32.const 2 - i32.div_u - local.set $2 - local.get $1 - i32.const 1 - i32.sub - local.set $1 - br $continue|0 end - unreachable end local.get $1 call $assembly/buddy/buckets$get diff --git a/tests/allocators/rt-full/optimized.wat b/tests/allocators/rt-full/optimized.wat index bff5bd1915..cebc8abba8 100644 --- a/tests/allocators/rt-full/optimized.wat +++ b/tests/allocators/rt-full/optimized.wat @@ -434,7 +434,7 @@ i32.const 1840 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -448,7 +448,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -468,14 +468,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 272 @@ -742,7 +742,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -801,14 +801,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -820,12 +820,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -844,7 +844,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1093,7 +1093,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1119,10 +1119,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1143,11 +1143,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1168,7 +1168,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1180,7 +1180,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1201,10 +1201,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1220,11 +1220,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1238,7 +1238,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end diff --git a/tests/allocators/rt-full/untouched.wat b/tests/allocators/rt-full/untouched.wat index f689252ec4..4aa56b7ea9 100644 --- a/tests/allocators/rt-full/untouched.wat +++ b/tests/allocators/rt-full/untouched.wat @@ -752,6 +752,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -805,71 +807,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1256,34 +1256,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1292,23 +1293,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1317,11 +1318,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1333,21 +1334,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1355,39 +1355,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1774,39 +1772,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1814,13 +1812,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1861,9 +1859,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2020,13 +2017,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2101,9 +2098,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2142,13 +2138,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2223,9 +2219,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2250,13 +2245,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2331,9 +2326,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2803,6 +2797,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2849,13 +2844,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2866,30 +2861,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2906,37 +2900,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2947,15 +2939,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2972,17 +2964,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -2995,16 +2986,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3016,9 +3006,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end diff --git a/tests/allocators/rt-stub/optimized.wat b/tests/allocators/rt-stub/optimized.wat index b1a839e051..d22d48f737 100644 --- a/tests/allocators/rt-stub/optimized.wat +++ b/tests/allocators/rt-stub/optimized.wat @@ -16,7 +16,7 @@ (export "__reset" (func $~lib/rt/stub/__reset)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) (export "__free" (func $~lib/rt/stub/__free)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -132,7 +132,7 @@ global.set $~lib/rt/stub/offset end ) - (func $start (; 7 ;) + (func $~start (; 7 ;) i32.const 48 global.set $~lib/rt/stub/startOffset i32.const 48 diff --git a/tests/allocators/rt-stub/untouched.wat b/tests/allocators/rt-stub/untouched.wat index 630b6980fd..d999d766d6 100644 --- a/tests/allocators/rt-stub/untouched.wat +++ b/tests/allocators/rt-stub/untouched.wat @@ -21,7 +21,7 @@ (export "__reset" (func $~lib/rt/stub/__reset)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) (export "__free" (func $~lib/rt/stub/__free)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -192,7 +192,7 @@ global.set $~lib/rt/stub/offset end ) - (func $start (; 8 ;) + (func $~start (; 8 ;) global.get $~lib/heap/__heap_base i32.const 15 i32.add diff --git a/tests/compiler/abi.optimized.wat b/tests/compiler/abi.optimized.wat index 679ed41acd..0bc7a7ba97 100644 --- a/tests/compiler/abi.optimized.wat +++ b/tests/compiler/abi.optimized.wat @@ -9,11 +9,11 @@ (export "exported" (func $abi/exported)) (export "exportedExported" (func $abi/exported)) (export "exportedInternal" (func $abi/exported)) - (start $start) + (start $~start) (func $abi/exported (; 0 ;) (result i32) i32.const -128 ) - (func $start (; 1 ;) + (func $~start (; 1 ;) i32.const 1 global.set $abi/condition i32.const 0 diff --git a/tests/compiler/abi.untouched.wat b/tests/compiler/abi.untouched.wat index 6235623f6f..c5e8de996a 100644 --- a/tests/compiler/abi.untouched.wat +++ b/tests/compiler/abi.untouched.wat @@ -12,7 +12,7 @@ (export "exported" (func $abi/exported)) (export "exportedExported" (func $abi/exportedExported)) (export "exportedInternal" (func $abi/exportedInternal)) - (start $start) + (start $~start) (func $abi/internal (; 1 ;) (result i32) i32.const 128 ) @@ -198,7 +198,7 @@ i32.const 24 i32.shr_s ) - (func $start (; 6 ;) + (func $~start (; 6 ;) call $start:abi ) ) diff --git a/tests/compiler/asc-constants.untouched.wat b/tests/compiler/asc-constants.untouched.wat index e7aa8ddedb..c49a7eee33 100644 --- a/tests/compiler/asc-constants.untouched.wat +++ b/tests/compiler/asc-constants.untouched.wat @@ -17,7 +17,7 @@ (global $~lib/ASC_FEATURE_TAIL_CALLS i32 (i32.const 0)) (global $~lib/ASC_FEATURE_REFERENCE_TYPES i32 (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:asc-constants (; 0 ;) i32.const 0 drop @@ -48,7 +48,7 @@ i32.const 0 drop ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:asc-constants ) ) diff --git a/tests/compiler/assert-nonnull.optimized.wat b/tests/compiler/assert-nonnull.optimized.wat index adb99e6249..536902c55e 100644 --- a/tests/compiler/assert-nonnull.optimized.wat +++ b/tests/compiler/assert-nonnull.optimized.wat @@ -8,7 +8,8 @@ (data (i32.const 80) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") (data (i32.const 128) "^\00\00\00\01\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") (table $0 1 funcref) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "testVar" (func $assert-nonnull/testVar)) (export "testObj" (func $assert-nonnull/testObj)) @@ -141,7 +142,7 @@ ) (func $assert-nonnull/testFn (; 10 ;) (param $0 i32) (result i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) ) @@ -152,14 +153,14 @@ unreachable end i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) ) (func $assert-nonnull/testRet (; 12 ;) (param $0 i32) (result i32) (local $1 i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) local.tee $0 @@ -171,7 +172,7 @@ ) (func $assert-nonnull/testObjFn (; 13 ;) (param $0 i32) (result i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 call_indirect (type $none_=>_i32) @@ -179,7 +180,7 @@ (func $assert-nonnull/testObjRet (; 14 ;) (param $0 i32) (result i32) (local $1 i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 call_indirect (type $none_=>_i32) diff --git a/tests/compiler/assert-nonnull.untouched.wat b/tests/compiler/assert-nonnull.untouched.wat index 86dc1e7581..88bea7f8a1 100644 --- a/tests/compiler/assert-nonnull.untouched.wat +++ b/tests/compiler/assert-nonnull.untouched.wat @@ -10,7 +10,8 @@ (data (i32.const 80) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") (data (i32.const 128) "^\00\00\00\01\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00") (table $0 1 funcref) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "testVar" (func $assert-nonnull/testVar)) (export "testObj" (func $assert-nonnull/testObj)) @@ -274,7 +275,7 @@ (func $assert-nonnull/testFn (; 14 ;) (param $0 i32) (result i32) (local $1 i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) local.tee $1 @@ -291,7 +292,7 @@ end local.set $2 i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 call_indirect (type $none_=>_i32) local.tee $1 @@ -300,7 +301,7 @@ (local $1 i32) (local $2 i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) local.tee $1 @@ -323,7 +324,7 @@ call $~lib/rt/stub/__retain local.set $0 i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 call_indirect (type $none_=>_i32) @@ -340,7 +341,7 @@ call $~lib/rt/stub/__retain local.set $0 i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 call_indirect (type $none_=>_i32) diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index 3e8df2ce80..49eac7eb8c 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -17,7 +17,7 @@ (global $binary/f (mut f32) (f32.const 0)) (global $binary/F (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/math/NativeMath.pow (; 0 ;) (param $0 f64) (result f64) (local $1 i64) (local $2 i32) @@ -122,7 +122,7 @@ i32.shl end local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 127 i32.gt_s @@ -148,7 +148,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $1 @@ -475,7 +475,7 @@ i64.or end local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $2 i64.const 1023 i64.gt_s @@ -501,7 +501,7 @@ i64.const 1 i64.sub local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $1 @@ -895,7 +895,7 @@ call $~lib/math/NativeMath.pow global.set $binary/F ) - (func $start (; 5 ;) + (func $~start (; 5 ;) call $start:binary ) ) diff --git a/tests/compiler/binary.untouched.wat b/tests/compiler/binary.untouched.wat index 63f9f07911..ae9cff6b58 100644 --- a/tests/compiler/binary.untouched.wat +++ b/tests/compiler/binary.untouched.wat @@ -29,7 +29,7 @@ (global $~lib/util/math/exp2f_data_tab i32 (i32.const 6848)) (global $binary/F (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/math/NativeMath.pow (; 0 ;) (param $0 f64) (param $1 f64) (result f64) (local $2 f64) (local $3 f64) @@ -955,6 +955,7 @@ (local $8 f32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 i32.reinterpret_f32 local.set $2 @@ -1092,13 +1093,13 @@ i32.or local.set $3 end - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i32.gt_s + local.set $10 + local.get $10 + if local.get $2 local.get $3 i32.ge_u @@ -1125,9 +1126,8 @@ i32.const 1 i32.sub local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 local.get $3 @@ -1151,13 +1151,13 @@ i32.const 8 i32.shl i32.clz - local.set $10 + local.set $11 local.get $4 - local.get $10 + local.get $11 i32.sub local.set $4 local.get $2 - local.get $10 + local.get $11 i32.shl local.set $2 local.get $4 @@ -1742,7 +1742,8 @@ (local $7 i64) (local $8 f64) (local $9 i64) - (local $10 i64) + (local $10 i32) + (local $11 i64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -1884,13 +1885,13 @@ i64.or local.set $3 end - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i64.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i64.gt_s + local.set $10 + local.get $10 + if local.get $2 local.get $3 i64.ge_u @@ -1917,9 +1918,8 @@ i64.const 1 i64.sub local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 local.get $3 @@ -1943,13 +1943,13 @@ i64.const 11 i64.shl i64.clz - local.set $10 + local.set $11 local.get $4 - local.get $10 + local.get $11 i64.sub local.set $4 local.get $2 - local.get $10 + local.get $11 i64.shl local.set $2 local.get $4 @@ -2595,7 +2595,7 @@ call $~lib/math/NativeMath.pow global.set $binary/F ) - (func $start (; 5 ;) + (func $~start (; 5 ;) call $start:binary ) ) diff --git a/tests/compiler/bool.untouched.wat b/tests/compiler/bool.untouched.wat index 6a38a83926..99af3c05b9 100644 --- a/tests/compiler/bool.untouched.wat +++ b/tests/compiler/bool.untouched.wat @@ -13,7 +13,7 @@ (global $bool/F (mut f64) (f64.const 2)) (global $bool/uu (mut i32) (i32.const 2)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:bool (; 1 ;) global.get $bool/i i32.const 0 @@ -114,7 +114,7 @@ unreachable end ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:bool ) ) diff --git a/tests/compiler/builtins.optimized.wat b/tests/compiler/builtins.optimized.wat index 5100168e83..8f2cbd9da1 100644 --- a/tests/compiler/builtins.optimized.wat +++ b/tests/compiler/builtins.optimized.wat @@ -41,7 +41,7 @@ (global $builtins/s (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "test" (func $start:builtins~anonymous|0)) - (start $start) + (start $~start) (func $~lib/atomics/Atomics.isLockFree (; 2 ;) (param $0 i32) (result i32) i32.const 1 local.get $0 @@ -82,7 +82,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -103,20 +103,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -129,18 +127,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -853,7 +849,7 @@ unreachable end ) - (func $start (; 8 ;) + (func $~start (; 8 ;) call $start:builtins ) ) diff --git a/tests/compiler/builtins.untouched.wat b/tests/compiler/builtins.untouched.wat index 0269881e30..fc9bc709a1 100644 --- a/tests/compiler/builtins.untouched.wat +++ b/tests/compiler/builtins.untouched.wat @@ -76,7 +76,7 @@ (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (export "memory" (memory $0)) (export "test" (func $builtins/test)) - (start $start) + (start $~start) (func $~lib/atomics/Atomics.isLockFree (; 2 ;) (param $0 i32) (result i32) local.get $0 i32.const 1 @@ -116,6 +116,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -150,15 +151,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -175,39 +176,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -218,17 +221,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 7 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -1870,7 +1872,7 @@ (func $builtins/test (; 11 ;) nop ) - (func $start (; 12 ;) + (func $~start (; 12 ;) call $start:builtins ) ) diff --git a/tests/compiler/call-inferred.optimized.wat b/tests/compiler/call-inferred.optimized.wat index 03d33d4aa1..3430c3916c 100644 --- a/tests/compiler/call-inferred.optimized.wat +++ b/tests/compiler/call-inferred.optimized.wat @@ -2,11 +2,12 @@ (type $none_=>_none (func)) (memory $0 1) (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00c\00a\00l\00l\00-\00i\00n\00f\00e\00r\00r\00e\00d\00.\00t\00s") - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) - (func $start (; 0 ;) + (start $~start) + (func $~start (; 0 ;) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength ) ) diff --git a/tests/compiler/call-inferred.untouched.wat b/tests/compiler/call-inferred.untouched.wat index 32a3f9934f..6bee176ee8 100644 --- a/tests/compiler/call-inferred.untouched.wat +++ b/tests/compiler/call-inferred.untouched.wat @@ -8,9 +8,10 @@ (memory $0 1) (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00c\00a\00l\00l\00-\00i\00n\00f\00e\00r\00r\00e\00d\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $call-inferred/foo (; 1 ;) (param $0 i32) (result i32) local.get $0 ) @@ -27,7 +28,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable @@ -79,7 +80,7 @@ unreachable end i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength f32.const 0 call $call-inferred/bar|trampoline f32.const 42 @@ -94,7 +95,7 @@ unreachable end ) - (func $start (; 7 ;) + (func $~start (; 7 ;) call $start:call-inferred ) ) diff --git a/tests/compiler/call-optional.optimized.wat b/tests/compiler/call-optional.optimized.wat index 36f177effa..c98b844afc 100644 --- a/tests/compiler/call-optional.optimized.wat +++ b/tests/compiler/call-optional.optimized.wat @@ -5,9 +5,10 @@ (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s") - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $call-optional/opt (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 local.get $0 @@ -20,7 +21,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -40,7 +41,7 @@ ) (func $start:call-optional (; 3 ;) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 0 i32.const 0 @@ -54,7 +55,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 4 i32.const 0 @@ -84,7 +85,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 0 i32.const 0 @@ -98,7 +99,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 4 i32.const 0 @@ -114,7 +115,7 @@ unreachable end i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 4 i32.const 5 @@ -130,7 +131,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:call-optional ) ) diff --git a/tests/compiler/call-optional.untouched.wat b/tests/compiler/call-optional.untouched.wat index 0324379363..113c73360b 100644 --- a/tests/compiler/call-optional.untouched.wat +++ b/tests/compiler/call-optional.untouched.wat @@ -7,10 +7,11 @@ (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s\00") (table $0 2 funcref) (elem (i32.const 1) $call-optional/opt|trampoline) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $call-optional/optIndirect (mut i32) (i32.const 1)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $call-optional/opt (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 local.get $1 @@ -23,7 +24,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -43,7 +44,7 @@ ) (func $start:call-optional (; 3 ;) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 0 i32.const 0 @@ -60,7 +61,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 4 i32.const 0 @@ -92,7 +93,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 0 i32.const 0 @@ -110,7 +111,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 4 i32.const 0 @@ -128,7 +129,7 @@ unreachable end i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 4 i32.const 5 @@ -146,7 +147,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:call-optional ) ) diff --git a/tests/compiler/call-super.optimized.wat b/tests/compiler/call-super.optimized.wat index 7950445536..2e9dd95f41 100644 --- a/tests/compiler/call-super.optimized.wat +++ b/tests/compiler/call-super.optimized.wat @@ -11,7 +11,7 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -419,7 +419,7 @@ unreachable end ) - (func $start (; 14 ;) + (func $~start (; 14 ;) i32.const 64 global.set $~lib/rt/stub/startOffset i32.const 64 diff --git a/tests/compiler/call-super.untouched.wat b/tests/compiler/call-super.untouched.wat index 934a6d39cd..0b5c6f6d2e 100644 --- a/tests/compiler/call-super.untouched.wat +++ b/tests/compiler/call-super.untouched.wat @@ -12,7 +12,7 @@ (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 60)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -554,7 +554,7 @@ call $call-super/test4 call $call-super/test5 ) - (func $start (; 21 ;) + (func $~start (; 21 ;) call $start:call-super ) ) diff --git a/tests/compiler/class-overloading.untouched.wat b/tests/compiler/class-overloading.untouched.wat index b77dccab36..3044d0fbe1 100644 --- a/tests/compiler/class-overloading.untouched.wat +++ b/tests/compiler/class-overloading.untouched.wat @@ -6,7 +6,7 @@ (table $0 1 funcref) (export "memory" (memory $0)) (export "test" (func $class-overloading/test)) - (start $start) + (start $~start) (func $~lib/rt/stub/__retain (; 0 ;) (param $0 i32) (result i32) local.get $0 ) @@ -29,7 +29,7 @@ i32.const 0 call $class-overloading/test ) - (func $start (; 5 ;) + (func $~start (; 5 ;) call $start:class-overloading ) ) diff --git a/tests/compiler/class-static-function.optimized.wat b/tests/compiler/class-static-function.optimized.wat index 53be60066b..c49b506f0d 100644 --- a/tests/compiler/class-static-function.optimized.wat +++ b/tests/compiler/class-static-function.optimized.wat @@ -2,11 +2,12 @@ (type $none_=>_none (func)) (memory $0 1) (data (i32.const 16) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00c\00l\00a\00s\00s\00-\00s\00t\00a\00t\00i\00c\00-\00f\00u\00n\00c\00t\00i\00o\00n\00.\00t\00s") - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) - (func $start (; 0 ;) + (start $~start) + (func $~start (; 0 ;) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength ) ) diff --git a/tests/compiler/class-static-function.untouched.wat b/tests/compiler/class-static-function.untouched.wat index 522981883c..0081860a1b 100644 --- a/tests/compiler/class-static-function.untouched.wat +++ b/tests/compiler/class-static-function.untouched.wat @@ -8,15 +8,16 @@ (data (i32.const 16) "0\00\00\00\01\00\00\00\01\00\00\000\00\00\00c\00l\00a\00s\00s\00-\00s\00t\00a\00t\00i\00c\00-\00f\00u\00n\00c\00t\00i\00o\00n\00.\00t\00s\00") (table $0 2 funcref) (elem (i32.const 1) $class-static-function/Example.staticFunc) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $class-static-function/Example.staticFunc (; 1 ;) (result i32) i32.const 42 ) (func $class-static-function/call (; 2 ;) (param $0 i32) (result i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) ) @@ -35,7 +36,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:class-static-function ) ) diff --git a/tests/compiler/class.untouched.wat b/tests/compiler/class.untouched.wat index bbb503e83d..03e6cd2052 100644 --- a/tests/compiler/class.untouched.wat +++ b/tests/compiler/class.untouched.wat @@ -11,7 +11,7 @@ (global $class/Animal.ONE (mut i32) (i32.const 1)) (export "memory" (memory $0)) (export "test" (func $class/test)) - (start $start) + (start $~start) (func $class/Animal.add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -114,7 +114,7 @@ call $~lib/rt/stub/__release local.get $3 ) - (func $start (; 8 ;) + (func $~start (; 8 ;) call $start:class ) ) diff --git a/tests/compiler/closure.json b/tests/compiler/closure.json index 5f6d7ed637..9e86903886 100644 --- a/tests/compiler/closure.json +++ b/tests/compiler/closure.json @@ -4,6 +4,8 @@ ], "stderr": [ "AS100: Not implemented.", + "AS100: Not implemented.", + "Cannot find name '$local0'.", "EOF" ] } \ No newline at end of file diff --git a/tests/compiler/closure.ts b/tests/compiler/closure.ts index e5fee482f5..cd1bca4d89 100644 --- a/tests/compiler/closure.ts +++ b/tests/compiler/closure.ts @@ -1,8 +1,24 @@ -function test($local0: i32, $local1: i32): (value: i32) => i32 { +function testParam($local0: i32, $local1: i32): (value: i32) => i32 { return function inner(value: i32) { return $local1; // closure }; } +testParam(1, 2); + +function testVar(): (value: i32) => i32 { + var $local0 = 0; + return function inner(value: i32) { + return $local0; // closure + }; +} +testVar(); + +function testLet(): (value: i32) => i32 { + let $local0 = 0; + return function inner(value: i32) { + return $local0; // closure + }; +} +testLet(); -test(1, 2); ERROR("EOF"); diff --git a/tests/compiler/comma.optimized.wat b/tests/compiler/comma.optimized.wat index 2f3f635b1e..8066067dba 100644 --- a/tests/compiler/comma.optimized.wat +++ b/tests/compiler/comma.optimized.wat @@ -7,7 +7,7 @@ (global $comma/a (mut i32) (i32.const 0)) (global $comma/b (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:comma (; 1 ;) (local $0 i32) global.get $comma/a @@ -105,7 +105,7 @@ end i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 global.get $comma/a i32.lt_s @@ -118,7 +118,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -133,7 +133,7 @@ unreachable end ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:comma ) ) diff --git a/tests/compiler/comma.untouched.wat b/tests/compiler/comma.untouched.wat index a1e6ae76a9..bced1ac570 100644 --- a/tests/compiler/comma.untouched.wat +++ b/tests/compiler/comma.untouched.wat @@ -8,7 +8,7 @@ (global $comma/a (mut i32) (i32.const 0)) (global $comma/b (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:comma (; 1 ;) (local $0 i32) (local $1 i32) @@ -141,15 +141,15 @@ call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - global.get $comma/a - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + global.get $comma/a + i32.lt_s + local.set $0 + local.get $0 + if nop global.get $comma/a i32.const 1 @@ -159,9 +159,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 i32.const 1 @@ -182,7 +181,7 @@ i32.const 3 drop ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:comma ) ) diff --git a/tests/compiler/constructor.optimized.wat b/tests/compiler/constructor.optimized.wat index c7964ea092..6e8f9a5060 100644 --- a/tests/compiler/constructor.optimized.wat +++ b/tests/compiler/constructor.optimized.wat @@ -16,7 +16,7 @@ (global $constructor/ctorAllocates (mut i32) (i32.const 0)) (global $constructor/ctorConditionallyAllocates (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -172,7 +172,7 @@ local.get $0 global.set $constructor/ctorConditionallyAllocates ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:constructor ) ) diff --git a/tests/compiler/constructor.untouched.wat b/tests/compiler/constructor.untouched.wat index a8cd22e5b4..e4c615e9a8 100644 --- a/tests/compiler/constructor.untouched.wat +++ b/tests/compiler/constructor.untouched.wat @@ -20,7 +20,7 @@ (global $constructor/ctorConditionallyAllocates (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 8)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -319,7 +319,7 @@ call $constructor/CtorConditionallyAllocates#constructor global.set $constructor/ctorConditionallyAllocates ) - (func $start (; 14 ;) + (func $~start (; 14 ;) call $start:constructor ) ) diff --git a/tests/compiler/continue.optimized.wat b/tests/compiler/continue.optimized.wat index 19e0c4aa8f..898ac25611 100644 --- a/tests/compiler/continue.optimized.wat +++ b/tests/compiler/continue.optimized.wat @@ -5,26 +5,25 @@ (export "testInherit" (func $continue/testInherit)) (func $continue/testInherit (; 0 ;) (param $0 i32) (local $1 i32) - loop $loop|0 - block $break|0 - local.get $1 - i32.const 10 - i32.ge_s - br_if $break|0 - block $continue|0 + loop $for-loop|0 + local.get $1 + i32.const 10 + i32.lt_s + if + block $for-continue|0 local.get $0 i32.const 0 local.get $1 i32.const 5 i32.eq select - br_if $continue|0 + br_if $for-continue|0 end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end ) diff --git a/tests/compiler/continue.untouched.wat b/tests/compiler/continue.untouched.wat index 7f31f8d763..61b2571776 100644 --- a/tests/compiler/continue.untouched.wat +++ b/tests/compiler/continue.untouched.wat @@ -6,23 +6,24 @@ (export "testInherit" (func $continue/testInherit)) (func $continue/testInherit (; 0 ;) (param $0 i32) (local $1 i32) - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 10 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + (local $2 i32) + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 10 + i32.lt_s + local.set $2 + local.get $2 + if + block $for-continue|0 local.get $0 if local.get $1 i32.const 5 i32.eq if - br $continue|0 + br $for-continue|0 end end end @@ -30,9 +31,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end ) ) diff --git a/tests/compiler/declare.optimized.wat b/tests/compiler/declare.optimized.wat index 23700c6665..1c82844609 100644 --- a/tests/compiler/declare.optimized.wat +++ b/tests/compiler/declare.optimized.wat @@ -9,7 +9,7 @@ (memory $0 1) (data (i32.const 16) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00d\00e\00c\00l\00a\00r\00e\00.\00t\00s") (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:declare (; 3 ;) call $declare/externalFunction global.get $declare/externalConstant @@ -36,7 +36,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:declare ) ) diff --git a/tests/compiler/declare.untouched.wat b/tests/compiler/declare.untouched.wat index 63f604bf37..99b6af48b5 100644 --- a/tests/compiler/declare.untouched.wat +++ b/tests/compiler/declare.untouched.wat @@ -10,7 +10,7 @@ (data (i32.const 16) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00d\00e\00c\00l\00a\00r\00e\00.\00t\00s\00") (table $0 1 funcref) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:declare (; 3 ;) call $declare/externalFunction global.get $declare/externalConstant @@ -39,7 +39,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:declare ) ) diff --git a/tests/compiler/do.json b/tests/compiler/do.json index b1da366ff4..59c251c705 100644 --- a/tests/compiler/do.json +++ b/tests/compiler/do.json @@ -1,5 +1,7 @@ { "asc_flags": [ - "--runtime none" + "--runtime half", + "--explicitStart", + "--use ASC_RTRACE=1" ] } \ No newline at end of file diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index edcd450dfb..bce1ce0f7d 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -1,151 +1,2376 @@ (module + (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $none_=>_i32 (func (result i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) + (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) + (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) + (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) (memory $0 1) (data (i32.const 16) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00d\00o\00.\00t\00s") - (global $do/n (mut i32) (i32.const 10)) - (global $do/m (mut i32) (i32.const 0)) - (global $do/o (mut i32) (i32.const 0)) + (data (i32.const 48) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 96) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 208) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 272) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 320) "\04\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10") + (global $do/ran (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) - (start $start) - (func $start:do (; 1 ;) + (func $do/testSimple (; 5 ;) (local $0 i32) - loop $continue|0 - global.get $do/n - i32.const 1 - i32.sub - global.set $do/n - global.get $do/m + (local $1 i32) + i32.const 10 + local.set $0 + loop $do-continue|0 + local.get $1 i32.const 1 i32.add - global.set $do/m - global.get $do/n - br_if $continue|0 + local.set $1 + local.get $0 + i32.const 1 + i32.sub + local.tee $0 + br_if $do-continue|0 end - global.get $do/n + local.get $0 if i32.const 0 i32.const 32 - i32.const 7 - i32.const 0 + i32.const 10 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $do/m + local.get $1 i32.const 10 i32.ne if i32.const 0 i32.const 32 - i32.const 8 - i32.const 0 + i32.const 11 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $do/ran + ) + (func $do/testEmpty (; 6 ;) + (local $0 i32) + (local $1 i32) i32.const 10 - global.set $do/n - loop $continue|1 - global.get $do/n - local.tee $0 + local.set $0 + loop $do-continue|0 + local.get $0 + local.tee $1 i32.const 1 i32.sub - global.set $do/n - local.get $0 - br_if $continue|1 + local.set $0 + local.get $1 + br_if $do-continue|0 end - global.get $do/n + local.get $0 i32.const -1 i32.ne if i32.const 0 i32.const 32 - i32.const 12 - i32.const 0 + i32.const 21 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $do/ran + ) + (func $do/testNested (; 7 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) i32.const 10 - global.set $do/n - i32.const 0 - global.set $do/m - loop $continue|2 - global.get $do/n + local.set $0 + loop $do-continue|0 + local.get $0 i32.const 1 i32.sub - global.set $do/n - global.get $do/m + local.set $0 + local.get $2 i32.const 1 i32.add - global.set $do/m - loop $continue|3 - global.get $do/n - i32.const 1 - i32.sub - global.set $do/n - global.get $do/o + local.set $2 + loop $do-continue|1 + local.get $1 i32.const 1 i32.add - global.set $do/o - global.get $do/n - br_if $continue|3 + local.set $1 + local.get $0 + i32.const 1 + i32.sub + local.tee $0 + br_if $do-continue|1 end - global.get $do/n + local.get $0 if i32.const 0 i32.const 32 - i32.const 24 - i32.const 2 + i32.const 39 + i32.const 4 call $~lib/builtins/abort unreachable end - global.get $do/o + local.get $1 i32.const 9 i32.ne if i32.const 0 i32.const 32 - i32.const 25 - i32.const 2 + i32.const 40 + i32.const 4 call $~lib/builtins/abort unreachable end - global.get $do/n - br_if $continue|2 + local.get $0 + br_if $do-continue|0 end - global.get $do/n + local.get $0 if i32.const 0 i32.const 32 - i32.const 27 + i32.const 42 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 43 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 9 + i32.ne + if i32.const 0 + i32.const 32 + i32.const 44 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $do/m i32.const 1 + global.set $do/ran + ) + (func $do/testAlwaysTrue (; 8 ;) + (local $0 i32) + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.ne + br_if $do-continue|0 + end + local.get $0 + i32.const 10 i32.ne if i32.const 0 i32.const 32 - i32.const 28 + i32.const 56 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $do/ran + ) + (func $do/testContinue (; 9 ;) + (local $0 i32) + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.ne + br_if $do-continue|0 + end + local.get $0 + i32.const 10 + i32.ne + if i32.const 0 + i32.const 32 + i32.const 107 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $do/o - i32.const 9 + i32.const 1 + global.set $do/ran + ) + (func $do/testNestedContinue (; 10 ;) + (local $0 i32) + (local $1 i32) + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.ne + if + loop $do-continue|1 + local.get $1 + i32.const 1 + i32.add + local.tee $1 + i32.const 10 + i32.rem_s + br_if $do-continue|1 + end + br $do-continue|0 + end + end + local.get $0 + i32.const 10 i32.ne if i32.const 0 i32.const 32 - i32.const 29 + i32.const 125 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 90 + i32.ne + if i32.const 0 + i32.const 32 + i32.const 126 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $do/ran ) - (func $start (; 2 ;) - call $start:do + (func $~lib/rt/tlsf/removeBlock (; 11 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 277 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 16 + i32.ge_u + if (result i32) + local.get $2 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 279 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + local.set $2 + i32.const 0 + else + local.get $2 + i32.const 31 + local.get $2 + i32.clz + i32.sub + local.tee $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $2 + local.get $3 + i32.const 7 + i32.sub + end + local.tee $3 + i32.const 23 + i32.lt_u + if (result i32) + local.get $2 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 292 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=20 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 + if + local.get $5 + local.get $4 + i32.store offset=20 + end + local.get $4 + if + local.get $4 + local.get $5 + i32.store offset=16 + end + local.get $1 + local.get $0 + local.get $2 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + i32.eq + if + local.get $0 + local.get $2 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + local.get $4 + i32.store offset=96 + local.get $4 + i32.eqz + if + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $1 + i32.store offset=4 + local.get $1 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $3 + i32.shl + i32.const -1 + i32.xor + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (; 12 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 207 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 + i32.const 1 + i32.and + if + local.get $3 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $2 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + local.get $3 + i32.const 3 + i32.and + i32.or + local.tee $3 + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $5 + end + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $2 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 228 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $7 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + local.get $7 + local.get $6 + i32.const 3 + i32.and + i32.or + local.tee $3 + i32.store + local.get $2 + local.set $1 + end + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 16 + i32.ge_u + if (result i32) + local.get $2 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 243 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i32.const 16 + i32.add + i32.add + local.get $4 + i32.ne + if + i32.const 0 + i32.const 64 + i32.const 244 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + local.set $4 + i32.const 0 + else + local.get $2 + i32.const 31 + local.get $2 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $4 + local.get $2 + i32.const 7 + i32.sub + end + local.tee $3 + i32.const 23 + i32.lt_u + if (result i32) + local.get $4 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 260 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $4 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $2 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + local.get $2 + i32.store offset=20 + local.get $2 + if + local.get $2 + local.get $1 + i32.store offset=16 + end + local.get $0 + local.get $4 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $3 + i32.shl + i32.or + i32.store + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (; 13 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + local.get $2 + i32.le_u + select + select + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 386 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $1 + local.get $3 + i32.const 16 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 396 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $1 + i32.const 16 + i32.sub + local.set $1 + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 408 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $2 + i32.const 32 + i32.sub + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $2 + i32.add + i32.const 16 + i32.sub + local.tee $2 + i32.const 2 + i32.store + local.get $0 + local.get $2 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/maybeInitialize (; 14 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $0 + i32.eqz + if + i32.const 1 + memory.size + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 368 + local.tee $0 + i32.const 0 + i32.store + i32.const 1936 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $1 + i32.const 23 + i32.lt_u + if + local.get $1 + i32.const 2 + i32.shl + i32.const 368 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $2 + loop $for-loop|1 + local.get $2 + i32.const 16 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.const 368 + i32.add + i32.const 0 + i32.store offset=96 + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 + end + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + i32.const 368 + i32.const 1952 + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 368 + global.set $~lib/rt/tlsf/ROOT + end + local.get $0 + ) + (func $~lib/rt/tlsf/prepareSize (; 15 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 112 + i32.const 64 + i32.const 457 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.add + i32.const -16 + i32.and + local.tee $0 + i32.const 16 + local.get $0 + i32.const 16 + i32.gt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (; 16 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if (result i32) + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + i32.const 0 + else + local.get $1 + i32.const 536870904 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + end + local.tee $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $1 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 338 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 351 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/pure/markGray (; 17 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne + if + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.const 268435456 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 2 + call $~lib/rt/__visit_members + end + ) + (func $~lib/rt/tlsf/freeBlock (; 18 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 64 + i32.const 569 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/rtrace/onfree + ) + (func $~lib/rt/pure/scanBlack (; 19 ;) (param $0 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const -1879048193 + i32.and + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 4 + call $~lib/rt/__visit_members + ) + (func $~lib/rt/pure/scan (; 20 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.eq + if + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + if + local.get $0 + call $~lib/rt/pure/scanBlack + else + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.const 536870912 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 3 + call $~lib/rt/__visit_members + end + end + ) + (func $~lib/rt/pure/collectWhite (; 21 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 536870912 + i32.eq + if (result i32) + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + else + i32.const 0 + end + if + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + ) + (func $~lib/rt/pure/__collect (; 22 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/rt/pure/ROOTS + local.tee $5 + local.tee $2 + local.set $3 + global.get $~lib/rt/pure/CUR + local.set $0 + loop $for-loop|0 + local.get $3 + local.get $0 + i32.lt_u + if + local.get $3 + i32.load + local.tee $4 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 805306368 + i32.eq + if (result i32) + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + else + i32.const 0 + end + if + local.get $4 + call $~lib/rt/pure/markGray + local.get $2 + local.get $4 + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + else + i32.const 0 + local.get $1 + i32.const 268435455 + i32.and + i32.eqz + local.get $1 + i32.const 1879048192 + i32.and + select + if + global.get $~lib/rt/tlsf/ROOT + local.get $4 + call $~lib/rt/tlsf/freeBlock + else + local.get $4 + local.get $1 + i32.const 2147483647 + i32.and + i32.store offset=4 + end + end + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|0 + end + end + local.get $2 + global.set $~lib/rt/pure/CUR + local.get $5 + local.set $0 + loop $for-loop|1 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/pure/scan + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $for-loop|1 + end + end + local.get $5 + local.set $0 + loop $for-loop|2 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.load + local.tee $1 + local.get $1 + i32.load offset=4 + i32.const 2147483647 + i32.and + i32.store offset=4 + local.get $1 + call $~lib/rt/pure/collectWhite + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $for-loop|2 + end + end + local.get $5 + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/tlsf/growMemory (; 23 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + memory.size + local.tee $2 + i32.const 16 + local.get $0 + i32.load offset=1568 + local.get $2 + i32.const 16 + i32.shl + i32.const 16 + i32.sub + i32.ne + i32.shl + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.get $1 + local.get $1 + i32.const 536870904 + i32.lt_u + select + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 24 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + if + i32.const 0 + i32.const 64 + i32.const 365 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.get $2 + i32.sub + local.tee $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store + local.get $2 + local.get $1 + i32.const 16 + i32.add + i32.add + local.tee $1 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + i32.load + i32.const -3 + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 25 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/collectLock + if + i32.const 0 + i32.const 64 + i32.const 490 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 1 + global.set $~lib/rt/tlsf/collectLock + call $~lib/rt/pure/__collect + i32.const 0 + global.set $~lib/rt/tlsf/collectLock + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $0 + local.get $3 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 502 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 510 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $2 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $2 + call $~lib/rt/rtrace/onalloc + local.get $2 + ) + (func $~lib/rt/tlsf/__alloc (; 26 ;) (param $0 i32) (param $1 i32) (result i32) + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + local.get $1 + i32.store offset=8 + local.get $0 + i32.const 16 + i32.add + ) + (func $~lib/rt/pure/increment (; 27 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 176 + i32.const 104 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/rtrace/onincrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 176 + i32.const 107 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $do/Ref#constructor (; 28 ;) (result i32) + (local $0 i32) + i32.const 0 + i32.const 3 + call $~lib/rt/tlsf/__alloc + local.tee $0 + i32.const 356 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/__typeinfo (; 29 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 320 + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 324 + i32.add + i32.load + ) + (func $~lib/memory/memory.copy (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $2 + local.set $3 + local.get $0 + local.get $1 + i32.eq + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 + i32.lt_u + if + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $0 + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $1 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + br $while-continue|1 + end + end + end + loop $while-continue|2 + local.get $3 + if + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $while-continue|2 + end + end + else + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|3 + local.get $0 + local.get $3 + i32.add + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 + end + end + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $while-continue|4 + end + end + end + loop $while-continue|5 + local.get $3 + if + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|5 + end + end + end + end + ) + (func $~lib/rt/tlsf/__free (; 31 ;) (param $0 i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $0 + select + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 593 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/growRoots (; 32 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS + local.tee $1 + i32.sub + local.tee $2 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 + i32.gt_u + select + local.tee $3 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $0 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onfree + local.get $0 + local.get $1 + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onalloc + local.get $1 + call $~lib/rt/tlsf/__free + end + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $2 + i32.add + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 33 ;) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 4 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 34 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 268435455 + i32.and + local.set $1 + local.get $0 + call $~lib/rt/rtrace/ondecrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 176 + i32.const 115 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $2 + i32.const -2147483648 + i32.and + if + local.get $0 + i32.const -2147483648 + i32.store offset=4 + else + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + else + local.get $1 + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 176 + i32.const 124 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 16 + i32.and + if + local.get $0 + local.get $1 + i32.const 1 + i32.sub + local.get $2 + i32.const -268435456 + i32.and + i32.or + i32.store offset=4 + else + local.get $0 + local.get $1 + i32.const 1 + i32.sub + i32.const -1342177280 + i32.or + i32.store offset=4 + local.get $2 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + end + end + ) + (func $~lib/rt/pure/__release (; 35 ;) (param $0 i32) + local.get $0 + i32.const 356 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $do/testRef (; 36 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + call $do/Ref#constructor + local.set $0 + loop $do-continue|0 + local.get $1 + i32.const 1 + i32.add + local.tee $1 + i32.const 10 + i32.eq + if + i32.const 0 + local.set $2 + local.get $0 + if + local.get $0 + call $~lib/rt/pure/__release + end + else + call $do/Ref#constructor + local.set $2 + local.get $0 + call $~lib/rt/pure/__release + end + local.get $2 + local.tee $0 + br_if $do-continue|0 + end + local.get $1 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 141 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + if + i32.const 0 + i32.const 32 + i32.const 142 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $do/ran + local.get $0 + call $~lib/rt/pure/__release + ) + (func $do/testRefAutorelease (; 37 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + call $do/Ref#constructor + local.set $0 + loop $do-continue|0 + block $do-break|0 + local.get $1 + i32.const 1 + i32.add + local.tee $1 + i32.const 10 + i32.eq + if + i32.const 0 + local.set $2 + local.get $0 + if + local.get $0 + call $~lib/rt/pure/__release + end + i32.const 0 + local.set $0 + br $do-break|0 + end + call $do/Ref#constructor + local.tee $2 + call $~lib/rt/pure/__release + local.get $2 + br_if $do-continue|0 + end + end + local.get $1 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 161 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + if + i32.const 0 + i32.const 32 + i32.const 162 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $do/ran + local.get $0 + call $~lib/rt/pure/__release + ) + (func $start:do (; 38 ;) + i32.const 0 + global.set $do/ran + call $do/testSimple + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 16 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testEmpty + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 26 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testNested + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 49 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testAlwaysTrue + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 61 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + i32.const 1 + global.set $do/ran + i32.const 0 + global.set $do/ran + i32.const 1 + global.set $do/ran + i32.const 0 + global.set $do/ran + i32.const 1 + global.set $do/ran + i32.const 0 + global.set $do/ran + call $do/testContinue + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 112 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testNestedContinue + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 131 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testRef + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 147 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testRefAutorelease + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 167 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 39 ;) + global.get $~started + if + return + else + i32.const 1 + global.set $~started + end + call $start:do + ) + (func $~lib/rt/pure/__visit (; 40 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 356 + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $0 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + local.get $1 + i32.const 1 + i32.ne + if + local.get $1 + i32.const 2 + i32.sub + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + end + local.get $0 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $0 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 176 + i32.const 75 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $0 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 176 + i32.const 86 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $1 + i32.const 1879048192 + i32.and + if + local.get $0 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 176 + i32.const 97 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 41 ;) (param $0 i32) (param $1 i32) + block $switch$1$default + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + unreachable ) ) diff --git a/tests/compiler/do.ts b/tests/compiler/do.ts index 38091a7e92..82cdbc8f4e 100644 --- a/tests/compiler/do.ts +++ b/tests/compiler/do.ts @@ -1,29 +1,167 @@ -var n = 10; -var m = 0; -do { - n--; - m++; -} while (n); -assert(n == 0); -assert(m == 10); - -n = 10; -do; while(n--); -assert(n == -1); - -n = 10; -m = 0; -var o = 0; -do { - n--; - m++; +var ran: bool; + +function testSimple(): void { + var n = 10; + var m = 0; + do { + n--; + m++; + } while (n); + assert(n == 0); + assert(m == 10); + ran = true; +} +ran = false; +testSimple(); +assert(ran); + +function testEmpty(): void { + var n = 10; + do; while(n--); + assert(n == -1); + ran = true; +} +ran = false; +testEmpty(); +assert(ran); + +function testNested(): void { + var n = 10; + var m = 0; + var o = 0; do { n--; - o++; + m++; + do { + n--; + o++; + } while (n); + assert(n == 0); + assert(o == 9); } while (n); assert(n == 0); + assert(m == 1); assert(o == 9); -} while (n); -assert(n == 0); -assert(m == 1); -assert(o == 9); + ran = true; +} +ran = false; +testNested(); +assert(ran); + +function testAlwaysTrue(): void { + var i = 0; + do { + if (++i == 10) break; + } while (true); + assert(i == 10); + ran = true; +} +ran = false; +testAlwaysTrue(); +assert(ran); + +function testAlwaysFalse(): void { + var i = 0; + do { + ++i; + } while (false); + assert(i == 1); + ran = true; +} +ran = false; +testAlwaysFalse(); +assert(ran); + +function testAlwaysBreaks(): void { + var i = 0; + do { + ++i; + break; + } while (i); + assert(i == 1); + ran = true; +} +ran = false; +testAlwaysBreaks(); +assert(ran); + +function testAlwaysReturns(): void { + var i = 0; + do { + ++i; + ran = true; + return; + } while (i); + assert(false); +} +ran = false; +testAlwaysReturns(); +assert(ran); + +function testContinue(): void { + var i = 0; + do { + if (++i == 10) break; + continue; + } while (i); + assert(i == 10); + ran = true; +} +ran = false; +testContinue(); +assert(ran); + +function testNestedContinue(): void { + var i = 0; + var j = 0; + do { + if (++i == 10) break; + do { + if ((++j % 10) == 0) break; + continue; + } while (j); + continue; + } while (i); + assert(i == 10); + assert(j == 90); + ran = true; +} +ran = false; +testNestedContinue(); +assert(ran); + +class Ref {} +function testRef(): void { + var i = 0; + var ref: Ref | null = new Ref(); + do { + if (++i == 10) ref = null; + else ref = new Ref(); + } while (ref); + assert(i == 10); + assert(!ref); + ran = true; +} +ran = false; +testRef(); +assert(ran); + +function getRef(): Ref { + return new Ref(); +} +function testRefAutorelease(): void { + var i = 0; + var ref: Ref | null = new Ref(); + do { + if (++i == 10) { + ref = null; + break; + } + } while (getRef()); // must not leak + assert(i == 10); + assert(!ref); + ran = true; +} +ran = false; +testRefAutorelease(); +assert(ran); diff --git a/tests/compiler/do.untouched.wat b/tests/compiler/do.untouched.wat index ff316a9e6e..28466b9fdc 100644 --- a/tests/compiler/do.untouched.wat +++ b/tests/compiler/do.untouched.wat @@ -1,167 +1,4104 @@ (module (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) + (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) + (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) + (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) (memory $0 1) (data (i32.const 16) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00d\00o\00.\00t\00s\00") + (data (i32.const 48) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00") + (data (i32.const 96) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") + (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") + (data (i32.const 208) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") + (data (i32.const 272) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 320) "\04\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00") (table $0 1 funcref) - (global $do/n (mut i32) (i32.const 10)) - (global $do/m (mut i32) (i32.const 0)) - (global $do/o (mut i32) (i32.const 0)) + (global $do/ran (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 320)) + (global $~lib/heap/__heap_base i32 (i32.const 356)) + (export "_start" (func $~start)) (export "memory" (memory $0)) - (start $start) - (func $start:do (; 1 ;) + (func $do/testSimple (; 5 ;) (local $0 i32) - loop $continue|0 - global.get $do/n + (local $1 i32) + (local $2 i32) + i32.const 10 + local.set $0 + i32.const 0 + local.set $1 + loop $do-continue|0 + local.get $0 i32.const 1 i32.sub - global.set $do/n - global.get $do/m + local.set $0 + local.get $1 i32.const 1 i32.add - global.set $do/m - global.get $do/n - br_if $continue|0 + local.set $1 + local.get $0 + local.set $2 + local.get $2 + br_if $do-continue|0 end - global.get $do/n + local.get $0 i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 7 - i32.const 0 + i32.const 10 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $do/m + local.get $1 i32.const 10 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 8 - i32.const 0 + i32.const 11 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $do/ran + ) + (func $do/testEmpty (; 6 ;) + (local $0 i32) + (local $1 i32) i32.const 10 - global.set $do/n - loop $continue|1 + local.set $0 + loop $do-continue|0 nop - global.get $do/n - local.tee $0 + local.get $0 + local.tee $1 i32.const 1 i32.sub - global.set $do/n - local.get $0 - br_if $continue|1 + local.set $0 + local.get $1 + local.set $1 + local.get $1 + br_if $do-continue|0 end - global.get $do/n + local.get $0 i32.const -1 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 12 - i32.const 0 + i32.const 21 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $do/ran + ) + (func $do/testNested (; 7 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) i32.const 10 - global.set $do/n + local.set $0 + i32.const 0 + local.set $1 i32.const 0 - global.set $do/m - loop $continue|2 - global.get $do/n + local.set $2 + loop $do-continue|0 + local.get $0 i32.const 1 i32.sub - global.set $do/n - global.get $do/m + local.set $0 + local.get $1 i32.const 1 i32.add - global.set $do/m - loop $continue|3 - global.get $do/n + local.set $1 + loop $do-continue|1 + local.get $0 i32.const 1 i32.sub - global.set $do/n - global.get $do/o + local.set $0 + local.get $2 i32.const 1 i32.add - global.set $do/o - global.get $do/n - br_if $continue|3 + local.set $2 + local.get $0 + local.set $3 + local.get $3 + br_if $do-continue|1 end - global.get $do/n + local.get $0 i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 24 - i32.const 2 + i32.const 39 + i32.const 4 call $~lib/builtins/abort unreachable end - global.get $do/o + local.get $2 i32.const 9 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 25 - i32.const 2 + i32.const 40 + i32.const 4 call $~lib/builtins/abort unreachable end - global.get $do/n - br_if $continue|2 + local.get $0 + local.set $3 + local.get $3 + br_if $do-continue|0 end - global.get $do/n + local.get $0 i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 27 + i32.const 42 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + i32.eqz + if i32.const 0 + i32.const 32 + i32.const 43 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 9 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 44 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $do/m i32.const 1 + global.set $do/ran + ) + (func $do/testAlwaysTrue (; 8 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + block $do-break|0 + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + br $do-break|0 + end + i32.const 1 + local.set $1 + local.get $1 + br_if $do-continue|0 + end + end + local.get $0 + i32.const 10 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 28 + i32.const 56 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $do/ran + ) + (func $do/testAlwaysFalse (; 9 ;) + (local $0 i32) + i32.const 0 + local.set $0 + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $0 + i32.const 1 + i32.eq + i32.eqz + if i32.const 0 + i32.const 32 + i32.const 68 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $do/o - i32.const 9 + i32.const 1 + global.set $do/ran + ) + (func $do/testAlwaysBreaks (; 10 ;) + (local $0 i32) + i32.const 0 + local.set $0 + block $do-break|0 + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $do-break|0 + end + unreachable + end + local.get $0 + i32.const 1 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 29 + i32.const 81 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $do/ran + ) + (func $do/testAlwaysReturns (; 11 ;) + (local $0 i32) + i32.const 0 + local.set $0 + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.set $0 + i32.const 1 + global.set $do/ran + return + end + unreachable + ) + (func $do/testContinue (; 12 ;) + (local $0 i32) + i32.const 0 + local.set $0 + block $do-break|0 + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + br $do-break|0 + end + br $do-continue|0 + end + unreachable + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if i32.const 0 + i32.const 32 + i32.const 107 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $do/ran ) - (func $start (; 2 ;) - call $start:do + (func $do/testNestedContinue (; 13 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + i32.const 0 + local.set $1 + block $do-break|0 + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + br $do-break|0 + end + block $do-break|1 + loop $do-continue|1 + local.get $1 + i32.const 1 + i32.add + local.tee $1 + i32.const 10 + i32.rem_s + i32.const 0 + i32.eq + if + br $do-break|1 + end + br $do-continue|1 + end + unreachable + end + br $do-continue|0 + end + unreachable + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 125 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 90 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 126 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $do/ran + ) + (func $~lib/rt/tlsf/removeBlock (; 14 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 277 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $3 + local.get $3 + i32.const 16 + i32.ge_u + if (result i32) + local.get $3 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 279 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $4 + local.get $3 + i32.const 4 + i32.shr_u + local.set $5 + else + i32.const 31 + local.get $3 + i32.clz + i32.sub + local.set $4 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $5 + local.get $4 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $4 + end + local.get $4 + i32.const 23 + i32.lt_u + if (result i32) + local.get $5 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 292 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=16 + local.set $6 + local.get $1 + i32.load offset=20 + local.set $7 + local.get $6 + if + local.get $6 + local.get $7 + i32.store offset=20 + end + local.get $7 + if + local.get $7 + local.get $6 + i32.store offset=16 + end + local.get $1 + local.get $0 + local.set $10 + local.get $4 + local.set $9 + local.get $5 + local.set $8 + local.get $10 + local.get $9 + i32.const 4 + i32.shl + local.get $8 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + i32.eq + if + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $5 + local.set $9 + local.get $7 + local.set $8 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $9 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store offset=96 + local.get $7 + i32.eqz + if + local.get $0 + local.set $9 + local.get $4 + local.set $8 + local.get $9 + local.get $8 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $9 + local.get $0 + local.set $8 + local.get $4 + local.set $11 + local.get $9 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $9 + local.set $10 + local.get $8 + local.get $11 + i32.const 2 + i32.shl + i32.add + local.get $10 + i32.store offset=4 + local.get $9 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $4 + i32.shl + i32.const -1 + i32.xor + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (; 15 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 207 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.set $3 + local.get $3 + i32.const 16 + i32.add + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $4 + local.get $4 + i32.load + local.set $5 + local.get $5 + i32.const 1 + i32.and + if + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $3 + local.get $3 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + i32.const 3 + i32.and + local.get $3 + i32.or + local.tee $2 + i32.store + local.get $1 + local.set $6 + local.get $6 + i32.const 16 + i32.add + local.get $6 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $4 + local.get $4 + i32.load + local.set $5 + end + end + local.get $2 + i32.const 2 + i32.and + if + local.get $1 + local.set $6 + local.get $6 + i32.const 4 + i32.sub + i32.load + local.set $6 + local.get $6 + i32.load + local.set $3 + local.get $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 228 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $7 + local.get $7 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $6 + call $~lib/rt/tlsf/removeBlock + local.get $6 + local.get $3 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $2 + i32.store + local.get $6 + local.set $1 + end + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + i32.store + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $8 + local.get $8 + i32.const 16 + i32.ge_u + if (result i32) + local.get $8 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 243 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.add + local.get $8 + i32.add + local.get $4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 244 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $8 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $9 + local.get $8 + i32.const 4 + i32.shr_u + local.set $10 + else + i32.const 31 + local.get $8 + i32.clz + i32.sub + local.set $9 + local.get $8 + local.get $9 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $10 + local.get $9 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $9 + end + local.get $9 + i32.const 23 + i32.lt_u + if (result i32) + local.get $10 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 260 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $7 + local.get $9 + local.set $3 + local.get $10 + local.set $6 + local.get $7 + local.get $3 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $11 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + local.get $11 + i32.store offset=20 + local.get $11 + if + local.get $11 + local.get $1 + i32.store offset=16 + end + local.get $0 + local.set $12 + local.get $9 + local.set $7 + local.get $10 + local.set $3 + local.get $1 + local.set $6 + local.get $12 + local.get $7 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $9 + i32.shl + i32.or + i32.store + local.get $0 + local.set $13 + local.get $9 + local.set $12 + local.get $0 + local.set $3 + local.get $9 + local.set $6 + local.get $3 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $10 + i32.shl + i32.or + local.set $7 + local.get $13 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $1 + local.get $2 + i32.le_u + if (result i32) + local.get $1 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 386 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + local.set $4 + i32.const 0 + local.set $5 + local.get $4 + if + local.get $1 + local.get $4 + i32.const 16 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 396 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $4 + i32.eq + if + local.get $1 + i32.const 16 + i32.sub + local.set $1 + local.get $4 + i32.load + local.set $5 + else + nop + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 408 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.set $6 + local.get $6 + i32.const 48 + i32.lt_u + if + i32.const 0 + return + end + local.get $6 + i32.const 16 + i32.const 1 + i32.shl + i32.sub + local.set $7 + local.get $1 + local.set $8 + local.get $8 + local.get $7 + i32.const 1 + i32.or + local.get $5 + i32.const 2 + i32.and + i32.or + i32.store + local.get $8 + i32.const 0 + i32.store offset=16 + local.get $8 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $6 + i32.add + i32.const 16 + i32.sub + local.set $4 + local.get $4 + i32.const 0 + i32.const 2 + i32.or + i32.store + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/maybeInitialize (; 17 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $0 + local.get $0 + i32.eqz + if + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const -16 + i32.and + local.set $1 + memory.size + local.set $2 + local.get $1 + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $3 + local.get $2 + i32.gt_s + if (result i32) + local.get $3 + local.get $2 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $1 + local.set $0 + local.get $0 + i32.const 0 + i32.store + local.get $0 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $0 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $8 + local.get $7 + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=4 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u + local.set $7 + local.get $7 + if + local.get $0 + local.set $11 + local.get $5 + local.set $10 + local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $9 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + local.get $8 + i32.const 1 + i32.add + local.set $8 + br $for-loop|1 + end + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|0 + end + end + local.get $0 + local.get $1 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $0 + global.set $~lib/rt/tlsf/ROOT + end + local.get $0 + ) + (func $~lib/rt/tlsf/prepareSize (; 18 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 112 + i32.const 64 + i32.const 457 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $1 + i32.const 16 + local.tee $2 + local.get $1 + local.get $2 + i32.gt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (; 19 ;) (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 $8 i32) + (local $9 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $2 + local.get $1 + i32.const 4 + i32.shr_u + local.set $3 + else + local.get $1 + i32.const 536870904 + i32.lt_u + if (result i32) + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $1 + end + local.set $4 + i32.const 31 + local.get $4 + i32.clz + i32.sub + local.set $2 + local.get $4 + local.get $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $3 + local.get $2 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $2 + end + local.get $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $3 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 338 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $5 + local.get $2 + local.set $4 + local.get $5 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + i32.const 0 + local.set $7 + local.get $6 + i32.eqz + if + local.get $0 + i32.load + i32.const 0 + i32.const -1 + i32.xor + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.set $5 + local.get $5 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $5 + i32.ctz + local.set $2 + local.get $0 + local.set $8 + local.get $2 + local.set $4 + local.get $8 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 351 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $4 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $7 + end + else + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $4 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/pure/markGray (; 20 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne + if + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 268435456 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 2 + call $~lib/rt/__visit_members + end + ) + (func $~lib/rt/tlsf/freeBlock (; 21 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 569 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/rtrace/onfree + ) + (func $~lib/rt/pure/scanBlack (; 22 ;) (param $0 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 0 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 4 + call $~lib/rt/__visit_members + ) + (func $~lib/rt/pure/scan (; 23 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.eq + if + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + if + local.get $0 + call $~lib/rt/pure/scanBlack + else + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 536870912 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 3 + call $~lib/rt/__visit_members + end + end + ) + (func $~lib/rt/pure/collectWhite (; 24 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 536870912 + i32.eq + if (result i32) + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + else + i32.const 0 + end + if + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 0 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + ) + (func $~lib/rt/pure/__collect (; 25 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/rt/pure/ROOTS + local.set $0 + local.get $0 + local.set $1 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $2 + i32.load + local.set $5 + local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 + i32.const 1879048192 + i32.and + i32.const 805306368 + i32.eq + if (result i32) + local.get $6 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + else + i32.const 0 + end + if + local.get $5 + call $~lib/rt/pure/markGray + local.get $1 + local.get $5 + i32.store + local.get $1 + i32.const 4 + i32.add + local.set $1 + else + local.get $6 + i32.const 1879048192 + i32.and + i32.const 0 + i32.eq + if (result i32) + local.get $6 + i32.const 268435455 + i32.and + i32.eqz + else + i32.const 0 + end + if + global.get $~lib/rt/tlsf/ROOT + local.get $5 + call $~lib/rt/tlsf/freeBlock + else + local.get $5 + local.get $6 + i32.const -2147483648 + i32.const -1 + i32.xor + i32.and + i32.store offset=4 + end + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $for-loop|0 + end + end + local.get $1 + global.set $~lib/rt/pure/CUR + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if + local.get $3 + i32.load + call $~lib/rt/pure/scan + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if + local.get $3 + i32.load + local.set $4 + local.get $4 + local.get $4 + i32.load offset=4 + i32.const -2147483648 + i32.const -1 + i32.xor + i32.and + i32.store offset=4 + local.get $4 + call $~lib/rt/pure/collectWhite + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|2 + end + end + local.get $0 + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/tlsf/growMemory (; 26 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + i32.const 536870904 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.set $1 + end + memory.size + local.set $2 + local.get $1 + i32.const 16 + local.get $2 + i32.const 16 + i32.shl + i32.const 16 + i32.sub + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + i32.ne + i32.shl + i32.add + local.set $1 + local.get $1 + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $4 + local.get $2 + local.tee $3 + local.get $4 + local.tee $5 + local.get $3 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $7 + local.get $0 + local.get $2 + i32.const 16 + i32.shl + local.get $7 + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 365 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.sub + local.set $4 + local.get $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + local.set $5 + local.get $5 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const 1 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 28 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/collectLock + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 490 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + global.get $~lib/gc/gc.auto + if + i32.const 1 + global.set $~lib/rt/tlsf/collectLock + call $~lib/rt/pure/__collect + i32.const 0 + global.set $~lib/rt/tlsf/collectLock + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 502 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + end + else + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 507 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + end + end + local.get $3 + i32.load + i32.const -4 + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 510 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 0 + i32.store offset=4 + local.get $3 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $3 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $3 + local.get $2 + call $~lib/rt/tlsf/prepareBlock + local.get $3 + call $~lib/rt/rtrace/onalloc + local.get $3 + ) + (func $~lib/rt/tlsf/__alloc (; 29 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $2 + local.get $2 + local.get $1 + i32.store offset=8 + local.get $2 + i32.const 16 + i32.add + ) + (func $~lib/rt/pure/increment (; 30 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 104 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/rtrace/onincrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 107 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 31 ;) (param $0 i32) (result i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $do/Ref#constructor (; 32 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + ) + (func $~lib/rt/__typeinfo (; 33 ;) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/__rtti_base + local.set $1 + local.get $0 + local.get $1 + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $0 + i32.const 8 + i32.mul + i32.add + i32.load + ) + (func $~lib/util/memory/memcpy (; 34 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if + local.get $0 + local.tee $6 + i32.const 1 + i32.add + local.set $0 + local.get $6 + local.get $1 + local.tee $6 + i32.const 1 + i32.add + local.set $1 + local.get $6 + i32.load8_u + i32.store8 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + br $while-continue|0 + end + end + local.get $0 + i32.const 3 + i32.and + i32.const 0 + i32.eq + if + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $1 + i32.const 4 + i32.add + i32.load + i32.store + local.get $0 + i32.const 8 + i32.add + local.get $1 + i32.const 8 + i32.add + i32.load + i32.store + local.get $0 + i32.const 12 + i32.add + local.get $1 + i32.const 12 + i32.add + i32.load + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|1 + end + end + local.get $2 + i32.const 8 + i32.and + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $1 + i32.const 4 + i32.add + i32.load + i32.store + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + end + local.get $2 + i32.const 4 + i32.and + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.set $0 + local.get $1 + i32.const 4 + i32.add + local.set $1 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $0 + local.get $1 + i32.load16_u + i32.store16 + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + return + end + local.get $2 + i32.const 32 + i32.ge_u + if + block $break|2 + block $case2|2 + block $case1|2 + block $case0|2 + local.get $0 + i32.const 3 + i32.and + local.set $5 + local.get $5 + i32.const 1 + i32.eq + br_if $case0|2 + local.get $5 + i32.const 2 + i32.eq + br_if $case1|2 + local.get $5 + i32.const 3 + i32.eq + br_if $case2|2 + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 3 + i32.sub + local.set $2 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 1 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 24 + i32.shr_u + local.get $4 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 5 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 24 + i32.shr_u + local.get $3 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 9 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 24 + i32.shr_u + local.get $4 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 13 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 24 + i32.shr_u + local.get $3 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|3 + end + end + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 2 + i32.sub + local.set $2 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 2 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 16 + i32.shr_u + local.get $4 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 6 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 16 + i32.shr_u + local.get $3 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 10 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 16 + i32.shr_u + local.get $4 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 14 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 16 + i32.shr_u + local.get $3 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|4 + end + end + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 3 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 8 + i32.shr_u + local.get $4 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 7 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 8 + i32.shr_u + local.get $3 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 11 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 8 + i32.shr_u + local.get $4 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 15 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 8 + i32.shr_u + local.get $3 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|5 + end + end + br $break|2 + end + end + local.get $2 + i32.const 16 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 8 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 4 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + ) + (func $~lib/memory/memory.copy (; 35 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $5 + local.get $4 + i32.eq + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $4 + local.get $3 + i32.add + local.get $5 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $5 + local.get $3 + i32.add + local.get $4 + i32.le_u + end + if + local.get $5 + local.get $4 + local.get $3 + call $~lib/util/memory/memcpy + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $4 + i32.lt_u + if + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $5 + local.tee $7 + i32.const 1 + i32.add + local.set $5 + local.get $7 + local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 + i32.load8_u + i32.store8 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if + local.get $5 + local.get $4 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $while-continue|1 + end + end + end + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if + local.get $5 + local.tee $7 + i32.const 1 + i32.add + local.set $5 + local.get $7 + local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $while-continue|2 + end + end + else + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 + end + end + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + local.get $3 + i32.add + local.get $4 + local.get $3 + i32.add + i64.load + i64.store + br $while-continue|4 + end + end + end + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|5 + end + end + end + end + ) + (func $~lib/rt/tlsf/__free (; 36 ;) (param $0 i32) + local.get $0 + i32.const 0 + i32.ne + if (result i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 593 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/growRoots (; 37 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/rt/pure/ROOTS + local.set $0 + global.get $~lib/rt/pure/CUR + local.get $0 + i32.sub + local.set $1 + local.get $1 + i32.const 2 + i32.mul + local.tee $2 + i32.const 64 + i32.const 2 + i32.shl + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + local.set $4 + local.get $4 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.set $5 + local.get $5 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onfree + local.get $5 + local.get $0 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onalloc + local.get $0 + call $~lib/rt/tlsf/__free + end + local.get $5 + global.set $~lib/rt/pure/ROOTS + local.get $5 + local.get $1 + i32.add + global.set $~lib/rt/pure/CUR + local.get $5 + local.get $4 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 38 ;) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.set $1 + local.get $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 4 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 39 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.and + local.set $2 + local.get $0 + call $~lib/rt/rtrace/ondecrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 115 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + else + local.get $0 + i32.const -2147483648 + i32.const 0 + i32.or + i32.const 0 + i32.or + i32.store offset=4 + end + else + local.get $2 + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 124 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 16 + i32.and + i32.eqz + if + local.get $0 + i32.const -2147483648 + i32.const 805306368 + i32.or + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + else + local.get $0 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + end + end + ) + (func $~lib/rt/pure/__release (; 40 ;) (param $0 i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $do/testRef (; 41 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + local.set $0 + i32.const 0 + call $do/Ref#constructor + local.set $1 + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + i32.const 0 + local.tee $2 + local.get $1 + local.tee $3 + i32.ne + if + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $3 + call $~lib/rt/pure/__release + end + local.get $2 + local.set $1 + else + i32.const 0 + call $do/Ref#constructor + local.set $3 + local.get $1 + call $~lib/rt/pure/__release + local.get $3 + local.set $1 + end + local.get $1 + local.set $3 + local.get $3 + br_if $do-continue|0 + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 141 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 142 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $do/ran + local.get $1 + call $~lib/rt/pure/__release + ) + (func $do/getRef (; 42 ;) (result i32) + i32.const 0 + call $do/Ref#constructor + ) + (func $do/testRefAutorelease (; 43 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 0 + local.set $0 + i32.const 0 + call $do/Ref#constructor + local.set $1 + block $do-break|0 + loop $do-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + i32.const 0 + local.tee $2 + local.get $1 + local.tee $3 + i32.ne + if + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $3 + call $~lib/rt/pure/__release + end + local.get $2 + local.set $1 + br $do-break|0 + end + call $do/getRef + local.tee $2 + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + br_if $do-continue|0 + end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 161 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 162 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $do/ran + local.get $1 + call $~lib/rt/pure/__release + ) + (func $start:do (; 44 ;) + i32.const 0 + global.set $do/ran + call $do/testSimple + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 16 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testEmpty + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 26 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testNested + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 49 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testAlwaysTrue + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 61 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testAlwaysFalse + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 73 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testAlwaysBreaks + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 86 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testAlwaysReturns + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 99 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testContinue + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 112 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testNestedContinue + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 131 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testRef + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 147 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $do/ran + call $do/testRefAutorelease + global.get $do/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 167 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 45 ;) + global.get $~started + if + return + else + i32.const 1 + global.set $~started + end + call $start:do + ) + (func $~lib/rt/pure/__visit (; 46 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $2 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + block $case0|0 + local.get $1 + local.set $3 + local.get $3 + i32.const 1 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + local.get $3 + i32.const 3 + i32.eq + br_if $case2|0 + local.get $3 + i32.const 4 + i32.eq + br_if $case3|0 + local.get $3 + i32.const 5 + i32.eq + br_if $case4|0 + br $case5|0 + end + local.get $2 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $2 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 75 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $2 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $2 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $2 + i32.load offset=4 + local.set $3 + local.get $3 + i32.const -268435456 + i32.and + local.get $3 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 86 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $3 + i32.const 1 + i32.add + i32.store offset=4 + local.get $3 + i32.const 1879048192 + i32.and + i32.const 0 + i32.ne + if + local.get $2 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $2 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 97 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + end + ) + (func $~lib/rt/__visit_members (; 47 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + block $switch$1$default + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + unreachable ) ) diff --git a/tests/compiler/enum.optimized.wat b/tests/compiler/enum.optimized.wat index 37ad44198a..4dd89795bb 100644 --- a/tests/compiler/enum.optimized.wat +++ b/tests/compiler/enum.optimized.wat @@ -60,8 +60,8 @@ (export "SelfReference.ONE" (global $enum/SelfReference.ONE)) (export "SelfReferenceConst.ZERO" (global $enum/SelfReferenceConst.ZERO)) (export "SelfReferenceConst.ONE" (global $enum/SelfReferenceConst.ONE)) - (start $start) - (func $start (; 0 ;) + (start $~start) + (func $~start (; 0 ;) i32.const 0 global.set $enum/NonConstant.ZERO i32.const 1 diff --git a/tests/compiler/enum.untouched.wat b/tests/compiler/enum.untouched.wat index 86b3fb1da6..6ff471bb34 100644 --- a/tests/compiler/enum.untouched.wat +++ b/tests/compiler/enum.untouched.wat @@ -63,7 +63,7 @@ (export "SelfReference.ONE" (global $enum/SelfReference.ONE)) (export "SelfReferenceConst.ZERO" (global $enum/SelfReferenceConst.ZERO)) (export "SelfReferenceConst.ONE" (global $enum/SelfReferenceConst.ONE)) - (start $start) + (start $~start) (func $enum/getZero (; 0 ;) (result i32) i32.const 0 ) @@ -79,7 +79,7 @@ global.get $enum/NonConstant.ONE drop ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:enum ) ) diff --git a/tests/compiler/exportimport-table.untouched.wat b/tests/compiler/exportimport-table.untouched.wat index b34433f6b3..603e483733 100644 --- a/tests/compiler/exportimport-table.untouched.wat +++ b/tests/compiler/exportimport-table.untouched.wat @@ -6,7 +6,7 @@ (global $exportimport-table/f (mut i32) (i32.const 1)) (export "memory" (memory $0)) (export "table" (table $0)) - (start $start) + (start $~start) (func $start:exportimport-table~anonymous|0 (; 0 ;) nop ) @@ -14,7 +14,7 @@ global.get $exportimport-table/f drop ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:exportimport-table ) ) diff --git a/tests/compiler/exports.optimized.wat b/tests/compiler/exports.optimized.wat index 9ddc149f9a..1b03e3c08b 100644 --- a/tests/compiler/exports.optimized.wat +++ b/tests/compiler/exports.optimized.wat @@ -15,12 +15,12 @@ (global $exports/outer.inner.a i32 (i32.const 42)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $exports/Car i32 (i32.const 3)) (global $exports/vehicles.Car i32 (i32.const 4)) (export "memory" (memory $0)) (export "add" (func $exports/add)) - (export "__setargc" (func $~lib/setargc)) + (export "__argumentsLength" (global $~argumentsLength)) (export "subOpt" (func $exports/subOpt|trampoline)) (export "math.sub" (func $exports/subOpt)) (export "Animal.CAT" (global $exports/Animal.CAT)) @@ -46,7 +46,7 @@ (export "vehicles.Car.TIRES" (global $exports/vehicles.Car.TIRES)) (export "vehicles.Car.getNumTires" (func $exports/Car.getNumTires)) (export "outer.inner.a" (global $exports/outer.inner.a)) - (start $start) + (start $~start) (func $exports/add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -141,7 +141,7 @@ (func $exports/Car#openDoors (; 7 ;) (param $0 i32) nop ) - (func $start (; 8 ;) + (func $~start (; 8 ;) i32.const 16 global.set $~lib/rt/stub/startOffset i32.const 16 @@ -151,7 +151,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -165,15 +165,11 @@ local.get $1 call $exports/subOpt ) - (func $~lib/setargc (; 10 ;) (param $0 i32) - local.get $0 - global.set $~lib/argc - ) - (func $exports/Car#constructor|trampoline (; 11 ;) (param $0 i32) (param $1 i32) (result i32) + (func $exports/Car#constructor|trampoline (; 10 ;) (param $0 i32) (param $1 i32) (result i32) block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable @@ -196,11 +192,11 @@ i32.store local.get $0 ) - (func $exports/vehicles.Car#constructor|trampoline (; 12 ;) (param $0 i32) (param $1 i32) (result i32) + (func $exports/vehicles.Car#constructor|trampoline (; 11 ;) (param $0 i32) (param $1 i32) (result i32) block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable diff --git a/tests/compiler/exports.untouched.wat b/tests/compiler/exports.untouched.wat index 4fff624ede..54b1736d9c 100644 --- a/tests/compiler/exports.untouched.wat +++ b/tests/compiler/exports.untouched.wat @@ -1,8 +1,8 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) (memory $0 0) @@ -17,12 +17,12 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 8)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $exports/Car i32 (i32.const 3)) (global $exports/vehicles.Car i32 (i32.const 4)) (export "memory" (memory $0)) (export "add" (func $exports/add)) - (export "__setargc" (func $~lib/setargc)) + (export "__argumentsLength" (global $~argumentsLength)) (export "subOpt" (func $exports/subOpt|trampoline)) (export "math.sub" (func $exports/math.sub)) (export "Animal.CAT" (global $exports/Animal.CAT)) @@ -48,7 +48,7 @@ (export "vehicles.Car.TIRES" (global $exports/vehicles.Car.TIRES)) (export "vehicles.Car.getNumTires" (func $exports/vehicles.Car.getNumTires)) (export "outer.inner.a" (global $exports/outer.inner.a)) - (start $start) + (start $~start) (func $exports/add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -240,7 +240,7 @@ (func $exports/vehicles.Car#openDoors (; 15 ;) (param $0 i32) nop ) - (func $start (; 16 ;) + (func $~start (; 16 ;) global.get $~lib/heap/__heap_base i32.const 15 i32.add @@ -256,7 +256,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -270,24 +270,20 @@ local.get $1 call $exports/subOpt ) - (func $~lib/setargc (; 18 ;) (param $0 i32) - local.get $0 - global.set $~lib/argc - ) - (func $Car#get:doors (; 19 ;) (param $0 i32) (result i32) + (func $Car#get:doors (; 18 ;) (param $0 i32) (result i32) local.get $0 i32.load ) - (func $Car#set:doors (; 20 ;) (param $0 i32) (param $1 i32) + (func $Car#set:doors (; 19 ;) (param $0 i32) (param $1 i32) local.get $0 local.get $1 i32.store ) - (func $exports/Car#constructor|trampoline (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (func $exports/Car#constructor|trampoline (; 20 ;) (param $0 i32) (param $1 i32) (result i32) block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable @@ -299,20 +295,20 @@ local.get $1 call $exports/Car#constructor ) - (func $vehicles.Car#get:doors (; 22 ;) (param $0 i32) (result i32) + (func $vehicles.Car#get:doors (; 21 ;) (param $0 i32) (result i32) local.get $0 i32.load ) - (func $vehicles.Car#set:doors (; 23 ;) (param $0 i32) (param $1 i32) + (func $vehicles.Car#set:doors (; 22 ;) (param $0 i32) (param $1 i32) local.get $0 local.get $1 i32.store ) - (func $exports/vehicles.Car#constructor|trampoline (; 24 ;) (param $0 i32) (param $1 i32) (result i32) + (func $exports/vehicles.Car#constructor|trampoline (; 23 ;) (param $0 i32) (param $1 i32) (result i32) block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 5718cccefe..3d8858c95a 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -29,7 +29,7 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 1 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -625,7 +625,7 @@ i32.const 2128 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -639,7 +639,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -659,14 +659,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 560 @@ -976,7 +976,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1035,14 +1035,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1054,12 +1054,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1078,7 +1078,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1405,7 +1405,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1431,10 +1431,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1455,11 +1455,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1480,7 +1480,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1492,7 +1492,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1513,10 +1513,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1532,11 +1532,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1550,7 +1550,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1882,7 +1882,7 @@ local.get $2 i32.sub local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 32 i32.ge_u @@ -1913,7 +1913,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -2206,7 +2206,7 @@ call $~lib/rt/pure/decrement end ) - (func $start (; 32 ;) + (func $~start (; 32 ;) call $start:extends-baseaggregate ) (func $~lib/rt/pure/__visit (; 33 ;) (param $0 i32) (param $1 i32) @@ -2324,7 +2324,7 @@ i32.shl i32.add local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $0 i32.lt_u @@ -2341,7 +2341,7 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end ) diff --git a/tests/compiler/extends-baseaggregate.untouched.wat b/tests/compiler/extends-baseaggregate.untouched.wat index 561b2c83a2..fa9cfeaf85 100644 --- a/tests/compiler/extends-baseaggregate.untouched.wat +++ b/tests/compiler/extends-baseaggregate.untouched.wat @@ -35,7 +35,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 480)) (global $~lib/heap/__heap_base i32 (i32.const 556)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 1 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -755,6 +755,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -808,71 +810,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1259,34 +1259,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1295,23 +1296,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1320,11 +1321,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1336,21 +1337,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1358,39 +1358,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1788,39 +1786,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1828,13 +1826,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1875,9 +1873,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2034,13 +2031,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2115,9 +2112,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2156,13 +2152,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2237,9 +2233,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2264,13 +2259,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2345,9 +2340,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2817,6 +2811,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2863,13 +2858,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2880,30 +2875,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2920,37 +2914,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2961,15 +2953,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2986,17 +2978,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3009,16 +3000,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3030,9 +3020,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3215,6 +3204,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -3433,13 +3423,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -3466,9 +3456,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -3818,7 +3807,7 @@ local.get $0 call $~lib/rt/pure/__release ) - (func $start (; 35 ;) + (func $~start (; 35 ;) call $start:extends-baseaggregate ) (func $~lib/rt/pure/__visit (; 36 ;) (param $0 i32) (param $1 i32) @@ -3955,6 +3944,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -3965,19 +3955,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -3985,15 +3975,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array#__visit_impl (; 38 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -4004,19 +3994,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -4024,9 +4014,8 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/rt/__visit_members (; 39 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/features/js-bigint-integration.optimized.wat b/tests/compiler/features/js-bigint-integration.optimized.wat index 02b38eb5b1..641bc4d4cd 100644 --- a/tests/compiler/features/js-bigint-integration.optimized.wat +++ b/tests/compiler/features/js-bigint-integration.optimized.wat @@ -8,8 +8,8 @@ (memory $0 1) (data (i32.const 16) "B\00\00\00\01\00\00\00\01\00\00\00B\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00j\00s\00-\00b\00i\00g\00i\00n\00t\00-\00i\00n\00t\00e\00g\00r\00a\00t\00i\00o\00n\00.\00t\00s") (global $features/js-bigint-integration/internalValue i64 (i64.const 9007199254740991)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "internalValue" (global $features/js-bigint-integration/internalValue)) (export "getInternalValue" (func $features/js-bigint-integration/getInternalValue)) @@ -40,13 +40,13 @@ (func $features/js-bigint-integration/getInternalValue (; 3 ;) (result i64) i64.const 9007199254740991 ) - (func $start (; 4 ;) - global.get $~lib/started + (func $~start (; 4 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:features/js-bigint-integration ) diff --git a/tests/compiler/features/js-bigint-integration.untouched.wat b/tests/compiler/features/js-bigint-integration.untouched.wat index b5b79f43ac..926e0a104c 100644 --- a/tests/compiler/features/js-bigint-integration.untouched.wat +++ b/tests/compiler/features/js-bigint-integration.untouched.wat @@ -9,8 +9,8 @@ (data (i32.const 16) "B\00\00\00\01\00\00\00\01\00\00\00B\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00j\00s\00-\00b\00i\00g\00i\00n\00t\00-\00i\00n\00t\00e\00g\00r\00a\00t\00i\00o\00n\00.\00t\00s\00") (table $0 1 funcref) (global $features/js-bigint-integration/internalValue i64 (i64.const 9007199254740991)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "internalValue" (global $features/js-bigint-integration/internalValue)) (export "getInternalValue" (func $features/js-bigint-integration/getInternalValue)) @@ -43,13 +43,13 @@ (func $features/js-bigint-integration/getInternalValue (; 3 ;) (result i64) global.get $features/js-bigint-integration/internalValue ) - (func $start (; 4 ;) - global.get $~lib/started + (func $~start (; 4 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:features/js-bigint-integration ) diff --git a/tests/compiler/features/mutable-globals.optimized.wat b/tests/compiler/features/mutable-globals.optimized.wat index dbf371f466..d68ae7f9f2 100644 --- a/tests/compiler/features/mutable-globals.optimized.wat +++ b/tests/compiler/features/mutable-globals.optimized.wat @@ -6,8 +6,8 @@ (memory $0 1) (data (i32.const 16) "6\00\00\00\01\00\00\00\01\00\00\006\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00m\00u\00t\00a\00b\00l\00e\00-\00g\00l\00o\00b\00a\00l\00s\00.\00t\00s") (global $features/mutable-globals/internal (mut i32) (i32.const 124)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "external" (global $features/mutable-globals/external)) (export "internal" (global $features/mutable-globals/internal)) @@ -65,13 +65,13 @@ unreachable end ) - (func $start (; 2 ;) - global.get $~lib/started + (func $~start (; 2 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:features/mutable-globals ) diff --git a/tests/compiler/features/mutable-globals.untouched.wat b/tests/compiler/features/mutable-globals.untouched.wat index a6b43bedde..3b29168fe3 100644 --- a/tests/compiler/features/mutable-globals.untouched.wat +++ b/tests/compiler/features/mutable-globals.untouched.wat @@ -7,8 +7,8 @@ (data (i32.const 16) "6\00\00\00\01\00\00\00\01\00\00\006\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00m\00u\00t\00a\00b\00l\00e\00-\00g\00l\00o\00b\00a\00l\00s\00.\00t\00s\00") (table $0 1 funcref) (global $features/mutable-globals/internal (mut i32) (i32.const 124)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "external" (global $features/mutable-globals/external)) (export "internal" (global $features/mutable-globals/internal)) @@ -70,13 +70,13 @@ unreachable end ) - (func $start (; 2 ;) - global.get $~lib/started + (func $~start (; 2 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:features/mutable-globals ) diff --git a/tests/compiler/features/reference-types.optimized.wat b/tests/compiler/features/reference-types.optimized.wat index 7c2d2eb678..22413dddc7 100644 --- a/tests/compiler/features/reference-types.optimized.wat +++ b/tests/compiler/features/reference-types.optimized.wat @@ -20,7 +20,7 @@ (export "memory" (memory $0)) (export "external" (func $features/reference-types/external)) (export "internal" (func $features/reference-types/internal)) - (start $start) + (start $~start) (func $features/reference-types/someFunc (; 5 ;) nop ) @@ -69,7 +69,7 @@ call $features/reference-types/external call $features/reference-types/external ) - (func $start (; 8 ;) + (func $~start (; 8 ;) call $start:features/reference-types ) ) diff --git a/tests/compiler/features/reference-types.untouched.wat b/tests/compiler/features/reference-types.untouched.wat index a43519d41f..69b27288c7 100644 --- a/tests/compiler/features/reference-types.untouched.wat +++ b/tests/compiler/features/reference-types.untouched.wat @@ -21,7 +21,7 @@ (export "memory" (memory $0)) (export "external" (func $features/reference-types/external)) (export "internal" (func $features/reference-types/internal)) - (start $start) + (start $~start) (func $features/reference-types/someFunc (; 5 ;) nop ) @@ -156,7 +156,7 @@ local.set $3 local.get $3 ) - (func $start (; 8 ;) + (func $~start (; 8 ;) call $start:features/reference-types ) ) diff --git a/tests/compiler/features/simd.optimized.wat b/tests/compiler/features/simd.optimized.wat index dfe791edfd..0c8dfc056b 100644 --- a/tests/compiler/features/simd.optimized.wat +++ b/tests/compiler/features/simd.optimized.wat @@ -10,7 +10,7 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -124,7 +124,7 @@ global.set $~lib/rt/stub/offset end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) (local $0 i32) i32.const 112 global.set $~lib/rt/stub/startOffset diff --git a/tests/compiler/features/simd.untouched.wat b/tests/compiler/features/simd.untouched.wat index 84232c7893..45e8e1e4dd 100644 --- a/tests/compiler/features/simd.untouched.wat +++ b/tests/compiler/features/simd.untouched.wat @@ -18,7 +18,7 @@ (global $~lib/builtins/u16.MAX_VALUE i32 (i32.const 65535)) (global $~lib/heap/__heap_base i32 (i32.const 112)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -2294,7 +2294,7 @@ call $features/simd/test_v32x4 call $features/simd/test_v64x2 ) - (func $start (; 16 ;) + (func $~start (; 16 ;) call $start:features/simd ) ) diff --git a/tests/compiler/features/threads.optimized.wat b/tests/compiler/features/threads.optimized.wat index 01894983b9..a39625f806 100644 --- a/tests/compiler/features/threads.optimized.wat +++ b/tests/compiler/features/threads.optimized.wat @@ -2,7 +2,7 @@ (type $none_=>_none (func)) (memory $0 (shared 1 1)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $features/threads/testAtomic (; 0 ;) i32.const 0 i32.atomic.load8_u @@ -532,7 +532,7 @@ i64.atomic.rmw.cmpxchg drop ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $features/threads/testAtomic call $features/threads/testAtomicAsm ) diff --git a/tests/compiler/features/threads.untouched.wat b/tests/compiler/features/threads.untouched.wat index e92ea98dd5..b3e3c3df17 100644 --- a/tests/compiler/features/threads.untouched.wat +++ b/tests/compiler/features/threads.untouched.wat @@ -4,7 +4,7 @@ (table $0 1 funcref) (global $~lib/ASC_FEATURE_THREADS i32 (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $features/threads/testAtomic (; 0 ;) i32.const 0 i32.atomic.load8_u @@ -538,7 +538,7 @@ call $features/threads/testAtomic call $features/threads/testAtomicAsm ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:features/threads ) ) diff --git a/tests/compiler/for.json b/tests/compiler/for.json index b1da366ff4..59c251c705 100644 --- a/tests/compiler/for.json +++ b/tests/compiler/for.json @@ -1,5 +1,7 @@ { "asc_flags": [ - "--runtime none" + "--runtime half", + "--explicitStart", + "--use ASC_RTRACE=1" ] } \ No newline at end of file diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index b838b32f83..1ed8f49fc3 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -1,41 +1,65 @@ (module (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $none_=>_i32 (func (result i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) + (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) + (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) + (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) (memory $0 1) (data (i32.const 16) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00f\00o\00r\00.\00t\00s") - (global $for/i (mut i32) (i32.const 0)) + (data (i32.const 48) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 96) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 208) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 272) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 320) "\04\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10") + (global $for/ran (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) - (start $start) - (func $start:for (; 1 ;) + (func $for/testInitExpression (; 5 ;) (local $0 i32) - (local $1 i32) - i32.const 0 - global.set $for/i - loop $loop|0 - global.get $for/i + loop $for-loop|0 + local.get $0 i32.const 10 i32.lt_s if - global.get $for/i + local.get $0 i32.const 1 i32.add - global.set $for/i - br $loop|0 + local.set $0 + br $for-loop|0 end end - global.get $for/i + local.get $0 i32.const 10 i32.ne if i32.const 0 i32.const 32 - i32.const 5 - i32.const 0 + i32.const 8 + i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|1 + i32.const 1 + global.set $for/ran + ) + (func $for/testInitStatement (; 6 ;) + (local $0 i32) + loop $for-loop|0 local.get $0 i32.const 10 i32.lt_s @@ -44,53 +68,130 @@ i32.const 1 i32.add local.set $0 - br $loop|1 + br $for-loop|0 end end - loop $loop|2 - global.get $for/i + local.get $0 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 19 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + ) + (func $for/testEmpty (; 7 ;) + (local $0 i32) + i32.const 10 + local.set $0 + loop $for-loop|0 + local.get $0 i32.const 0 i32.gt_s if - global.get $for/i + local.get $0 i32.const 1 i32.sub - global.set $for/i - br $loop|2 + local.set $0 + br $for-loop|0 end end - global.get $for/i + local.get $0 if i32.const 0 i32.const 32 - i32.const 12 - i32.const 0 + i32.const 29 + i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|3 - global.get $for/i + i32.const 1 + global.set $for/ran + ) + (func $for/testConditionOmitted (; 8 ;) + (local $0 i32) + loop $for-loop|0 + local.get $0 i32.const 10 i32.ne if - global.get $for/i + local.get $0 i32.const 1 i32.add - global.set $for/i - br $loop|3 + local.set $0 + br $for-loop|0 end end - loop $loop|4 - global.get $for/i + local.get $0 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 39 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + ) + (func $for/testAllOmitted (; 9 ;) + (local $0 i32) + i32.const 10 + local.set $0 + loop $for-loop|0 + local.get $0 i32.const 1 i32.sub - global.set $for/i - global.get $for/i - br_if $loop|4 + local.tee $0 + br_if $for-loop|0 end - i32.const 0 - local.set $0 - loop $loop|5 + local.get $0 + if + i32.const 0 + i32.const 32 + i32.const 49 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + ) + (func $for/testAlwaysTrue (; 10 ;) + (local $0 i32) + loop $for-loop|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.ne + br_if $for-loop|0 + end + local.get $0 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 61 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + ) + (func $for/testAlwaysContinues (; 11 ;) + (local $0 i32) + loop $for-loop|0 local.get $0 i32.const 10 i32.lt_s @@ -99,7 +200,7 @@ i32.const 1 i32.add local.set $0 - br $loop|5 + br $for-loop|0 end end local.get $0 @@ -108,47 +209,2225 @@ if i32.const 0 i32.const 32 - i32.const 19 - i32.const 0 + i32.const 80 + i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 0 - local.set $0 - loop $loop|6 + i32.const 1 + global.set $for/ran + ) + (func $for/testNestedContinue (; 12 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + loop $for-loop|0 local.get $0 i32.const 10 i32.lt_s if - i32.const 0 - local.set $1 - loop $loop|7 - local.get $1 - i32.const 10 - i32.lt_s - if - block $continue|7 + local.get $0 + i32.const 2 + i32.ge_s + if + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 10 + i32.lt_s + if + local.get $2 + i32.const 1 + i32.add + local.get $2 local.get $0 local.get $1 - i32.eq - br_if $continue|7 + i32.lt_s + select + local.set $2 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $loop|7 end end local.get $0 i32.const 1 i32.add local.set $0 - br $loop|6 + br $for-loop|0 end end + local.get $0 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 120 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 121 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 28 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 122 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran ) - (func $start (; 2 ;) - call $start:for + (func $~lib/rt/tlsf/removeBlock (; 13 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 277 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 16 + i32.ge_u + if (result i32) + local.get $2 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 279 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + local.set $2 + i32.const 0 + else + local.get $2 + i32.const 31 + local.get $2 + i32.clz + i32.sub + local.tee $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $2 + local.get $3 + i32.const 7 + i32.sub + end + local.tee $3 + i32.const 23 + i32.lt_u + if (result i32) + local.get $2 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 292 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=20 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 + if + local.get $5 + local.get $4 + i32.store offset=20 + end + local.get $4 + if + local.get $4 + local.get $5 + i32.store offset=16 + end + local.get $1 + local.get $0 + local.get $2 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + i32.eq + if + local.get $0 + local.get $2 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + local.get $4 + i32.store offset=96 + local.get $4 + i32.eqz + if + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $1 + i32.store offset=4 + local.get $1 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $3 + i32.shl + i32.const -1 + i32.xor + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (; 14 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 207 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 + i32.const 1 + i32.and + if + local.get $3 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $2 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + local.get $3 + i32.const 3 + i32.and + i32.or + local.tee $3 + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $5 + end + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $2 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 228 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $7 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + local.get $7 + local.get $6 + i32.const 3 + i32.and + i32.or + local.tee $3 + i32.store + local.get $2 + local.set $1 + end + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 16 + i32.ge_u + if (result i32) + local.get $2 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 243 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i32.const 16 + i32.add + i32.add + local.get $4 + i32.ne + if + i32.const 0 + i32.const 64 + i32.const 244 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + local.set $4 + i32.const 0 + else + local.get $2 + i32.const 31 + local.get $2 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $4 + local.get $2 + i32.const 7 + i32.sub + end + local.tee $3 + i32.const 23 + i32.lt_u + if (result i32) + local.get $4 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 260 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $4 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $2 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + local.get $2 + i32.store offset=20 + local.get $2 + if + local.get $2 + local.get $1 + i32.store offset=16 + end + local.get $0 + local.get $4 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $3 + i32.shl + i32.or + i32.store + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (; 15 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + local.get $2 + i32.le_u + select + select + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 386 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $1 + local.get $3 + i32.const 16 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 396 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $1 + i32.const 16 + i32.sub + local.set $1 + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 408 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $2 + i32.const 32 + i32.sub + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $2 + i32.add + i32.const 16 + i32.sub + local.tee $2 + i32.const 2 + i32.store + local.get $0 + local.get $2 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/maybeInitialize (; 16 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $0 + i32.eqz + if + i32.const 1 + memory.size + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 368 + local.tee $0 + i32.const 0 + i32.store + i32.const 1936 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $1 + i32.const 23 + i32.lt_u + if + local.get $1 + i32.const 2 + i32.shl + i32.const 368 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $2 + loop $for-loop|1 + local.get $2 + i32.const 16 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.const 368 + i32.add + i32.const 0 + i32.store offset=96 + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 + end + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + i32.const 368 + i32.const 1952 + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 368 + global.set $~lib/rt/tlsf/ROOT + end + local.get $0 + ) + (func $~lib/rt/tlsf/prepareSize (; 17 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 112 + i32.const 64 + i32.const 457 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.add + i32.const -16 + i32.and + local.tee $0 + i32.const 16 + local.get $0 + i32.const 16 + i32.gt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (; 18 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if (result i32) + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + i32.const 0 + else + local.get $1 + i32.const 536870904 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + end + local.tee $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $1 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 338 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 351 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/pure/markGray (; 19 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne + if + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.const 268435456 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 2 + call $~lib/rt/__visit_members + end + ) + (func $~lib/rt/tlsf/freeBlock (; 20 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 64 + i32.const 569 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/rtrace/onfree + ) + (func $~lib/rt/pure/scanBlack (; 21 ;) (param $0 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const -1879048193 + i32.and + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 4 + call $~lib/rt/__visit_members + ) + (func $~lib/rt/pure/scan (; 22 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.eq + if + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + if + local.get $0 + call $~lib/rt/pure/scanBlack + else + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.const 536870912 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 3 + call $~lib/rt/__visit_members + end + end + ) + (func $~lib/rt/pure/collectWhite (; 23 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 536870912 + i32.eq + if (result i32) + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + else + i32.const 0 + end + if + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + ) + (func $~lib/rt/pure/__collect (; 24 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/rt/pure/ROOTS + local.tee $5 + local.tee $2 + local.set $3 + global.get $~lib/rt/pure/CUR + local.set $0 + loop $for-loop|0 + local.get $3 + local.get $0 + i32.lt_u + if + local.get $3 + i32.load + local.tee $4 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 805306368 + i32.eq + if (result i32) + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + else + i32.const 0 + end + if + local.get $4 + call $~lib/rt/pure/markGray + local.get $2 + local.get $4 + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + else + i32.const 0 + local.get $1 + i32.const 268435455 + i32.and + i32.eqz + local.get $1 + i32.const 1879048192 + i32.and + select + if + global.get $~lib/rt/tlsf/ROOT + local.get $4 + call $~lib/rt/tlsf/freeBlock + else + local.get $4 + local.get $1 + i32.const 2147483647 + i32.and + i32.store offset=4 + end + end + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|0 + end + end + local.get $2 + global.set $~lib/rt/pure/CUR + local.get $5 + local.set $0 + loop $for-loop|1 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/pure/scan + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $for-loop|1 + end + end + local.get $5 + local.set $0 + loop $for-loop|2 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.load + local.tee $1 + local.get $1 + i32.load offset=4 + i32.const 2147483647 + i32.and + i32.store offset=4 + local.get $1 + call $~lib/rt/pure/collectWhite + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $for-loop|2 + end + end + local.get $5 + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/tlsf/growMemory (; 25 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + memory.size + local.tee $2 + i32.const 16 + local.get $0 + i32.load offset=1568 + local.get $2 + i32.const 16 + i32.shl + i32.const 16 + i32.sub + i32.ne + i32.shl + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.get $1 + local.get $1 + i32.const 536870904 + i32.lt_u + select + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + if + i32.const 0 + i32.const 64 + i32.const 365 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.get $2 + i32.sub + local.tee $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store + local.get $2 + local.get $1 + i32.const 16 + i32.add + i32.add + local.tee $1 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + i32.load + i32.const -3 + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 27 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/collectLock + if + i32.const 0 + i32.const 64 + i32.const 490 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 1 + global.set $~lib/rt/tlsf/collectLock + call $~lib/rt/pure/__collect + i32.const 0 + global.set $~lib/rt/tlsf/collectLock + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $0 + local.get $3 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 502 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 510 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $2 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $2 + call $~lib/rt/rtrace/onalloc + local.get $2 + ) + (func $~lib/rt/tlsf/__alloc (; 28 ;) (param $0 i32) (param $1 i32) (result i32) + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + local.get $1 + i32.store offset=8 + local.get $0 + i32.const 16 + i32.add + ) + (func $~lib/rt/pure/increment (; 29 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 176 + i32.const 104 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/rtrace/onincrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 176 + i32.const 107 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $for/Ref#constructor (; 30 ;) (result i32) + (local $0 i32) + i32.const 0 + i32.const 3 + call $~lib/rt/tlsf/__alloc + local.tee $0 + i32.const 356 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/__typeinfo (; 31 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 320 + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 324 + i32.add + i32.load + ) + (func $~lib/memory/memory.copy (; 32 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $2 + local.set $3 + local.get $0 + local.get $1 + i32.eq + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 + i32.lt_u + if + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $0 + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $1 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + br $while-continue|1 + end + end + end + loop $while-continue|2 + local.get $3 + if + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $while-continue|2 + end + end + else + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|3 + local.get $0 + local.get $3 + i32.add + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 + end + end + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $while-continue|4 + end + end + end + loop $while-continue|5 + local.get $3 + if + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|5 + end + end + end + end + ) + (func $~lib/rt/tlsf/__free (; 33 ;) (param $0 i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $0 + select + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 593 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/growRoots (; 34 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS + local.tee $1 + i32.sub + local.tee $2 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 + i32.gt_u + select + local.tee $3 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $0 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onfree + local.get $0 + local.get $1 + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onalloc + local.get $1 + call $~lib/rt/tlsf/__free + end + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $2 + i32.add + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 35 ;) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 4 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 36 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 268435455 + i32.and + local.set $1 + local.get $0 + call $~lib/rt/rtrace/ondecrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 176 + i32.const 115 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $2 + i32.const -2147483648 + i32.and + if + local.get $0 + i32.const -2147483648 + i32.store offset=4 + else + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + else + local.get $1 + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 176 + i32.const 124 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 16 + i32.and + if + local.get $0 + local.get $1 + i32.const 1 + i32.sub + local.get $2 + i32.const -268435456 + i32.and + i32.or + i32.store offset=4 + else + local.get $0 + local.get $1 + i32.const 1 + i32.sub + i32.const -1342177280 + i32.or + i32.store offset=4 + local.get $2 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + end + end + ) + (func $~lib/rt/pure/__release (; 37 ;) (param $0 i32) + local.get $0 + i32.const 356 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $for/testRef (; 38 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + call $for/Ref#constructor + local.set $0 + loop $for-loop|0 + local.get $0 + if + local.get $1 + i32.const 1 + i32.add + local.tee $1 + i32.const 10 + i32.eq + if + i32.const 0 + local.set $2 + local.get $0 + if + local.get $0 + call $~lib/rt/pure/__release + end + else + call $for/Ref#constructor + local.set $2 + local.get $0 + call $~lib/rt/pure/__release + end + local.get $2 + local.set $0 + br $for-loop|0 + end + end + local.get $1 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 137 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + if + i32.const 0 + i32.const 32 + i32.const 138 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + local.get $0 + call $~lib/rt/pure/__release + ) + (func $for/testRefAutorelease (; 39 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + call $for/Ref#constructor + call $for/Ref#constructor + local.set $0 + call $~lib/rt/pure/__release + loop $for-loop|0 + block $for-break0 + call $for/Ref#constructor + local.tee $1 + call $~lib/rt/pure/__release + local.get $1 + if + local.get $2 + i32.const 1 + i32.add + local.tee $2 + i32.const 10 + i32.eq + if + i32.const 0 + local.set $1 + local.get $0 + if + local.get $0 + call $~lib/rt/pure/__release + end + i32.const 0 + local.set $0 + br $for-break0 + end + call $for/Ref#constructor + local.get $0 + call $~lib/rt/pure/__release + local.set $0 + br $for-loop|0 + end + end + end + local.get $2 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 157 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + if + i32.const 0 + i32.const 32 + i32.const 158 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + local.get $0 + call $~lib/rt/pure/__release + ) + (func $start:for (; 40 ;) + i32.const 0 + global.set $for/ran + call $for/testInitExpression + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 13 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testInitStatement + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 24 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testEmpty + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 34 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testConditionOmitted + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 44 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testAllOmitted + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 54 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testAlwaysTrue + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 66 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + i32.const 1 + global.set $for/ran + i32.const 0 + global.set $for/ran + call $for/testAlwaysContinues + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 85 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + i32.const 1 + global.set $for/ran + i32.const 0 + global.set $for/ran + i32.const 1 + global.set $for/ran + i32.const 0 + global.set $for/ran + call $for/testNestedContinue + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 127 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testRef + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 143 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testRefAutorelease + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 163 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 41 ;) + global.get $~started + if + return + else + i32.const 1 + global.set $~started + end + call $start:for + ) + (func $~lib/rt/pure/__visit (; 42 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 356 + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $0 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + local.get $1 + i32.const 1 + i32.ne + if + local.get $1 + i32.const 2 + i32.sub + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + end + local.get $0 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $0 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 176 + i32.const 75 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $0 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 176 + i32.const 86 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $1 + i32.const 1879048192 + i32.and + if + local.get $0 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 176 + i32.const 97 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 43 ;) (param $0 i32) (param $1 i32) + block $switch$1$default + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + unreachable ) ) diff --git a/tests/compiler/for.ts b/tests/compiler/for.ts index 5b2402f0d6..565bbd564f 100644 --- a/tests/compiler/for.ts +++ b/tests/compiler/for.ts @@ -1,25 +1,163 @@ -var i: i32; -for (i = 0; i < 10; ++i) { - ; +var ran: bool; + +function testInitExpression(): void { + var i: i32; + for (i = 0; i < 10; ++i) { + ; + } + assert(i == 10); + ran = true; } -assert(i == 10); +ran = false; +testInitExpression(); +assert(ran); -for (var j: i32 = 0; j < 10; ++j) { - ; +function testInitStatement(): void { + for (var j = 0; j < 10; ++j) { + ; + } + assert(j == 10); + ran = true; } +ran = false; +testInitStatement(); +assert(ran); -for (; i > 0; --i); -assert(i == 0); +function testEmpty(): void { + var i = 10; + for (; i > 0; --i); + assert(i == 0); + ran = true; +} +ran = false; +testEmpty(); +assert(ran); -for (;; ++i) if (i == 10) break; +function testConditionOmitted(): void { + var i = 0; + for (;; ++i) if (i == 10) break; + assert(i == 10); + ran = true; +} +ran = false; +testConditionOmitted(); +assert(ran); -for (;;) if (--i == 0) break; +function testAllOmitted(): void { + var i = 10; + for (;;) if (--i == 0) break; + assert(i == 0); + ran = true; +} +ran = false; +testAllOmitted(); +assert(ran); -for (var k: i32 = 0; k < 10; ++k) continue; -assert(k == 10); +function testAlwaysTrue(): void { + var i = 0; + for (;true;) { + if (++i == 10) break; + } + assert(i == 10); + ran = true; +} +ran = false; +testAlwaysTrue(); +assert(ran); + +function testAlwaysFalse(): void { + for (;false;) { + assert(false); + } + ran = true; +} +ran = false; +testAlwaysFalse(); +assert(ran); + +function testAlwaysContinues(): void { + for (var k = 0; k < 10; ++k) continue; + assert(k == 10); + ran = true; +} +ran = false; +testAlwaysContinues(); +assert(ran); -for (let i = 0; i < 10; i++) { // without continue block - for (let j = 0; j < 10; j++) { // with continue block - if (i === j) continue; +function testAlwaysBreaks(): void { + for (var k = 0; k < 10; ++k) break; + assert(k == 0); + ran = true; +} +ran = false; +testAlwaysBreaks(); +assert(ran); + +function testAlwaysReturns(): void { + for (let k = 0; k < 10; ++k) { + ran = true; + return; + } + assert(false); +} +ran = false; +testAlwaysReturns(); +assert(ran); + +function testNestedContinue(): void { + var i = 0; + var j = 0; + var k = 0; + for (; i < 10; i++) { + if (i < 2) continue; + for (j = 0; j < 10; j++) { + if (i < j) { + ++k; + continue; + } + } + } + assert(i == 10); + assert(j == 10); + assert(k == 28); + ran = true; +} +ran = false; +testNestedContinue(); +assert(ran); + +class Ref {} +function testRef(): void { + var i = 0; + var ref: Ref | null = new Ref(); + for (; ref;) { + if (++i == 10) ref = null; + else ref = new Ref(); + } + assert(i == 10); + assert(!ref); + ran = true; +} +ran = false; +testRef(); +assert(ran); + +function getRef(): Ref { + return new Ref(); +} +function testRefAutorelease(): void { + var i = 0; + var ref: Ref | null = new Ref(); + for (ref = getRef(); getRef(); ref = getRef()) { // must not leak + if (++i == 10) { + ref = null; + break; + } } + assert(i == 10); + assert(!ref); + ran = true; } +ran = false; +testRefAutorelease(); +assert(ran); diff --git a/tests/compiler/for.untouched.wat b/tests/compiler/for.untouched.wat index dbcb3925b9..baf9ac0823 100644 --- a/tests/compiler/for.untouched.wat +++ b/tests/compiler/for.untouched.wat @@ -1,197 +1,4182 @@ (module (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) + (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) + (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) + (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) (memory $0 1) (data (i32.const 16) "\0c\00\00\00\01\00\00\00\01\00\00\00\0c\00\00\00f\00o\00r\00.\00t\00s\00") + (data (i32.const 48) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00") + (data (i32.const 96) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") + (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") + (data (i32.const 208) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") + (data (i32.const 272) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 320) "\04\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00") (table $0 1 funcref) - (global $for/i (mut i32) (i32.const 0)) + (global $for/ran (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 320)) + (global $~lib/heap/__heap_base i32 (i32.const 356)) + (export "_start" (func $~start)) (export "memory" (memory $0)) - (start $start) - (func $start:for (; 1 ;) + (func $for/testInitExpression (; 5 ;) (local $0 i32) (local $1 i32) - (local $2 i32) - (local $3 i32) - block $break|0 - i32.const 0 - global.set $for/i - loop $loop|0 - global.get $for/i - i32.const 10 - i32.lt_s - i32.eqz - br_if $break|0 - global.get $for/i + i32.const 0 + local.set $0 + loop $for-loop|0 + local.get $0 + i32.const 10 + i32.lt_s + local.set $1 + local.get $1 + if + local.get $0 i32.const 1 i32.add - global.set $for/i - br $loop|0 + local.set $0 + br $for-loop|0 end - unreachable end - global.get $for/i + local.get $0 i32.const 10 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 5 - i32.const 0 + i32.const 8 + i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 - i32.const 10 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 1 + global.set $for/ran + ) + (func $for/testInitStatement (; 6 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + loop $for-loop|0 + local.get $0 + i32.const 10 + i32.lt_s + local.set $1 + local.get $1 + if local.get $0 i32.const 1 i32.add local.set $0 - br $loop|1 + br $for-loop|0 end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 19 + i32.const 2 + call $~lib/builtins/abort unreachable end - block $break|2 - loop $loop|2 - global.get $for/i - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|2 + i32.const 1 + global.set $for/ran + ) + (func $for/testEmpty (; 7 ;) + (local $0 i32) + (local $1 i32) + i32.const 10 + local.set $0 + loop $for-loop|0 + local.get $0 + i32.const 0 + i32.gt_s + local.set $1 + local.get $1 + if nop - global.get $for/i + local.get $0 i32.const 1 i32.sub - global.set $for/i - br $loop|2 + local.set $0 + br $for-loop|0 end - unreachable end - global.get $for/i + local.get $0 i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 12 - i32.const 0 + i32.const 29 + i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - loop $loop|3 - global.get $for/i - i32.const 10 - i32.eq + i32.const 1 + global.set $for/ran + ) + (func $for/testConditionOmitted (; 8 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + block $for-break0 + loop $for-loop|0 + i32.const 1 + local.set $1 + local.get $1 if - br $break|3 + local.get $0 + i32.const 10 + i32.eq + if + br $for-break0 + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 end - global.get $for/i - i32.const 1 - i32.add - global.set $for/i - br $loop|3 end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 39 + i32.const 2 + call $~lib/builtins/abort unreachable end - block $break|4 - loop $loop|4 - global.get $for/i + i32.const 1 + global.set $for/ran + ) + (func $for/testAllOmitted (; 9 ;) + (local $0 i32) + (local $1 i32) + i32.const 10 + local.set $0 + block $for-break0 + loop $for-loop|0 i32.const 1 - i32.sub - global.set $for/i - global.get $for/i - i32.const 0 - i32.eq + local.set $1 + local.get $1 if - br $break|4 + local.get $0 + i32.const 1 + i32.sub + local.tee $0 + i32.const 0 + i32.eq + if + br $for-break0 + end + br $for-loop|0 end - br $loop|4 end + end + local.get $0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 49 + i32.const 2 + call $~lib/builtins/abort unreachable end - block $break|5 + i32.const 1 + global.set $for/ran + ) + (func $for/testAlwaysTrue (; 10 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + block $for-break0 + loop $for-loop|0 + i32.const 1 + local.set $1 + local.get $1 + if + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + br $for-break0 + end + br $for-loop|0 + end + end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if i32.const 0 + i32.const 32 + i32.const 61 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + ) + (func $for/testAlwaysFalse (; 11 ;) + i32.const 1 + global.set $for/ran + ) + (func $for/testAlwaysContinues (; 12 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + loop $for-loop|0 + local.get $0 + i32.const 10 + i32.lt_s local.set $1 - loop $loop|5 - local.get $1 - i32.const 10 - i32.lt_s - i32.eqz - br_if $break|5 - local.get $1 + local.get $1 + if + block $for-continue|0 + br $for-continue|0 + end + local.get $0 i32.const 1 i32.add - local.set $1 - br $loop|5 + local.set $0 + br $for-loop|0 end - unreachable end - local.get $1 + local.get $0 i32.const 10 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 19 - i32.const 0 + i32.const 80 + i32.const 2 call $~lib/builtins/abort unreachable end - block $break|6 - i32.const 0 - local.set $2 - loop $loop|6 - local.get $2 + i32.const 1 + global.set $for/ran + ) + (func $for/testAlwaysBreaks (; 13 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + block $for-break0 + loop $for-loop|0 + local.get $0 i32.const 10 i32.lt_s - i32.eqz - br_if $break|6 - block $break|7 + local.set $1 + local.get $1 + if + br $for-break0 + end + end + end + local.get $0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 89 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + ) + (func $for/testAlwaysReturns (; 14 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + loop $for-loop|0 + local.get $0 + i32.const 10 + i32.lt_s + local.set $1 + local.get $1 + if + i32.const 1 + global.set $for/ran + return + end + end + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 101 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $for/testNestedContinue (; 15 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 0 + local.set $0 + i32.const 0 + local.set $1 + i32.const 0 + local.set $2 + loop $for-loop|0 + local.get $0 + i32.const 10 + i32.lt_s + local.set $3 + local.get $3 + if + block $for-continue|0 + local.get $0 + i32.const 2 + i32.lt_s + if + br $for-continue|0 + end i32.const 0 - local.set $3 - loop $loop|7 - local.get $3 + local.set $1 + loop $for-loop|1 + local.get $1 i32.const 10 i32.lt_s - i32.eqz - br_if $break|7 - block $continue|7 - local.get $2 - local.get $3 - i32.eq - if - br $continue|7 + local.set $4 + local.get $4 + if + block $for-continue|1 + local.get $0 + local.get $1 + i32.lt_s + if + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-continue|1 + end end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 end - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $loop|7 end - unreachable end - local.get $2 + local.get $0 i32.const 1 i32.add - local.set $2 - br $loop|6 + local.set $0 + br $for-loop|0 end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 120 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 121 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 28 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 122 + i32.const 2 + call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $for/ran ) - (func $start (; 2 ;) - call $start:for + (func $~lib/rt/tlsf/removeBlock (; 16 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 277 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $3 + local.get $3 + i32.const 16 + i32.ge_u + if (result i32) + local.get $3 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 279 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $4 + local.get $3 + i32.const 4 + i32.shr_u + local.set $5 + else + i32.const 31 + local.get $3 + i32.clz + i32.sub + local.set $4 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $5 + local.get $4 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $4 + end + local.get $4 + i32.const 23 + i32.lt_u + if (result i32) + local.get $5 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 292 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=16 + local.set $6 + local.get $1 + i32.load offset=20 + local.set $7 + local.get $6 + if + local.get $6 + local.get $7 + i32.store offset=20 + end + local.get $7 + if + local.get $7 + local.get $6 + i32.store offset=16 + end + local.get $1 + local.get $0 + local.set $10 + local.get $4 + local.set $9 + local.get $5 + local.set $8 + local.get $10 + local.get $9 + i32.const 4 + i32.shl + local.get $8 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + i32.eq + if + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $5 + local.set $9 + local.get $7 + local.set $8 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $9 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store offset=96 + local.get $7 + i32.eqz + if + local.get $0 + local.set $9 + local.get $4 + local.set $8 + local.get $9 + local.get $8 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $9 + local.get $0 + local.set $8 + local.get $4 + local.set $11 + local.get $9 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $9 + local.set $10 + local.get $8 + local.get $11 + i32.const 2 + i32.shl + i32.add + local.get $10 + i32.store offset=4 + local.get $9 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $4 + i32.shl + i32.const -1 + i32.xor + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (; 17 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 207 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.set $3 + local.get $3 + i32.const 16 + i32.add + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $4 + local.get $4 + i32.load + local.set $5 + local.get $5 + i32.const 1 + i32.and + if + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $3 + local.get $3 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + i32.const 3 + i32.and + local.get $3 + i32.or + local.tee $2 + i32.store + local.get $1 + local.set $6 + local.get $6 + i32.const 16 + i32.add + local.get $6 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $4 + local.get $4 + i32.load + local.set $5 + end + end + local.get $2 + i32.const 2 + i32.and + if + local.get $1 + local.set $6 + local.get $6 + i32.const 4 + i32.sub + i32.load + local.set $6 + local.get $6 + i32.load + local.set $3 + local.get $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 228 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $7 + local.get $7 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $6 + call $~lib/rt/tlsf/removeBlock + local.get $6 + local.get $3 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $2 + i32.store + local.get $6 + local.set $1 + end + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + i32.store + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $8 + local.get $8 + i32.const 16 + i32.ge_u + if (result i32) + local.get $8 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 243 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.add + local.get $8 + i32.add + local.get $4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 244 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $8 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $9 + local.get $8 + i32.const 4 + i32.shr_u + local.set $10 + else + i32.const 31 + local.get $8 + i32.clz + i32.sub + local.set $9 + local.get $8 + local.get $9 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $10 + local.get $9 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $9 + end + local.get $9 + i32.const 23 + i32.lt_u + if (result i32) + local.get $10 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 260 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $7 + local.get $9 + local.set $3 + local.get $10 + local.set $6 + local.get $7 + local.get $3 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $11 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + local.get $11 + i32.store offset=20 + local.get $11 + if + local.get $11 + local.get $1 + i32.store offset=16 + end + local.get $0 + local.set $12 + local.get $9 + local.set $7 + local.get $10 + local.set $3 + local.get $1 + local.set $6 + local.get $12 + local.get $7 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $9 + i32.shl + i32.or + i32.store + local.get $0 + local.set $13 + local.get $9 + local.set $12 + local.get $0 + local.set $3 + local.get $9 + local.set $6 + local.get $3 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $10 + i32.shl + i32.or + local.set $7 + local.get $13 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $1 + local.get $2 + i32.le_u + if (result i32) + local.get $1 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 386 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + local.set $4 + i32.const 0 + local.set $5 + local.get $4 + if + local.get $1 + local.get $4 + i32.const 16 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 396 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $4 + i32.eq + if + local.get $1 + i32.const 16 + i32.sub + local.set $1 + local.get $4 + i32.load + local.set $5 + else + nop + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 408 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.set $6 + local.get $6 + i32.const 48 + i32.lt_u + if + i32.const 0 + return + end + local.get $6 + i32.const 16 + i32.const 1 + i32.shl + i32.sub + local.set $7 + local.get $1 + local.set $8 + local.get $8 + local.get $7 + i32.const 1 + i32.or + local.get $5 + i32.const 2 + i32.and + i32.or + i32.store + local.get $8 + i32.const 0 + i32.store offset=16 + local.get $8 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $6 + i32.add + i32.const 16 + i32.sub + local.set $4 + local.get $4 + i32.const 0 + i32.const 2 + i32.or + i32.store + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/maybeInitialize (; 19 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $0 + local.get $0 + i32.eqz + if + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const -16 + i32.and + local.set $1 + memory.size + local.set $2 + local.get $1 + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $3 + local.get $2 + i32.gt_s + if (result i32) + local.get $3 + local.get $2 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $1 + local.set $0 + local.get $0 + i32.const 0 + i32.store + local.get $0 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $0 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $8 + local.get $7 + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=4 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u + local.set $7 + local.get $7 + if + local.get $0 + local.set $11 + local.get $5 + local.set $10 + local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $9 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + local.get $8 + i32.const 1 + i32.add + local.set $8 + br $for-loop|1 + end + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|0 + end + end + local.get $0 + local.get $1 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $0 + global.set $~lib/rt/tlsf/ROOT + end + local.get $0 + ) + (func $~lib/rt/tlsf/prepareSize (; 20 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 112 + i32.const 64 + i32.const 457 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $1 + i32.const 16 + local.tee $2 + local.get $1 + local.get $2 + i32.gt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (; 21 ;) (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 $8 i32) + (local $9 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $2 + local.get $1 + i32.const 4 + i32.shr_u + local.set $3 + else + local.get $1 + i32.const 536870904 + i32.lt_u + if (result i32) + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $1 + end + local.set $4 + i32.const 31 + local.get $4 + i32.clz + i32.sub + local.set $2 + local.get $4 + local.get $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $3 + local.get $2 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $2 + end + local.get $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $3 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 338 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $5 + local.get $2 + local.set $4 + local.get $5 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + i32.const 0 + local.set $7 + local.get $6 + i32.eqz + if + local.get $0 + i32.load + i32.const 0 + i32.const -1 + i32.xor + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.set $5 + local.get $5 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $5 + i32.ctz + local.set $2 + local.get $0 + local.set $8 + local.get $2 + local.set $4 + local.get $8 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 351 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $4 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $7 + end + else + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $4 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/pure/markGray (; 22 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne + if + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 268435456 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 2 + call $~lib/rt/__visit_members + end + ) + (func $~lib/rt/tlsf/freeBlock (; 23 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 569 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/rtrace/onfree + ) + (func $~lib/rt/pure/scanBlack (; 24 ;) (param $0 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 0 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 4 + call $~lib/rt/__visit_members + ) + (func $~lib/rt/pure/scan (; 25 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.eq + if + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + if + local.get $0 + call $~lib/rt/pure/scanBlack + else + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 536870912 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 3 + call $~lib/rt/__visit_members + end + end + ) + (func $~lib/rt/pure/collectWhite (; 26 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 536870912 + i32.eq + if (result i32) + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + else + i32.const 0 + end + if + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 0 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + ) + (func $~lib/rt/pure/__collect (; 27 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/rt/pure/ROOTS + local.set $0 + local.get $0 + local.set $1 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $2 + i32.load + local.set $5 + local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 + i32.const 1879048192 + i32.and + i32.const 805306368 + i32.eq + if (result i32) + local.get $6 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + else + i32.const 0 + end + if + local.get $5 + call $~lib/rt/pure/markGray + local.get $1 + local.get $5 + i32.store + local.get $1 + i32.const 4 + i32.add + local.set $1 + else + local.get $6 + i32.const 1879048192 + i32.and + i32.const 0 + i32.eq + if (result i32) + local.get $6 + i32.const 268435455 + i32.and + i32.eqz + else + i32.const 0 + end + if + global.get $~lib/rt/tlsf/ROOT + local.get $5 + call $~lib/rt/tlsf/freeBlock + else + local.get $5 + local.get $6 + i32.const -2147483648 + i32.const -1 + i32.xor + i32.and + i32.store offset=4 + end + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $for-loop|0 + end + end + local.get $1 + global.set $~lib/rt/pure/CUR + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if + local.get $3 + i32.load + call $~lib/rt/pure/scan + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if + local.get $3 + i32.load + local.set $4 + local.get $4 + local.get $4 + i32.load offset=4 + i32.const -2147483648 + i32.const -1 + i32.xor + i32.and + i32.store offset=4 + local.get $4 + call $~lib/rt/pure/collectWhite + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|2 + end + end + local.get $0 + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/tlsf/growMemory (; 28 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + i32.const 536870904 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.set $1 + end + memory.size + local.set $2 + local.get $1 + i32.const 16 + local.get $2 + i32.const 16 + i32.shl + i32.const 16 + i32.sub + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + i32.ne + i32.shl + i32.add + local.set $1 + local.get $1 + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $4 + local.get $2 + local.tee $3 + local.get $4 + local.tee $5 + local.get $3 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $7 + local.get $0 + local.get $2 + i32.const 16 + i32.shl + local.get $7 + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (; 29 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 365 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.sub + local.set $4 + local.get $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + local.set $5 + local.get $5 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const 1 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 30 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/collectLock + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 490 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + global.get $~lib/gc/gc.auto + if + i32.const 1 + global.set $~lib/rt/tlsf/collectLock + call $~lib/rt/pure/__collect + i32.const 0 + global.set $~lib/rt/tlsf/collectLock + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 502 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + end + else + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 507 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + end + end + local.get $3 + i32.load + i32.const -4 + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 510 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 0 + i32.store offset=4 + local.get $3 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $3 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $3 + local.get $2 + call $~lib/rt/tlsf/prepareBlock + local.get $3 + call $~lib/rt/rtrace/onalloc + local.get $3 + ) + (func $~lib/rt/tlsf/__alloc (; 31 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $2 + local.get $2 + local.get $1 + i32.store offset=8 + local.get $2 + i32.const 16 + i32.add + ) + (func $~lib/rt/pure/increment (; 32 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 104 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/rtrace/onincrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 107 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 33 ;) (param $0 i32) (result i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $for/Ref#constructor (; 34 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + ) + (func $~lib/rt/__typeinfo (; 35 ;) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/__rtti_base + local.set $1 + local.get $0 + local.get $1 + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $0 + i32.const 8 + i32.mul + i32.add + i32.load + ) + (func $~lib/util/memory/memcpy (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if + local.get $0 + local.tee $6 + i32.const 1 + i32.add + local.set $0 + local.get $6 + local.get $1 + local.tee $6 + i32.const 1 + i32.add + local.set $1 + local.get $6 + i32.load8_u + i32.store8 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + br $while-continue|0 + end + end + local.get $0 + i32.const 3 + i32.and + i32.const 0 + i32.eq + if + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $1 + i32.const 4 + i32.add + i32.load + i32.store + local.get $0 + i32.const 8 + i32.add + local.get $1 + i32.const 8 + i32.add + i32.load + i32.store + local.get $0 + i32.const 12 + i32.add + local.get $1 + i32.const 12 + i32.add + i32.load + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|1 + end + end + local.get $2 + i32.const 8 + i32.and + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $1 + i32.const 4 + i32.add + i32.load + i32.store + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + end + local.get $2 + i32.const 4 + i32.and + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.set $0 + local.get $1 + i32.const 4 + i32.add + local.set $1 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $0 + local.get $1 + i32.load16_u + i32.store16 + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + return + end + local.get $2 + i32.const 32 + i32.ge_u + if + block $break|2 + block $case2|2 + block $case1|2 + block $case0|2 + local.get $0 + i32.const 3 + i32.and + local.set $5 + local.get $5 + i32.const 1 + i32.eq + br_if $case0|2 + local.get $5 + i32.const 2 + i32.eq + br_if $case1|2 + local.get $5 + i32.const 3 + i32.eq + br_if $case2|2 + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 3 + i32.sub + local.set $2 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 1 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 24 + i32.shr_u + local.get $4 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 5 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 24 + i32.shr_u + local.get $3 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 9 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 24 + i32.shr_u + local.get $4 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 13 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 24 + i32.shr_u + local.get $3 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|3 + end + end + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 2 + i32.sub + local.set $2 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 2 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 16 + i32.shr_u + local.get $4 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 6 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 16 + i32.shr_u + local.get $3 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 10 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 16 + i32.shr_u + local.get $4 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 14 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 16 + i32.shr_u + local.get $3 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|4 + end + end + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 3 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 8 + i32.shr_u + local.get $4 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 7 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 8 + i32.shr_u + local.get $3 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 11 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 8 + i32.shr_u + local.get $4 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 15 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 8 + i32.shr_u + local.get $3 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|5 + end + end + br $break|2 + end + end + local.get $2 + i32.const 16 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 8 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 4 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + ) + (func $~lib/memory/memory.copy (; 37 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $5 + local.get $4 + i32.eq + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $4 + local.get $3 + i32.add + local.get $5 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $5 + local.get $3 + i32.add + local.get $4 + i32.le_u + end + if + local.get $5 + local.get $4 + local.get $3 + call $~lib/util/memory/memcpy + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $4 + i32.lt_u + if + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $5 + local.tee $7 + i32.const 1 + i32.add + local.set $5 + local.get $7 + local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 + i32.load8_u + i32.store8 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if + local.get $5 + local.get $4 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $while-continue|1 + end + end + end + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if + local.get $5 + local.tee $7 + i32.const 1 + i32.add + local.set $5 + local.get $7 + local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $while-continue|2 + end + end + else + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 + end + end + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + local.get $3 + i32.add + local.get $4 + local.get $3 + i32.add + i64.load + i64.store + br $while-continue|4 + end + end + end + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|5 + end + end + end + end + ) + (func $~lib/rt/tlsf/__free (; 38 ;) (param $0 i32) + local.get $0 + i32.const 0 + i32.ne + if (result i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 593 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/growRoots (; 39 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/rt/pure/ROOTS + local.set $0 + global.get $~lib/rt/pure/CUR + local.get $0 + i32.sub + local.set $1 + local.get $1 + i32.const 2 + i32.mul + local.tee $2 + i32.const 64 + i32.const 2 + i32.shl + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + local.set $4 + local.get $4 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.set $5 + local.get $5 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onfree + local.get $5 + local.get $0 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onalloc + local.get $0 + call $~lib/rt/tlsf/__free + end + local.get $5 + global.set $~lib/rt/pure/ROOTS + local.get $5 + local.get $1 + i32.add + global.set $~lib/rt/pure/CUR + local.get $5 + local.get $4 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 40 ;) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.set $1 + local.get $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 4 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 41 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.and + local.set $2 + local.get $0 + call $~lib/rt/rtrace/ondecrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 115 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + else + local.get $0 + i32.const -2147483648 + i32.const 0 + i32.or + i32.const 0 + i32.or + i32.store offset=4 + end + else + local.get $2 + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 124 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 16 + i32.and + i32.eqz + if + local.get $0 + i32.const -2147483648 + i32.const 805306368 + i32.or + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + else + local.get $0 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + end + end + ) + (func $~lib/rt/pure/__release (; 42 ;) (param $0 i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $for/testRef (; 43 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 0 + local.set $0 + i32.const 0 + call $for/Ref#constructor + local.set $1 + loop $for-loop|0 + local.get $1 + local.set $2 + local.get $2 + if + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + i32.const 0 + local.tee $3 + local.get $1 + local.tee $4 + i32.ne + if + local.get $3 + call $~lib/rt/pure/__retain + local.set $3 + local.get $4 + call $~lib/rt/pure/__release + end + local.get $3 + local.set $1 + else + i32.const 0 + call $for/Ref#constructor + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 + local.set $1 + end + br $for-loop|0 + end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 137 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 138 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + local.get $1 + call $~lib/rt/pure/__release + ) + (func $for/getRef (; 44 ;) (result i32) + i32.const 0 + call $for/Ref#constructor + ) + (func $for/testRefAutorelease (; 45 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 0 + local.set $0 + i32.const 0 + call $for/Ref#constructor + local.set $1 + call $for/getRef + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 + local.set $1 + block $for-break0 + loop $for-loop|0 + call $for/getRef + local.tee $2 + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + if + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + i32.const 0 + local.tee $2 + local.get $1 + local.tee $4 + i32.ne + if + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 + call $~lib/rt/pure/__release + end + local.get $2 + local.set $1 + br $for-break0 + end + call $for/getRef + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 + local.set $1 + br $for-loop|0 + end + end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 157 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 158 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $for/ran + local.get $1 + call $~lib/rt/pure/__release + ) + (func $start:for (; 46 ;) + i32.const 0 + global.set $for/ran + call $for/testInitExpression + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 13 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testInitStatement + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 24 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testEmpty + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 34 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testConditionOmitted + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 44 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testAllOmitted + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 54 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testAlwaysTrue + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 66 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testAlwaysFalse + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 76 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testAlwaysContinues + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 85 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testAlwaysBreaks + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 94 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testAlwaysReturns + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 105 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testNestedContinue + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 127 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testRef + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 143 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $for/ran + call $for/testRefAutorelease + global.get $for/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 163 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 47 ;) + global.get $~started + if + return + else + i32.const 1 + global.set $~started + end + call $start:for + ) + (func $~lib/rt/pure/__visit (; 48 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $2 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + block $case0|0 + local.get $1 + local.set $3 + local.get $3 + i32.const 1 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + local.get $3 + i32.const 3 + i32.eq + br_if $case2|0 + local.get $3 + i32.const 4 + i32.eq + br_if $case3|0 + local.get $3 + i32.const 5 + i32.eq + br_if $case4|0 + br $case5|0 + end + local.get $2 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $2 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 75 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $2 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $2 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $2 + i32.load offset=4 + local.set $3 + local.get $3 + i32.const -268435456 + i32.and + local.get $3 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 86 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $3 + i32.const 1 + i32.add + i32.store offset=4 + local.get $3 + i32.const 1879048192 + i32.and + i32.const 0 + i32.ne + if + local.get $2 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $2 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 97 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + end + ) + (func $~lib/rt/__visit_members (; 49 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + block $switch$1$default + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + unreachable ) ) diff --git a/tests/compiler/function-expression.optimized.wat b/tests/compiler/function-expression.optimized.wat index a045335f4f..bc0b3e9c8a 100644 --- a/tests/compiler/function-expression.optimized.wat +++ b/tests/compiler/function-expression.optimized.wat @@ -9,9 +9,10 @@ (data (i32.const 16) ",\00\00\00\01\00\00\00\01\00\00\00,\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s") (table $0 12 funcref) (elem (i32.const 1) $start:function-expression~anonymous|0 $start:function-expression~anonymous|0 $start:function-expression~someName $start:function-expression~anonymous|2 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5 $start:function-expression~anonymous|2) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:function-expression~anonymous|0 (; 1 ;) (param $0 i32) (result i32) local.get $0 ) @@ -28,7 +29,7 @@ ) (func $function-expression/testOmitted (; 5 ;) (param $0 i32) (result i32) i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 local.get $0 @@ -42,13 +43,13 @@ ) (func $start:function-expression (; 8 ;) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength i32.const 5 call $function-expression/testOmitted i32.const 3 @@ -86,7 +87,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 call $start:function-expression~anonymous|3 @@ -101,11 +102,11 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength ) - (func $start (; 9 ;) + (func $~start (; 9 ;) call $start:function-expression ) ) diff --git a/tests/compiler/function-expression.untouched.wat b/tests/compiler/function-expression.untouched.wat index 6797c23dc5..a3200b2659 100644 --- a/tests/compiler/function-expression.untouched.wat +++ b/tests/compiler/function-expression.untouched.wat @@ -10,12 +10,13 @@ (table $0 12 funcref) (elem (i32.const 1) $start:function-expression~anonymous|0 $start:function-expression~anonymous|1 $start:function-expression~someName $start:function-expression~anonymous|2 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5 $function-expression/testOmittedReturn1~anonymous|0 $function-expression/testOmittedReturn2~anonymous|0 $function-expression/testOmittedReturn3~anonymous|0 $function-expression/testNullable~anonymous|0) (global $function-expression/f1 (mut i32) (i32.const 1)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $function-expression/f2 (mut i32) (i32.const 2)) (global $function-expression/f3 (mut i32) (i32.const 3)) (global $function-expression/f4 (mut i32) (i32.const 4)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:function-expression~anonymous|0 (; 1 ;) (param $0 i32) (result i32) local.get $0 ) @@ -35,7 +36,7 @@ ) (func $function-expression/testOmitted (; 6 ;) (param $0 i32) (result i32) i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 local.get $0 @@ -83,7 +84,7 @@ ) (func $start:function-expression (; 17 ;) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 global.get $function-expression/f1 call_indirect (type $i32_=>_i32) @@ -99,7 +100,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 2 global.get $function-expression/f2 call_indirect (type $i32_=>_i32) @@ -115,11 +116,11 @@ unreachable end i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $function-expression/f3 call_indirect (type $none_=>_none) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $function-expression/f4 call_indirect (type $none_=>_i32) i32.const 1 @@ -173,7 +174,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 call $function-expression/testOmittedReturn1 @@ -190,7 +191,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 call $function-expression/testOmittedReturn2 @@ -207,7 +208,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 call $function-expression/testOmittedReturn3 @@ -237,7 +238,7 @@ unreachable end ) - (func $start (; 18 ;) + (func $~start (; 18 ;) call $start:function-expression ) ) diff --git a/tests/compiler/function-types.optimized.wat b/tests/compiler/function-types.optimized.wat index acd1817c65..582c78c180 100644 --- a/tests/compiler/function-types.optimized.wat +++ b/tests/compiler/function-types.optimized.wat @@ -11,10 +11,11 @@ (table $0 5 funcref) (elem (i32.const 1) $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0) (global $function-types/i32Adder (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $function-types/i64Adder (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $function-types/makeAdder~anonymous|0 (; 1 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -32,7 +33,7 @@ ) (func $function-types/doAddWithFn (; 4 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $1 local.get $2 @@ -42,7 +43,7 @@ i32.const 1 global.set $function-types/i32Adder i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 call $function-types/makeAdder~anonymous|0 @@ -59,7 +60,7 @@ i32.const 2 global.set $function-types/i64Adder i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i64.const 10 i64.const 20 call $function-types/makeAdder~anonymous|0 @@ -74,7 +75,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength f64.const 1.5 f64.const 2.5 call $function-types/makeAdder~anonymous|0 @@ -103,7 +104,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 3 i32.const 4 call $function-types/makeAdder~anonymous|0 @@ -132,7 +133,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 i32.const 1 @@ -162,7 +163,7 @@ unreachable end ) - (func $start (; 6 ;) + (func $~start (; 6 ;) call $start:function-types ) ) diff --git a/tests/compiler/function-types.untouched.wat b/tests/compiler/function-types.untouched.wat index ee705b4b00..5c5c1ecff9 100644 --- a/tests/compiler/function-types.untouched.wat +++ b/tests/compiler/function-types.untouched.wat @@ -12,10 +12,11 @@ (table $0 5 funcref) (elem (i32.const 1) $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/addI32) (global $function-types/i32Adder (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $function-types/i64Adder (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $function-types/makeAdder~anonymous|0 (; 1 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -42,7 +43,7 @@ ) (func $function-types/doAddWithFn (; 7 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $1 local.get $2 @@ -50,7 +51,7 @@ ) (func $function-types/doAdd (; 8 ;) (param $0 i32) (param $1 i32) (result i32) i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $1 call $function-types/makeAdder @@ -63,7 +64,7 @@ ) (func $function-types/makeAndAdd (; 10 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $1 local.get $2 @@ -73,7 +74,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 2 i32.sub br_table $0of1 $1of1 $outOfRange @@ -92,7 +93,7 @@ call $function-types/makeAdder global.set $function-types/i32Adder i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 global.get $function-types/i32Adder @@ -111,7 +112,7 @@ call $function-types/makeAdder global.set $function-types/i64Adder i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i64.const 10 i64.const 20 global.get $function-types/i64Adder @@ -128,7 +129,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength f64.const 1.5 f64.const 2.5 call $function-types/makeAdder @@ -189,7 +190,7 @@ unreachable end i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 i32.const 0 @@ -221,7 +222,7 @@ unreachable end ) - (func $start (; 13 ;) + (func $~start (; 13 ;) call $start:function-types ) ) diff --git a/tests/compiler/function.untouched.wat b/tests/compiler/function.untouched.wat index 7bb458bf87..30f0205ad9 100644 --- a/tests/compiler/function.untouched.wat +++ b/tests/compiler/function.untouched.wat @@ -17,7 +17,7 @@ (memory $0 0) (table $0 1 funcref) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $function/_ (; 0 ;) nop ) @@ -131,7 +131,7 @@ call $function/ddd drop ) - (func $start (; 19 ;) + (func $~start (; 19 ;) call $start:function ) ) diff --git a/tests/compiler/getter-call.optimized.wat b/tests/compiler/getter-call.optimized.wat index 5123b3b9ba..23a4033135 100644 --- a/tests/compiler/getter-call.optimized.wat +++ b/tests/compiler/getter-call.optimized.wat @@ -5,10 +5,11 @@ (memory $0 0) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "test" (func $getter-call/test)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -79,10 +80,10 @@ (func $getter-call/test (; 2 ;) (result i32) call $~lib/rt/stub/__alloc i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength i32.const 42 ) - (func $start (; 3 ;) + (func $~start (; 3 ;) i32.const 16 global.set $~lib/rt/stub/startOffset i32.const 16 diff --git a/tests/compiler/getter-call.untouched.wat b/tests/compiler/getter-call.untouched.wat index 544088ea03..146976a778 100644 --- a/tests/compiler/getter-call.untouched.wat +++ b/tests/compiler/getter-call.untouched.wat @@ -9,11 +9,12 @@ (elem (i32.const 1) $getter-call/C#get:x~anonymous|0) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 8)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "test" (func $getter-call/test)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -152,7 +153,7 @@ call $getter-call/C#constructor local.set $0 i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call $getter-call/C#get:x call_indirect (type $none_=>_i32) @@ -161,7 +162,7 @@ call $~lib/rt/stub/__release local.get $1 ) - (func $start (; 8 ;) + (func $~start (; 8 ;) global.get $~lib/heap/__heap_base i32.const 15 i32.add diff --git a/tests/compiler/getter-setter.optimized.wat b/tests/compiler/getter-setter.optimized.wat index 913af85512..997fe6c877 100644 --- a/tests/compiler/getter-setter.optimized.wat +++ b/tests/compiler/getter-setter.optimized.wat @@ -6,8 +6,8 @@ (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00g\00e\00t\00t\00e\00r\00-\00s\00e\00t\00t\00e\00r\00.\00t\00s") (global $getter-setter/Foo._bar (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) - (func $start (; 1 ;) + (start $~start) + (func $~start (; 1 ;) global.get $getter-setter/Foo._bar if i32.const 0 diff --git a/tests/compiler/getter-setter.untouched.wat b/tests/compiler/getter-setter.untouched.wat index 2827fe41d3..945638e031 100644 --- a/tests/compiler/getter-setter.untouched.wat +++ b/tests/compiler/getter-setter.untouched.wat @@ -9,7 +9,7 @@ (table $0 1 funcref) (global $getter-setter/Foo._bar (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $getter-setter/Foo.bar.get:bar (; 1 ;) (result i32) global.get $getter-setter/Foo._bar ) @@ -59,7 +59,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:getter-setter ) ) diff --git a/tests/compiler/if.optimized.wat b/tests/compiler/if.optimized.wat index 63a2895271..f43592ac61 100644 --- a/tests/compiler/if.optimized.wat +++ b/tests/compiler/if.optimized.wat @@ -11,7 +11,7 @@ (export "ifThen" (func $if/ifThen)) (export "ifThenElseBlock" (func $if/ifThenElse)) (export "ifAlwaysReturns" (func $if/ifAlwaysReturns)) - (start $start) + (start $~start) (func $if/ifThenElse (; 1 ;) (param $0 i32) (result i32) i32.const 1 i32.const 0 @@ -107,7 +107,7 @@ unreachable end ) - (func $start (; 5 ;) + (func $~start (; 5 ;) call $start:if ) ) diff --git a/tests/compiler/if.untouched.wat b/tests/compiler/if.untouched.wat index 96ef040980..1df0219c66 100644 --- a/tests/compiler/if.untouched.wat +++ b/tests/compiler/if.untouched.wat @@ -12,7 +12,7 @@ (export "ifThen" (func $if/ifThen)) (export "ifThenElseBlock" (func $if/ifThenElseBlock)) (export "ifAlwaysReturns" (func $if/ifAlwaysReturns)) - (start $start) + (start $~start) (func $if/ifThenElse (; 1 ;) (param $0 i32) (result i32) local.get $0 if @@ -138,7 +138,7 @@ end unreachable ) - (func $start (; 6 ;) + (func $~start (; 6 ;) call $start:if ) ) diff --git a/tests/compiler/import.untouched.wat b/tests/compiler/import.untouched.wat index 3808403afd..747041e39d 100644 --- a/tests/compiler/import.untouched.wat +++ b/tests/compiler/import.untouched.wat @@ -7,7 +7,7 @@ (global $export/b i32 (i32.const 2)) (global $export/c i32 (i32.const 3)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $export/add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -59,7 +59,7 @@ call $export/ns.two call $export-default/theDefault ) - (func $start (; 6 ;) + (func $~start (; 6 ;) call $start:import ) ) diff --git a/tests/compiler/infer-array.optimized.wat b/tests/compiler/infer-array.optimized.wat index 114518a35c..10b1b22c7f 100644 --- a/tests/compiler/infer-array.optimized.wat +++ b/tests/compiler/infer-array.optimized.wat @@ -22,7 +22,7 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -132,7 +132,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -158,10 +158,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -182,11 +182,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -207,7 +207,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -219,7 +219,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -240,10 +240,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -259,11 +259,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -277,7 +277,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -454,7 +454,7 @@ i32.const 0 i32.store offset=4 ) - (func $start (; 9 ;) + (func $~start (; 9 ;) call $start:infer-array ) ) diff --git a/tests/compiler/infer-array.untouched.wat b/tests/compiler/infer-array.untouched.wat index 17902168dd..149ccb73b7 100644 --- a/tests/compiler/infer-array.untouched.wat +++ b/tests/compiler/infer-array.untouched.wat @@ -24,7 +24,7 @@ (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 364)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -139,39 +139,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -179,13 +179,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -226,9 +226,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -385,13 +384,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -466,9 +465,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -507,13 +505,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -588,9 +586,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -615,13 +612,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -696,9 +693,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -1168,6 +1164,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -1214,13 +1211,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1231,30 +1228,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -1271,37 +1267,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -1312,15 +1306,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1337,17 +1331,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -1360,16 +1353,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -1381,9 +1373,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -1609,24 +1600,16 @@ i32.const 32 call $~lib/rt/__allocArray call $~lib/rt/stub/__retain - local.tee $1 - call $~lib/rt/stub/__retain - local.set $0 + local.set $1 local.get $1 call $~lib/rt/stub/__release - local.get $0 - call $~lib/rt/stub/__release i32.const 3 i32.const 3 i32.const 4 i32.const 176 call $~lib/rt/__allocArray call $~lib/rt/stub/__retain - local.tee $1 - call $~lib/rt/stub/__retain local.set $0 - local.get $1 - call $~lib/rt/stub/__release local.get $0 call $~lib/rt/stub/__release i32.const 2 @@ -1635,10 +1618,8 @@ i32.const 224 call $~lib/rt/__allocArray call $~lib/rt/stub/__retain - local.tee $1 - call $~lib/rt/stub/__retain - local.set $0 - local.get $0 + local.set $1 + local.get $1 i32.const 1 call $~lib/array/Array#__get i32.const -1 @@ -1654,19 +1635,13 @@ end local.get $1 call $~lib/rt/stub/__release - local.get $0 - call $~lib/rt/stub/__release i32.const 3 i32.const 3 i32.const 4 i32.const 304 call $~lib/rt/__allocArray call $~lib/rt/stub/__retain - local.tee $1 - call $~lib/rt/stub/__retain local.set $0 - local.get $1 - call $~lib/rt/stub/__release local.get $0 call $~lib/rt/stub/__release i32.const 3 @@ -1675,47 +1650,43 @@ i32.const 352 call $~lib/rt/__allocArray call $~lib/rt/stub/__retain - local.tee $1 - call $~lib/rt/stub/__retain - local.set $0 - local.get $0 + local.set $1 + local.get $1 i32.const 1 call $~lib/array/Array#__get local.set $2 local.get $1 call $~lib/rt/stub/__release - local.get $0 - call $~lib/rt/stub/__release i32.const 0 call $infer-array/Ref#constructor - local.set $0 + local.set $1 i32.const 0 call $infer-array/Ref#constructor - local.set $1 + local.set $0 i32.const 2 i32.const 2 i32.const 8 i32.const 0 call $~lib/rt/__allocArray + call $~lib/rt/stub/__retain local.set $3 local.get $3 i32.load offset=4 local.set $4 local.get $4 - local.get $0 + local.get $1 call $~lib/rt/stub/__retain i32.store local.get $4 - local.get $1 + local.get $0 call $~lib/rt/stub/__retain i32.store offset=4 local.get $3 - call $~lib/rt/stub/__retain local.set $4 - local.get $0 - call $~lib/rt/stub/__release local.get $1 call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release local.get $4 call $~lib/rt/stub/__release local.get $3 @@ -1731,60 +1702,60 @@ i32.const 8 i32.const 0 call $~lib/rt/__allocArray - local.set $1 - local.get $1 - i32.load offset=4 + call $~lib/rt/stub/__retain local.set $0 local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 local.get $3 call $~lib/rt/stub/__retain i32.store - local.get $0 + local.get $1 local.get $4 call $~lib/rt/stub/__retain i32.store offset=4 - local.get $1 - call $~lib/rt/stub/__retain - local.set $0 + local.get $0 + local.set $1 local.get $3 call $~lib/rt/stub/__release local.get $4 call $~lib/rt/stub/__release - local.get $0 - call $~lib/rt/stub/__release local.get $1 call $~lib/rt/stub/__release + local.get $0 + call $~lib/rt/stub/__release i32.const 0 call $infer-array/Ref#constructor - local.set $1 + local.set $0 i32.const 2 i32.const 2 i32.const 8 i32.const 0 call $~lib/rt/__allocArray - local.set $0 - local.get $0 + call $~lib/rt/stub/__retain + local.set $1 + local.get $1 i32.load offset=4 local.set $4 local.get $4 - local.get $1 + local.get $0 call $~lib/rt/stub/__retain i32.store local.get $4 i32.const 0 call $~lib/rt/stub/__retain i32.store offset=4 - local.get $0 - call $~lib/rt/stub/__retain - local.set $4 local.get $1 + local.set $4 + local.get $0 call $~lib/rt/stub/__release local.get $4 call $~lib/rt/stub/__release - local.get $0 + local.get $1 call $~lib/rt/stub/__release ) - (func $start (; 20 ;) + (func $~start (; 20 ;) call $start:infer-array ) ) diff --git a/tests/compiler/infer-generic.optimized.wat b/tests/compiler/infer-generic.optimized.wat index 0dcfc6f211..2d981a9ae7 100644 --- a/tests/compiler/infer-generic.optimized.wat +++ b/tests/compiler/infer-generic.optimized.wat @@ -7,13 +7,14 @@ (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00i\00n\00f\00e\00r\00-\00g\00e\00n\00e\00r\00i\00c\00.\00t\00s") (data (i32.const 64) "\0c\00\00\00\01\00\00\00\00\00\00\00\0c\00\00\00\00\00\80?\00\00\00@\00\00@@") (data (i32.const 96) "\10\00\00\00\01\00\00\00\03\00\00\00\10\00\00\00P\00\00\00P\00\00\00\0c\00\00\00\03") - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "test1" (func $infer-generic/test1)) (export "test2" (func $infer-generic/test2)) (export "test3" (func $infer-generic/test2)) (export "test4" (func $infer-generic/test2)) - (start $start) + (start $~start) (func $start:infer-generic~anonymous|0 (; 0 ;) (param $0 i32) (param $1 f32) (param $2 i32) (param $3 i32) (result i32) local.get $1 f32.const 0 @@ -30,7 +31,7 @@ i32.const 124 i32.load local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.const 124 @@ -43,7 +44,7 @@ i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 116 i32.load @@ -60,7 +61,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -70,7 +71,7 @@ (func $infer-generic/test2 (; 3 ;) (param $0 i32) (result i32) local.get $0 ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $~lib/array/Array#reduce ) ) diff --git a/tests/compiler/infer-generic.untouched.wat b/tests/compiler/infer-generic.untouched.wat index 382a3f69b9..a5d3745e6a 100644 --- a/tests/compiler/infer-generic.untouched.wat +++ b/tests/compiler/infer-generic.untouched.wat @@ -15,13 +15,14 @@ (table $0 2 funcref) (elem (i32.const 1) $start:infer-generic~anonymous|0) (global $infer-generic/arr i32 (i32.const 112)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "test1" (func $infer-generic/test1)) (export "test2" (func $infer-generic/test2)) (export "test3" (func $infer-generic/test3)) (export "test4" (func $infer-generic/test4)) - (start $start) + (start $~start) (func $infer-generic/inferCompatible (; 1 ;) (param $0 f64) (param $1 f64) (result i32) local.get $0 local.get $1 @@ -59,28 +60,28 @@ (local $7 i32) local.get $2 local.set $3 - block $break|0 - i32.const 0 - local.set $4 + i32.const 0 + local.set $4 + local.get $0 + i32.load offset=12 + local.set $5 + loop $for-loop|0 + local.get $4 + local.get $5 + local.tee $6 local.get $0 i32.load offset=12 - local.set $5 - loop $loop|0 - local.get $4 - local.get $5 - local.tee $6 - local.get $0 - i32.load offset=12 - local.tee $7 - local.get $6 - local.get $7 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_s + select + i32.lt_s + local.set $6 + local.get $6 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $0 i32.load offset=4 @@ -98,9 +99,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -164,7 +164,7 @@ local.get $0 call $infer-generic/inferEncapsulatedFunctionMixed ) - (func $start (; 15 ;) + (func $~start (; 15 ;) call $start:infer-generic ) ) diff --git a/tests/compiler/infer-type.optimized.wat b/tests/compiler/infer-type.optimized.wat index 30971ca988..3da1fa4920 100644 --- a/tests/compiler/infer-type.optimized.wat +++ b/tests/compiler/infer-type.optimized.wat @@ -6,7 +6,7 @@ (global $infer-type/rf (mut f32) (f32.const 0)) (global $infer-type/rF (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:infer-type (; 0 ;) (local $0 i32) i32.const 0 @@ -17,7 +17,7 @@ global.set $infer-type/rf f64.const 0 global.set $infer-type/rF - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 10 i32.lt_s @@ -26,11 +26,11 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:infer-type ) ) diff --git a/tests/compiler/infer-type.untouched.wat b/tests/compiler/infer-type.untouched.wat index a636b8f7c9..dde11a7263 100644 --- a/tests/compiler/infer-type.untouched.wat +++ b/tests/compiler/infer-type.untouched.wat @@ -16,7 +16,7 @@ (global $infer-type/inferi (mut i32) (i32.const -2147483648)) (global $infer-type/inferu (mut i32) (i32.const 2147483647)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $infer-type/locals (; 0 ;) (local $0 i32) (local $1 i64) @@ -52,6 +52,7 @@ (func $start:infer-type (; 5 ;) (local $0 i32) (local $1 i32) + (local $2 i32) global.get $infer-type/i drop global.get $infer-type/I @@ -75,27 +76,26 @@ global.set $infer-type/rF global.get $infer-type/rF drop - block $break|0 - i32.const 0 - local.set $0 - i32.const 10 - local.set $1 - loop $loop|0 - local.get $0 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $0 + i32.const 10 + local.set $1 + loop $for-loop|0 + local.get $0 + local.get $1 + i32.lt_s + local.set $2 + local.get $2 + if local.get $0 i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end - unreachable end ) - (func $start (; 6 ;) + (func $~start (; 6 ;) call $start:infer-type ) ) diff --git a/tests/compiler/inlining-blocklocals.optimized.wat b/tests/compiler/inlining-blocklocals.optimized.wat index 19e12183cb..daedfe913b 100644 --- a/tests/compiler/inlining-blocklocals.optimized.wat +++ b/tests/compiler/inlining-blocklocals.optimized.wat @@ -9,7 +9,7 @@ (global $inlining-blocklocals/theCall_b (mut i32) (i32.const 0)) (global $inlining-blocklocals/theCall_c (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $inlining-blocklocals/test (; 1 ;) (local $0 i32) global.get $inlining-blocklocals/b @@ -46,7 +46,7 @@ unreachable end ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $inlining-blocklocals/test ) ) diff --git a/tests/compiler/inlining-blocklocals.untouched.wat b/tests/compiler/inlining-blocklocals.untouched.wat index a8721708df..637c130cb0 100644 --- a/tests/compiler/inlining-blocklocals.untouched.wat +++ b/tests/compiler/inlining-blocklocals.untouched.wat @@ -10,7 +10,7 @@ (global $inlining-blocklocals/theCall_b (mut i32) (i32.const 0)) (global $inlining-blocklocals/theCall_c (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $inlining-blocklocals/test (; 1 ;) (local $0 i32) (local $1 i32) @@ -95,7 +95,7 @@ (func $start:inlining-blocklocals (; 2 ;) call $inlining-blocklocals/test ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:inlining-blocklocals ) ) diff --git a/tests/compiler/inlining.optimized.wat b/tests/compiler/inlining.optimized.wat index 11ef43f1a3..dbab61e06e 100644 --- a/tests/compiler/inlining.optimized.wat +++ b/tests/compiler/inlining.optimized.wat @@ -7,12 +7,13 @@ (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 16) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s") - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "test" (func $inlining/test)) - (start $start) + (start $~start) (func $inlining/test (; 1 ;) (result i32) i32.const 3 ) @@ -183,9 +184,9 @@ unreachable end ) - (func $start (; 5 ;) + (func $~start (; 5 ;) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 64 global.set $~lib/rt/stub/startOffset i32.const 64 diff --git a/tests/compiler/inlining.untouched.wat b/tests/compiler/inlining.untouched.wat index a72aa03a41..c092b72abd 100644 --- a/tests/compiler/inlining.untouched.wat +++ b/tests/compiler/inlining.untouched.wat @@ -11,13 +11,14 @@ (table $0 2 funcref) (elem (i32.const 1) $inlining/func_fe~anonymous|0) (global $inlining/constantGlobal i32 (i32.const 1)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 56)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "test" (func $inlining/test)) - (start $start) + (start $~start) (func $inlining/test (; 1 ;) (result i32) global.get $inlining/constantGlobal i32.const 2 @@ -214,7 +215,7 @@ i32.const 0 local.set $2 i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 2 i32.const 1 call_indirect (type $i32_=>_i32) @@ -516,7 +517,7 @@ global.set $~lib/rt/stub/offset call $inlining/test_ctor ) - (func $start (; 10 ;) + (func $~start (; 10 ;) call $start:inlining ) ) diff --git a/tests/compiler/instanceof.optimized.wat b/tests/compiler/instanceof.optimized.wat index 02d11c651f..1ae1730b29 100644 --- a/tests/compiler/instanceof.optimized.wat +++ b/tests/compiler/instanceof.optimized.wat @@ -6,8 +6,8 @@ (data (i32.const 16) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00i\00n\00s\00t\00a\00n\00c\00e\00o\00f\00.\00t\00s") (global $instanceof/an (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) - (func $start (; 1 ;) + (start $~start) + (func $~start (; 1 ;) global.get $instanceof/an if i32.const 0 diff --git a/tests/compiler/instanceof.untouched.wat b/tests/compiler/instanceof.untouched.wat index 554ddde4a4..e7012fdc81 100644 --- a/tests/compiler/instanceof.untouched.wat +++ b/tests/compiler/instanceof.untouched.wat @@ -16,7 +16,7 @@ (global $instanceof/F (mut f64) (f64.const 0)) (global $instanceof/an (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $instanceof/isI32 (; 1 ;) (param $0 i32) (result i32) i32.const 1 return @@ -129,7 +129,7 @@ unreachable end ) - (func $start (; 8 ;) + (func $~start (; 8 ;) call $start:instanceof ) ) diff --git a/tests/compiler/limits.untouched.wat b/tests/compiler/limits.untouched.wat index 4e9138ede2..234e6174c2 100644 --- a/tests/compiler/limits.untouched.wat +++ b/tests/compiler/limits.untouched.wat @@ -29,7 +29,7 @@ (global $~lib/builtins/f64.MIN_SAFE_INTEGER f64 (f64.const -9007199254740991)) (global $~lib/builtins/f64.MAX_SAFE_INTEGER f64 (f64.const 9007199254740991)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:limits (; 0 ;) global.get $~lib/builtins/i8.MIN_VALUE drop @@ -84,7 +84,7 @@ global.get $~lib/builtins/f64.MAX_SAFE_INTEGER drop ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:limits ) ) diff --git a/tests/compiler/literals.untouched.wat b/tests/compiler/literals.untouched.wat index e19c87fcc2..36f6d45343 100644 --- a/tests/compiler/literals.untouched.wat +++ b/tests/compiler/literals.untouched.wat @@ -3,7 +3,7 @@ (memory $0 0) (table $0 1 funcref) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:literals (; 0 ;) i32.const 0 drop @@ -94,7 +94,7 @@ i32.const 0 drop ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:literals ) ) diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index da9ba5517a..0298582781 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -7,7 +7,7 @@ (global $logical/f (mut f32) (f32.const 0)) (global $logical/F (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:logical (; 0 ;) i32.const 2 global.set $logical/i @@ -42,7 +42,7 @@ f64.const nan:0x8000000000000 global.set $logical/F ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:logical ) ) diff --git a/tests/compiler/logical.untouched.wat b/tests/compiler/logical.untouched.wat index 96e168b11d..5e896dfe4f 100644 --- a/tests/compiler/logical.untouched.wat +++ b/tests/compiler/logical.untouched.wat @@ -11,7 +11,7 @@ (global $logical/f (mut f32) (f32.const 0)) (global $logical/F (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $logical/testShortcutAnd (; 1 ;) (param $0 i64) (param $1 i32) (result i32) local.get $0 i64.const 0 @@ -542,7 +542,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:logical ) ) diff --git a/tests/compiler/loop-flow.optimized.wat b/tests/compiler/loop-flow.optimized.wat index 36847e855f..97d51576a3 100644 --- a/tests/compiler/loop-flow.optimized.wat +++ b/tests/compiler/loop-flow.optimized.wat @@ -19,12 +19,12 @@ (export "doReturn" (func $loop-flow/whileReturn)) (export "doThrow" (func $loop-flow/doThrow)) (export "doAny" (func $loop-flow/doAny)) - (start $start) + (start $~start) (func $loop-flow/whileReturn (; 1 ;) (result i32) i32.const 1 ) (func $loop-flow/whileAny (; 2 ;) (param $0 i32) (result i32) - loop $continue|0 (result i32) + loop $while-continue|0 (result i32) local.get $0 i32.const 1 i32.eq @@ -34,7 +34,7 @@ local.get $0 i32.const 2 i32.ne - br_if $continue|0 + br_if $while-continue|0 i32.const 80 i32.const 32 i32.const 24 @@ -45,7 +45,7 @@ end ) (func $loop-flow/forAny (; 3 ;) (param $0 i32) (result i32) - loop $loop|0 (result i32) + loop $for-loop|0 (result i32) local.get $0 i32.const 1 i32.eq @@ -63,12 +63,12 @@ call $~lib/builtins/abort unreachable end - br $loop|0 + br $for-loop|0 end end ) (func $loop-flow/doAny (; 4 ;) (param $0 i32) (result i32) - loop $continue|0 (result i32) + loop $do-continue|0 (result i32) local.get $0 i32.const 1 i32.eq @@ -78,7 +78,7 @@ local.get $0 i32.const 2 i32.ne - br_if $continue|0 + br_if $do-continue|0 i32.const 80 i32.const 32 i32.const 78 @@ -135,8 +135,8 @@ unreachable ) (func $loop-flow/whileContinue (; 7 ;) (result i32) - loop $continue|0 - br $continue|0 + loop $while-continue|0 + br $while-continue|0 end unreachable ) @@ -156,7 +156,7 @@ call $~lib/builtins/abort unreachable ) - (func $start (; 10 ;) + (func $~start (; 10 ;) call $start:loop-flow ) ) diff --git a/tests/compiler/loop-flow.untouched.wat b/tests/compiler/loop-flow.untouched.wat index d1c0cc5d54..e99396941a 100644 --- a/tests/compiler/loop-flow.untouched.wat +++ b/tests/compiler/loop-flow.untouched.wat @@ -20,46 +20,27 @@ (export "doReturn" (func $loop-flow/doReturn)) (export "doThrow" (func $loop-flow/doThrow)) (export "doAny" (func $loop-flow/doAny)) - (start $start) + (start $~start) (func $loop-flow/whileReturn (; 1 ;) (result i32) - i32.const 1 - return - ) - (func $loop-flow/whileAny (; 2 ;) (param $0 i32) (result i32) - loop $continue|0 - local.get $0 + (local $0 i32) + loop $while-continue|0 i32.const 1 - i32.eq + local.set $0 + local.get $0 if i32.const 1 return - else - local.get $0 - i32.const 2 - i32.eq - if - i32.const 80 - i32.const 32 - i32.const 24 - i32.const 21 - call $~lib/builtins/abort - unreachable - else - br $continue|0 - end - unreachable end - unreachable end unreachable ) - (func $loop-flow/forReturn (; 3 ;) (result i32) - i32.const 1 - return - ) - (func $loop-flow/forAny (; 4 ;) (param $0 i32) (result i32) - loop $loop|0 - block $continue|0 + (func $loop-flow/whileAny (; 2 ;) (param $0 i32) (result i32) + (local $1 i32) + loop $while-continue|0 + i32.const 1 + local.set $1 + local.get $1 + if local.get $0 i32.const 1 i32.eq @@ -73,27 +54,79 @@ if i32.const 80 i32.const 32 - i32.const 54 + i32.const 24 i32.const 21 call $~lib/builtins/abort unreachable else - br $continue|0 + br $while-continue|0 end unreachable end unreachable end - br $loop|0 + end + unreachable + ) + (func $loop-flow/forReturn (; 3 ;) (result i32) + (local $0 i32) + loop $for-loop|0 + i32.const 1 + local.set $0 + local.get $0 + if + i32.const 1 + return + end + end + unreachable + ) + (func $loop-flow/forAny (; 4 ;) (param $0 i32) (result i32) + (local $1 i32) + loop $for-loop|0 + i32.const 1 + local.set $1 + local.get $1 + if + block $for-continue|0 + local.get $0 + i32.const 1 + i32.eq + if + i32.const 1 + return + else + local.get $0 + i32.const 2 + i32.eq + if + i32.const 80 + i32.const 32 + i32.const 54 + i32.const 21 + call $~lib/builtins/abort + unreachable + else + br $for-continue|0 + end + unreachable + end + unreachable + end + br $for-loop|0 + end end unreachable ) (func $loop-flow/doReturn (; 5 ;) (result i32) - i32.const 1 - return + loop $do-continue|0 + i32.const 1 + return + end + unreachable ) (func $loop-flow/doAny (; 6 ;) (param $0 i32) (result i32) - loop $continue|0 + loop $do-continue|0 local.get $0 i32.const 1 i32.eq @@ -112,7 +145,7 @@ call $~lib/builtins/abort unreachable else - br $continue|0 + br $do-continue|0 end unreachable end @@ -198,42 +231,78 @@ end ) (func $loop-flow/whileThrow (; 8 ;) (result i32) - i32.const 80 - i32.const 32 - i32.const 11 - i32.const 4 - call $~lib/builtins/abort + (local $0 i32) + loop $while-continue|0 + i32.const 1 + local.set $0 + local.get $0 + if + i32.const 80 + i32.const 32 + i32.const 11 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end unreachable ) (func $loop-flow/whileContinue (; 9 ;) (result i32) - loop $continue|0 - br $continue|0 + (local $0 i32) + loop $while-continue|0 + i32.const 1 + local.set $0 + local.get $0 + if + br $while-continue|0 + end end unreachable ) (func $loop-flow/forThrow (; 10 ;) (result i32) - i32.const 80 - i32.const 32 - i32.const 41 - i32.const 4 - call $~lib/builtins/abort + (local $0 i32) + loop $for-loop|0 + i32.const 1 + local.set $0 + local.get $0 + if + i32.const 80 + i32.const 32 + i32.const 41 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end unreachable ) (func $loop-flow/forContinue (; 11 ;) (result i32) - loop $loop|0 - br $loop|0 + (local $0 i32) + loop $for-loop|0 + i32.const 1 + local.set $0 + local.get $0 + if + block $for-continue|0 + br $for-continue|0 + end + br $for-loop|0 + end end unreachable ) (func $loop-flow/doThrow (; 12 ;) (result i32) - i32.const 80 - i32.const 32 - i32.const 71 - i32.const 4 - call $~lib/builtins/abort + loop $do-continue|0 + i32.const 80 + i32.const 32 + i32.const 71 + i32.const 4 + call $~lib/builtins/abort + unreachable + end unreachable ) - (func $start (; 13 ;) + (func $~start (; 13 ;) call $start:loop-flow ) ) diff --git a/tests/compiler/loop-wrap.optimized.wat b/tests/compiler/loop-wrap.optimized.wat index eed3fe7b62..be239915d9 100644 --- a/tests/compiler/loop-wrap.optimized.wat +++ b/tests/compiler/loop-wrap.optimized.wat @@ -8,7 +8,7 @@ (export "testSubsequentWrapped" (func $loop-wrap/testSubsequentWrapped)) (func $loop-wrap/testAlwaysWrapped (; 0 ;) (local $0 i32) - loop $continue|0 + loop $do-continue|0 local.get $0 i32.const 10 i32.ne @@ -19,31 +19,31 @@ i32.const 255 i32.and local.tee $0 - br_if $continue|0 + br_if $do-continue|0 end end ) (func $loop-wrap/testFirstWrapped (; 1 ;) (local $0 i32) - loop $continue|0 + loop $while-continue|1 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 255 + i32.and + i32.const 0 local.get $0 i32.const 255 i32.and i32.const 10 i32.ne - if - local.get $0 - i32.const 1 - i32.add - local.tee $0 - i32.const 255 - i32.and - br_if $continue|0 - end + select + br_if $while-continue|1 end ) (func $loop-wrap/testSubsequentWrapped (; 2 ;) (param $0 i32) - loop $continue|0 + loop $do-continue|0 local.get $0 i32.const 255 i32.and @@ -56,7 +56,7 @@ i32.const 255 i32.and local.tee $0 - br_if $continue|0 + br_if $do-continue|0 end end ) diff --git a/tests/compiler/loop-wrap.untouched.wat b/tests/compiler/loop-wrap.untouched.wat index 6664586a99..e77f401ce4 100644 --- a/tests/compiler/loop-wrap.untouched.wat +++ b/tests/compiler/loop-wrap.untouched.wat @@ -9,15 +9,16 @@ (export "testSubsequentWrapped" (func $loop-wrap/testSubsequentWrapped)) (func $loop-wrap/testAlwaysWrapped (; 0 ;) (local $0 i32) + (local $1 i32) i32.const 0 local.set $0 - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $0 i32.const 10 i32.eq if - br $break|0 + br $do-break|0 end local.get $0 i32.const 1 @@ -25,47 +26,55 @@ i32.const 255 i32.and local.tee $0 - br_if $continue|0 + local.set $1 + local.get $1 + br_if $do-continue|0 end end ) (func $loop-wrap/testFirstWrapped (; 1 ;) (local $0 i32) + (local $1 i32) i32.const 0 local.set $0 - block $break|0 - loop $continue|0 - local.get $0 - i32.const 255 - i32.and - i32.const 10 - i32.eq - if - br $break|0 - end + block $while-break|1 + loop $while-continue|1 local.get $0 i32.const 1 i32.add local.tee $0 i32.const 255 i32.and - br_if $continue|0 + local.set $1 + local.get $1 + if + local.get $0 + i32.const 255 + i32.and + i32.const 10 + i32.eq + if + br $while-break|1 + end + br $while-continue|1 + end end end ) (func $loop-wrap/testSubsequentWrapped (; 2 ;) (param $0 i32) (local $1 i32) + (local $2 i32) local.get $0 local.set $1 - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $1 i32.const 255 i32.and i32.const 10 i32.eq if - br $break|0 + br $do-break|0 end local.get $1 i32.const 1 @@ -73,7 +82,9 @@ i32.const 255 i32.and local.tee $1 - br_if $continue|0 + local.set $2 + local.get $2 + br_if $do-continue|0 end end ) diff --git a/tests/compiler/mandelbrot.optimized.wat b/tests/compiler/mandelbrot.optimized.wat index 09864bf099..0757a198bc 100644 --- a/tests/compiler/mandelbrot.optimized.wat +++ b/tests/compiler/mandelbrot.optimized.wat @@ -431,7 +431,7 @@ local.set $0 i32.const 0 local.set $6 - loop $loop|0 + loop $for-loop|0 local.get $6 local.get $1 i32.lt_u @@ -449,47 +449,47 @@ local.set $5 i32.const 0 local.set $7 - loop $continue|1 - block $break|1 - local.get $4 - local.get $4 - f64.mul - local.tee $14 - local.get $5 - local.get $5 - f64.mul - local.tee $8 - f64.add - f64.const 4 - f64.le - i32.eqz - br_if $break|1 - f64.const 2 - local.get $4 - f64.mul - local.get $5 - f64.mul - local.get $10 - f64.add - local.set $5 - local.get $14 - local.get $8 - f64.sub - local.get $11 - f64.add - local.set $4 - local.get $7 - local.get $3 - i32.ge_u - br_if $break|1 - local.get $7 - i32.const 1 - i32.add - local.set $7 - br $continue|1 + loop $while-continue|1 + local.get $4 + local.get $4 + f64.mul + local.tee $14 + local.get $5 + local.get $5 + f64.mul + local.tee $8 + f64.add + f64.const 4 + f64.le + if + block $while-break|1 + f64.const 2 + local.get $4 + f64.mul + local.get $5 + f64.mul + local.get $10 + f64.add + local.set $5 + local.get $14 + local.get $8 + f64.sub + local.get $11 + f64.add + local.set $4 + local.get $7 + local.get $3 + i32.ge_u + br_if $while-break|1 + local.get $7 + i32.const 1 + i32.add + local.set $7 + br $while-continue|1 + end end end - loop $continue|2 + loop $while-continue|2 local.get $7 local.get $0 i32.lt_u @@ -516,7 +516,7 @@ i32.const 1 i32.add local.set $7 - br $continue|2 + br $while-continue|2 end end local.get $6 @@ -562,7 +562,7 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end end ) diff --git a/tests/compiler/mandelbrot.untouched.wat b/tests/compiler/mandelbrot.untouched.wat index 27741c31f4..4afa6f3586 100644 --- a/tests/compiler/mandelbrot.untouched.wat +++ b/tests/compiler/mandelbrot.untouched.wat @@ -716,12 +716,14 @@ (local $16 f64) (local $17 f64) (local $18 f64) - (local $19 f64) + (local $19 i32) (local $20 i32) (local $21 f64) (local $22 f64) (local $23 f64) (local $24 f64) + (local $25 f64) + (local $26 f64) local.get $1 f64.convert_i32_u f64.const 1 @@ -783,15 +785,15 @@ i32.lt_u select local.set $13 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_u + local.set $7 + local.get $7 + if local.get $6 f64.convert_i32_u local.get $8 @@ -804,9 +806,9 @@ f64.const 0 local.set $16 i32.const 0 - local.set $7 - block $break|1 - loop $continue|1 + local.set $19 + block $while-break|1 + loop $while-continue|1 local.get $15 local.get $15 f64.mul @@ -818,43 +820,44 @@ f64.add f64.const 4 f64.le - i32.eqz - br_if $break|1 - f64.const 2 - local.get $15 - f64.mul - local.get $16 - f64.mul - local.get $9 - f64.add - local.set $16 - local.get $17 - local.get $18 - f64.sub - local.get $14 - f64.add - local.set $15 - local.get $7 - local.get $3 - i32.ge_u + local.set $20 + local.get $20 if - br $break|1 + f64.const 2 + local.get $15 + f64.mul + local.get $16 + f64.mul + local.get $9 + f64.add + local.set $16 + local.get $17 + local.get $18 + f64.sub + local.get $14 + f64.add + local.set $15 + local.get $19 + local.get $3 + i32.ge_u + if + br $while-break|1 + end + local.get $19 + i32.const 1 + i32.add + local.set $19 + br $while-continue|1 end - local.get $7 - i32.const 1 - i32.add - local.set $7 - br $continue|1 end - unreachable end - block $break|2 - loop $continue|2 - local.get $7 - local.get $13 - i32.lt_u - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $19 + local.get $13 + i32.lt_u + local.set $20 + local.get $20 + if local.get $15 local.get $15 f64.mul @@ -864,7 +867,7 @@ f64.sub local.get $14 f64.add - local.set $19 + local.set $21 f64.const 2 local.get $15 f64.mul @@ -873,15 +876,14 @@ local.get $9 f64.add local.set $16 - local.get $19 + local.get $21 local.set $15 - local.get $7 + local.get $19 i32.const 1 i32.add - local.set $7 - br $continue|2 + local.set $19 + br $while-continue|2 end - unreachable end global.get $../../examples/mandelbrot/assembly/index/NUM_COLORS i32.const 1 @@ -894,38 +896,38 @@ local.get $16 f64.mul f64.add - local.set $19 - local.get $19 + local.set $22 + local.get $22 f64.const 1 f64.gt if f64.const 0.5 - local.get $19 + local.get $22 call $~lib/math/NativeMath.log f64.mul call $~lib/math/NativeMath.log2 - local.set $21 + local.set $23 global.get $../../examples/mandelbrot/assembly/index/NUM_COLORS i32.const 1 i32.sub f64.convert_i32_s - local.get $7 + local.get $19 i32.const 1 i32.add f64.convert_i32_u - local.get $21 + local.get $23 f64.sub local.get $12 f64.mul - local.set $24 + local.set $26 f64.const 0 - local.set $23 + local.set $25 f64.const 1 - local.set $22 - local.get $24 - local.get $23 + local.set $24 + local.get $26 + local.get $25 f64.max - local.get $22 + local.get $24 f64.min f64.mul i32.trunc_f64_u @@ -942,9 +944,8 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end ) ) diff --git a/tests/compiler/many-locals.optimized.wat b/tests/compiler/many-locals.optimized.wat index 7e762606d9..68668d9d07 100644 --- a/tests/compiler/many-locals.optimized.wat +++ b/tests/compiler/many-locals.optimized.wat @@ -8,7 +8,7 @@ (export "memory" (memory $0)) (export "testI32" (func $many-locals/testI32)) (export "testI8" (func $many-locals/testI8)) - (start $start) + (start $~start) (func $many-locals/testI32 (; 1 ;) (param $0 i32) (result i32) local.get $0 ) @@ -19,7 +19,7 @@ i32.const 24 i32.shr_s ) - (func $start (; 3 ;) + (func $~start (; 3 ;) i32.const 42 call $many-locals/testI8 i32.const 42 diff --git a/tests/compiler/many-locals.untouched.wat b/tests/compiler/many-locals.untouched.wat index 69bef83c25..78b6c5a1ec 100644 --- a/tests/compiler/many-locals.untouched.wat +++ b/tests/compiler/many-locals.untouched.wat @@ -9,7 +9,7 @@ (export "memory" (memory $0)) (export "testI32" (func $many-locals/testI32)) (export "testI8" (func $many-locals/testI8)) - (start $start) + (start $~start) (func $many-locals/testI32 (; 1 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -816,7 +816,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:many-locals ) ) diff --git a/tests/compiler/memcpy.optimized.wat b/tests/compiler/memcpy.optimized.wat index abcf44d369..8654966590 100644 --- a/tests/compiler/memcpy.optimized.wat +++ b/tests/compiler/memcpy.optimized.wat @@ -8,7 +8,7 @@ (global $memcpy/dest (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "memcpy" (func $memcpy/memcpy)) - (start $start) + (start $~start) (func $memcpy/memcpy (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -16,7 +16,7 @@ (local $6 i32) local.get $0 local.set $6 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 3 i32.and @@ -42,7 +42,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $0 @@ -50,7 +50,7 @@ i32.and i32.eqz if - loop $continue|1 + loop $while-continue|1 local.get $2 i32.const 16 i32.ge_u @@ -95,7 +95,7 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end end local.get $2 @@ -232,7 +232,7 @@ i32.const 3 i32.sub local.set $2 - loop $continue|3 + loop $while-continue|3 local.get $2 i32.const 17 i32.ge_u @@ -307,7 +307,7 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end end br $break|2 @@ -341,7 +341,7 @@ i32.const 2 i32.sub local.set $2 - loop $continue|4 + loop $while-continue|4 local.get $2 i32.const 18 i32.ge_u @@ -416,7 +416,7 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end end br $break|2 @@ -442,7 +442,7 @@ i32.const 1 i32.sub local.set $2 - loop $continue|5 + loop $while-continue|5 local.get $2 i32.const 19 i32.ge_u @@ -517,7 +517,7 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end end end @@ -1037,7 +1037,7 @@ unreachable end ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:memcpy ) ) diff --git a/tests/compiler/memcpy.untouched.wat b/tests/compiler/memcpy.untouched.wat index 0d3a44af3e..40ca6dc658 100644 --- a/tests/compiler/memcpy.untouched.wat +++ b/tests/compiler/memcpy.untouched.wat @@ -10,47 +10,47 @@ (global $memcpy/dest (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "memcpy" (func $memcpy/memcpy)) - (start $start) + (start $~start) (func $memcpy/memcpy (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 4 - i32.rem_u - else - i32.const 0 - end - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 4 + i32.rem_u + else + i32.const 0 + end + local.set $6 + local.get $6 + if local.get $0 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $0 - local.get $6 + local.get $7 local.get $1 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $1 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 4 @@ -58,13 +58,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $6 + local.get $6 + if local.get $0 local.get $1 i32.load @@ -105,9 +105,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -265,13 +264,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $6 + local.get $6 + if local.get $1 i32.const 1 i32.add @@ -346,9 +345,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -387,13 +385,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $6 + local.get $6 + if local.get $1 i32.const 2 i32.add @@ -468,9 +466,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -495,13 +492,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $6 + local.get $6 + if local.get $1 i32.const 3 i32.add @@ -576,9 +573,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -1250,7 +1246,7 @@ unreachable end ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:memcpy ) ) diff --git a/tests/compiler/memmove.optimized.wat b/tests/compiler/memmove.optimized.wat index 0df9ae9ce6..4c976e8548 100644 --- a/tests/compiler/memmove.optimized.wat +++ b/tests/compiler/memmove.optimized.wat @@ -7,7 +7,7 @@ (data (i32.const 16) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00m\00e\00m\00m\00o\00v\00e\00.\00t\00s") (global $memmove/dest (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $memmove/memmove (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -33,40 +33,39 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and if local.get $2 + i32.eqz if - local.get $2 - i32.const 1 - i32.sub - local.set $2 - local.get $0 - local.tee $4 - i32.const 1 - i32.add - local.set $0 - local.get $1 - local.tee $5 - i32.const 1 - i32.add - local.set $1 - local.get $4 - local.get $5 - i32.load8_u - i32.store8 - br $continue|0 - else local.get $3 return end - unreachable + local.get $2 + i32.const 1 + i32.sub + local.set $2 + local.get $0 + local.tee $4 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $4 + local.get $5 + i32.load8_u + i32.store8 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $2 i32.const 8 i32.ge_u @@ -87,11 +86,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $2 if local.get $0 @@ -112,7 +111,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|2 + br $while-continue|2 end end else @@ -124,7 +123,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $2 i32.add @@ -132,27 +131,26 @@ i32.and if local.get $2 + i32.eqz if - local.get $0 - local.get $2 - i32.const 1 - i32.sub - local.tee $2 - i32.add - local.get $1 - local.get $2 - i32.add - i32.load8_u - i32.store8 - br $continue|3 - else local.get $3 return end - unreachable + local.get $0 + local.get $2 + i32.const 1 + i32.sub + local.tee $2 + i32.add + local.get $1 + local.get $2 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $2 i32.const 8 i32.ge_u @@ -168,11 +166,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $2 if local.get $0 @@ -186,7 +184,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -368,7 +366,7 @@ unreachable end ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:memmove ) ) diff --git a/tests/compiler/memmove.untouched.wat b/tests/compiler/memmove.untouched.wat index 25fd51328c..1738cfbbf8 100644 --- a/tests/compiler/memmove.untouched.wat +++ b/tests/compiler/memmove.untouched.wat @@ -9,10 +9,11 @@ (global $memmove/base i32 (i32.const 8)) (global $memmove/dest (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $memmove/memmove (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 local.set $3 local.get $0 @@ -34,13 +35,13 @@ i32.rem_u i32.eq if - block $break|0 - loop $continue|0 - local.get $0 - i32.const 8 - i32.rem_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $0 + i32.const 8 + i32.rem_u + local.set $4 + local.get $4 + if local.get $2 i32.eqz if @@ -52,30 +53,29 @@ i32.sub local.set $2 local.get $0 - local.tee $4 + local.tee $5 i32.const 1 i32.add local.set $0 - local.get $4 + local.get $5 local.get $1 - local.tee $4 + local.tee $5 i32.const 1 i32.add local.set $1 - local.get $4 + local.get $5 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $2 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 8 + i32.ge_u + local.set $4 + local.get $4 + if local.get $0 local.get $1 i64.load @@ -92,37 +92,35 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $2 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $2 + local.set $4 + local.get $4 + if local.get $0 - local.tee $4 + local.tee $5 i32.const 1 i32.add local.set $0 - local.get $4 + local.get $5 local.get $1 - local.tee $4 + local.tee $5 i32.const 1 i32.add local.set $1 - local.get $4 + local.get $5 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $1 @@ -133,15 +131,15 @@ i32.rem_u i32.eq if - block $break|3 - loop $continue|3 - local.get $0 - local.get $2 - i32.add - i32.const 8 - i32.rem_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $0 + local.get $2 + i32.add + i32.const 8 + i32.rem_u + local.set $4 + local.get $4 + if local.get $2 i32.eqz if @@ -159,17 +157,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $2 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 8 + i32.ge_u + local.set $4 + local.get $4 + if local.get $2 i32.const 8 i32.sub @@ -182,16 +179,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $2 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + local.set $4 + local.get $4 + if local.get $0 local.get $2 i32.const 1 @@ -203,9 +199,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end local.get $3 @@ -416,7 +411,7 @@ unreachable end ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:memmove ) ) diff --git a/tests/compiler/memset.optimized.wat b/tests/compiler/memset.optimized.wat index 8aa36accf1..67fd3a804c 100644 --- a/tests/compiler/memset.optimized.wat +++ b/tests/compiler/memset.optimized.wat @@ -7,7 +7,7 @@ (data (i32.const 16) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00m\00e\00m\00s\00e\00t\00.\00t\00s") (global $memset/dest (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $memset/memset (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i64) @@ -197,7 +197,7 @@ i64.shl i64.or local.set $4 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 32 i32.ge_u @@ -228,7 +228,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -327,7 +327,7 @@ unreachable end ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:memset ) ) diff --git a/tests/compiler/memset.untouched.wat b/tests/compiler/memset.untouched.wat index 7e0a4e0564..bf103e9636 100644 --- a/tests/compiler/memset.untouched.wat +++ b/tests/compiler/memset.untouched.wat @@ -9,12 +9,13 @@ (global $memset/dest (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 52)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $memset/memset (; 1 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i64) + (local $7 i32) local.get $0 local.set $3 local.get $2 @@ -234,13 +235,13 @@ i64.shl i64.or local.set $6 - block $break|0 - loop $continue|0 - local.get $2 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + i32.const 32 + i32.ge_u + local.set $7 + local.get $7 + if local.get $0 local.get $6 i64.store @@ -267,9 +268,8 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $3 ) @@ -375,7 +375,7 @@ unreachable end ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:memset ) ) diff --git a/tests/compiler/merge.untouched.wat b/tests/compiler/merge.untouched.wat index 3ce529bf28..62fc213cfd 100644 --- a/tests/compiler/merge.untouched.wat +++ b/tests/compiler/merge.untouched.wat @@ -13,7 +13,7 @@ (global $merge/enumNamespace.val i32 (i32.const 1)) (global $merge/namespaceEnum.val i32 (i32.const 2)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $merge/namespaceType.test (; 0 ;) nop ) @@ -88,7 +88,7 @@ call $merge/namespaceNamespace.test1 call $merge/namespaceNamespace.test2 ) - (func $start (; 17 ;) + (func $~start (; 17 ;) call $start:merge ) ) diff --git a/tests/compiler/namespace.optimized.wat b/tests/compiler/namespace.optimized.wat index 1a28a1cf72..7e36af471c 100644 --- a/tests/compiler/namespace.optimized.wat +++ b/tests/compiler/namespace.optimized.wat @@ -4,8 +4,8 @@ (global $namespace/Outer.Inner.anotherVar (mut i32) (i32.const 0)) (global $namespace/Outer.Inner.evenAnotherVar (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) - (func $start (; 0 ;) + (start $~start) + (func $~start (; 0 ;) i32.const 0 global.set $namespace/Outer.Inner.anotherVar i32.const 1 diff --git a/tests/compiler/namespace.untouched.wat b/tests/compiler/namespace.untouched.wat index 013f8d1b96..7c0b368b02 100644 --- a/tests/compiler/namespace.untouched.wat +++ b/tests/compiler/namespace.untouched.wat @@ -10,7 +10,7 @@ (global $namespace/Outer.Inner.anEnum.ONE i32 (i32.const 1)) (global $namespace/Outer.Inner.anEnum.TWO i32 (i32.const 2)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $namespace/Outer.Inner.aFunc (; 0 ;) (result i32) global.get $namespace/Outer.Inner.aVar ) @@ -33,7 +33,7 @@ call $namespace/Joined.anotherFunc drop ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:namespace ) ) diff --git a/tests/compiler/new.optimized.wat b/tests/compiler/new.optimized.wat index 0dcfcc3eff..839e931fa0 100644 --- a/tests/compiler/new.optimized.wat +++ b/tests/compiler/new.optimized.wat @@ -9,7 +9,7 @@ (global $new/gen (mut i32) (i32.const 0)) (global $new/ref2 (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -109,7 +109,7 @@ call $~lib/rt/stub/__alloc global.set $new/ref2 ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:new ) ) diff --git a/tests/compiler/new.untouched.wat b/tests/compiler/new.untouched.wat index b46e25b86c..009f840031 100644 --- a/tests/compiler/new.untouched.wat +++ b/tests/compiler/new.untouched.wat @@ -12,7 +12,7 @@ (global $new/ref2 (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 8)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -295,7 +295,7 @@ local.get $5 call $~lib/rt/stub/__release ) - (func $start (; 11 ;) + (func $~start (; 11 ;) call $start:new ) ) diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index 460dcdfeff..5eec6711a2 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -44,7 +44,7 @@ (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/util/number/decimalCount32 (; 1 ;) (param $0 i32) (result i32) i32.const 1 i32.const 2 @@ -182,7 +182,7 @@ ) (func $~lib/util/number/utoa_simple (; 4 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -201,7 +201,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa32 (; 5 ;) (param $0 i32) (result i32) @@ -269,7 +269,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -290,20 +290,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -316,18 +314,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -405,7 +401,7 @@ i32.const 1332 i32.load local.set $12 - loop $continue|0 + loop $while-continue|0 local.get $4 i32.const 0 i32.gt_s @@ -563,80 +559,82 @@ i64.add local.tee $1 local.get $5 - i64.gt_u - br_if $continue|0 - local.get $4 - global.get $~lib/util/number/_K - i32.add - global.set $~lib/util/number/_K - local.get $12 - local.get $4 - i32.const 2 - i32.shl - i32.add - i64.load32_u - local.get $10 - i64.extend_i32_s - i64.shl - local.set $3 - local.get $0 - local.get $2 - i32.const 1 - i32.sub - i32.const 1 - i32.shl - i32.add - local.tee $0 - i32.load16_u - local.set $4 - loop $continue|2 + i64.le_u + if + local.get $4 + global.get $~lib/util/number/_K + i32.add + global.set $~lib/util/number/_K + local.get $12 + local.get $4 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.get $10 + i64.extend_i32_s + i64.shl + local.set $3 + local.get $0 + local.get $2 i32.const 1 - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.tee $8 - local.get $9 - i64.sub - i64.gt_u - local.get $8 - local.get $9 - i64.lt_u - select - i32.const 0 - local.get $5 - local.get $1 - i64.sub - local.get $3 - i64.ge_u - i32.const 0 - local.get $1 - local.get $9 - i64.lt_u - select - select - if - local.get $4 + i32.sub + i32.const 1 + i32.shl + i32.add + local.tee $0 + i32.load16_u + local.set $4 + loop $while-continue|3 i32.const 1 - i32.sub - local.set $4 + local.get $9 + local.get $1 + i64.sub local.get $1 local.get $3 i64.add - local.set $1 - br $continue|2 + local.tee $8 + local.get $9 + i64.sub + i64.gt_u + local.get $8 + local.get $9 + i64.lt_u + select + i32.const 0 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 + local.get $1 + local.get $9 + i64.lt_u + select + select + if + local.get $4 + i32.const 1 + i32.sub + local.set $4 + local.get $1 + local.get $3 + i64.add + local.set $1 + br $while-continue|3 + end end + local.get $0 + local.get $4 + i32.store16 + local.get $2 + return end - local.get $0 - local.get $4 - i32.store16 - local.get $2 - return + br $while-continue|0 end end - loop $continue|3 + loop $while-continue|4 local.get $5 i64.const 10 i64.mul @@ -683,7 +681,7 @@ local.tee $8 local.get $5 i64.ge_u - br_if $continue|3 + br_if $while-continue|4 end local.get $4 global.get $~lib/util/number/_K @@ -712,7 +710,7 @@ local.tee $0 i32.load16_u local.set $4 - loop $continue|4 + loop $while-continue|6 i32.const 1 local.get $3 local.get $1 @@ -749,7 +747,7 @@ local.get $11 i64.add local.set $1 - br $continue|4 + br $while-continue|6 end end local.get $0 @@ -779,7 +777,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -805,10 +803,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -829,11 +827,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -854,7 +852,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -866,7 +864,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -887,10 +885,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -906,11 +904,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -924,7 +922,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -961,7 +959,7 @@ i32.const 0 end if (result i32) - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s @@ -977,7 +975,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -1049,7 +1047,7 @@ i32.store i32.const 2 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 local.get $3 i32.lt_s @@ -1065,7 +1063,7 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 @@ -1082,34 +1080,34 @@ local.get $0 i32.const 4 i32.add - local.tee $0 + local.tee $1 local.get $3 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if i32.const 0 - local.get $2 + local.get $0 i32.sub - local.set $2 + local.set $0 end - local.get $2 - local.get $2 + local.get $0 + local.get $0 call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_simple - local.get $0 + local.get $1 i32.const 45 i32.const 43 - local.get $1 + local.get $2 select i32.store16 - local.get $2 + local.get $0 i32.const 2 i32.add else @@ -2114,7 +2112,7 @@ unreachable end ) - (func $start (; 22 ;) + (func $~start (; 22 ;) call $start:number ) ) diff --git a/tests/compiler/number.untouched.wat b/tests/compiler/number.untouched.wat index a694032add..41ed83255b 100644 --- a/tests/compiler/number.untouched.wat +++ b/tests/compiler/number.untouched.wat @@ -60,7 +60,7 @@ (global $~lib/builtins/f64.EPSILON f64 (f64.const 2.220446049250313e-16)) (global $~lib/heap/__heap_base i32 (i32.const 2076)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/util/number/decimalCount32 (; 1 ;) (param $0 i32) (result i32) (local $1 i32) local.get $0 @@ -240,50 +240,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 480 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -293,15 +296,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -310,30 +312,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -350,13 +352,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -366,13 +368,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -459,6 +461,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -493,15 +496,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -518,39 +521,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -561,17 +566,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 12 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -677,14 +681,17 @@ (local $16 i32) (local $17 i32) (local $18 i32) - (local $19 i64) + (local $19 i32) (local $20 i64) (local $21 i64) (local $22 i64) (local $23 i64) - (local $24 i32) + (local $24 i64) (local $25 i32) (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i64) i32.const 0 local.get $4 i32.sub @@ -722,13 +729,13 @@ i32.const 1776 i32.load offset=4 local.set $16 - block $break|0 - loop $continue|0 - local.get $14 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $14 + i32.const 0 + i32.gt_s + local.set $17 + local.get $17 + if block $break|1 block $case10|1 block $case9|1 @@ -742,44 +749,44 @@ block $case1|1 block $case0|1 local.get $14 - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 10 i32.eq br_if $case0|1 - local.get $18 + local.get $19 i32.const 9 i32.eq br_if $case1|1 - local.get $18 + local.get $19 i32.const 8 i32.eq br_if $case2|1 - local.get $18 + local.get $19 i32.const 7 i32.eq br_if $case3|1 - local.get $18 + local.get $19 i32.const 6 i32.eq br_if $case4|1 - local.get $18 + local.get $19 i32.const 5 i32.eq br_if $case5|1 - local.get $18 + local.get $19 i32.const 4 i32.eq br_if $case6|1 - local.get $18 + local.get $19 i32.const 3 i32.eq br_if $case7|1 - local.get $18 + local.get $19 i32.const 2 i32.eq br_if $case8|1 - local.get $18 + local.get $19 i32.const 1 i32.eq br_if $case9|1 @@ -788,7 +795,7 @@ local.get $12 i32.const 1000000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000000 i32.rem_u @@ -798,7 +805,7 @@ local.get $12 i32.const 100000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000000 i32.rem_u @@ -808,7 +815,7 @@ local.get $12 i32.const 10000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000000 i32.rem_u @@ -818,7 +825,7 @@ local.get $12 i32.const 1000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000 i32.rem_u @@ -828,7 +835,7 @@ local.get $12 i32.const 100000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000 i32.rem_u @@ -838,7 +845,7 @@ local.get $12 i32.const 10000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000 i32.rem_u @@ -848,7 +855,7 @@ local.get $12 i32.const 1000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000 i32.rem_u @@ -858,7 +865,7 @@ local.get $12 i32.const 100 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100 i32.rem_u @@ -868,7 +875,7 @@ local.get $12 i32.const 10 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10 i32.rem_u @@ -876,31 +883,31 @@ br $break|1 end local.get $12 - local.set $17 + local.set $18 i32.const 0 local.set $12 br $break|1 end i32.const 0 - local.set $17 + local.set $18 br $break|1 end - local.get $17 + local.get $18 local.get $15 i32.or if local.get $0 local.get $15 - local.tee $18 + local.tee $19 i32.const 1 i32.add local.set $15 - local.get $18 + local.get $19 i32.const 1 i32.shl i32.add i32.const 48 - local.get $17 + local.get $18 i32.const 65535 i32.and i32.add @@ -917,8 +924,8 @@ i64.shl local.get $13 i64.add - local.set $19 - local.get $19 + local.set $20 + local.get $20 local.get $5 i64.le_u if @@ -927,13 +934,13 @@ i32.add global.set $~lib/util/number/_K local.get $0 - local.set $24 + local.set $25 local.get $15 - local.set $18 + local.set $19 local.get $5 + local.set $24 + local.get $20 local.set $23 - local.get $19 - local.set $22 local.get $16 local.get $14 i32.const 2 @@ -943,266 +950,268 @@ local.get $7 i64.extend_i32_s i64.shl - local.set $21 + local.set $22 local.get $10 - local.set $20 - local.get $24 - local.get $18 + local.set $21 + local.get $25 + local.get $19 i32.const 1 i32.sub i32.const 1 i32.shl i32.add - local.set $25 - local.get $25 - i32.load16_u local.set $26 - block $break|2 - loop $continue|2 + local.get $26 + i32.load16_u + local.set $27 + loop $while-continue|3 + local.get $23 + local.get $21 + i64.lt_u + if (result i32) + local.get $24 + local.get $23 + i64.sub local.get $22 - local.get $20 + i64.ge_u + else + i32.const 0 + end + if (result i32) + local.get $23 + local.get $22 + i64.add + local.get $21 i64.lt_u if (result i32) + i32.const 1 + else + local.get $21 local.get $23 - local.get $22 i64.sub - local.get $21 - i64.ge_u - else - i32.const 0 - end - if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 - i64.lt_u - if (result i32) - i32.const 1 - else - local.get $20 - local.get $22 - i64.sub - local.get $22 - local.get $21 - i64.add - local.get $20 - i64.sub - i64.gt_u - end - else - i32.const 0 + local.get $21 + i64.sub + i64.gt_u end - i32.eqz - br_if $break|2 - local.get $26 + else + i32.const 0 + end + local.set $28 + local.get $28 + if + local.get $27 i32.const 1 i32.sub - local.set $26 + local.set $27 + local.get $23 local.get $22 - local.get $21 i64.add - local.set $22 - br $continue|2 + local.set $23 + br $while-continue|3 end - unreachable end - local.get $25 local.get $26 + local.get $27 i32.store16 local.get $15 return end - br $continue|0 + br $while-continue|0 end - unreachable end - loop $continue|3 - local.get $13 - i64.const 10 - i64.mul - local.set $13 - local.get $5 - i64.const 10 - i64.mul - local.set $5 - local.get $13 - local.get $7 - i64.extend_i32_s - i64.shr_u - local.set $19 - local.get $19 - local.get $15 - i64.extend_i32_s - i64.or - i64.const 0 - i64.ne - if - local.get $0 - local.get $15 - local.tee $17 - i32.const 1 - i32.add - local.set $15 - local.get $17 - i32.const 1 - i32.shl - i32.add - i32.const 48 - local.get $19 - i32.wrap_i64 - i32.const 65535 - i32.and - i32.add - i32.store16 - end - local.get $13 - local.get $9 - i64.and - local.set $13 - local.get $14 + loop $while-continue|4 i32.const 1 - i32.sub - local.set $14 - local.get $13 - local.get $5 - i64.lt_u + local.set $17 + local.get $17 if - global.get $~lib/util/number/_K - local.get $14 - i32.add - global.set $~lib/util/number/_K - local.get $10 - local.get $16 - i32.const 0 - local.get $14 - i32.sub - i32.const 2 - i32.shl - i32.add - i64.load32_u + local.get $13 + i64.const 10 i64.mul - local.set $10 - local.get $0 - local.set $24 - local.get $15 - local.set $18 + local.set $13 local.get $5 - local.set $23 + i64.const 10 + i64.mul + local.set $5 local.get $13 - local.set $22 - local.get $8 - local.set $21 - local.get $10 - local.set $20 + local.get $7 + i64.extend_i32_s + i64.shr_u + local.set $24 local.get $24 - local.get $18 + local.get $15 + i64.extend_i32_s + i64.or + i64.const 0 + i64.ne + if + local.get $0 + local.get $15 + local.tee $27 + i32.const 1 + i32.add + local.set $15 + local.get $27 + i32.const 1 + i32.shl + i32.add + i32.const 48 + local.get $24 + i32.wrap_i64 + i32.const 65535 + i32.and + i32.add + i32.store16 + end + local.get $13 + local.get $9 + i64.and + local.set $13 + local.get $14 i32.const 1 i32.sub - i32.const 1 - i32.shl - i32.add - local.set $17 - local.get $17 - i32.load16_u - local.set $26 - block $break|4 - loop $continue|4 - local.get $22 - local.get $20 + local.set $14 + local.get $13 + local.get $5 + i64.lt_u + if + global.get $~lib/util/number/_K + local.get $14 + i32.add + global.set $~lib/util/number/_K + local.get $10 + local.get $16 + i32.const 0 + local.get $14 + i32.sub + i32.const 2 + i32.shl + i32.add + i64.load32_u + i64.mul + local.set $10 + local.get $0 + local.set $19 + local.get $15 + local.set $28 + local.get $5 + local.set $29 + local.get $13 + local.set $23 + local.get $8 + local.set $22 + local.get $10 + local.set $21 + local.get $19 + local.get $28 + i32.const 1 + i32.sub + i32.const 1 + i32.shl + i32.add + local.set $27 + local.get $27 + i32.load16_u + local.set $26 + loop $while-continue|6 + local.get $23 + local.get $21 i64.lt_u if (result i32) + local.get $29 local.get $23 - local.get $22 i64.sub - local.get $21 + local.get $22 i64.ge_u else i32.const 0 end if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.lt_u if (result i32) i32.const 1 else - local.get $20 - local.get $22 + local.get $21 + local.get $23 i64.sub + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.sub i64.gt_u end else i32.const 0 end - i32.eqz - br_if $break|4 - local.get $26 - i32.const 1 - i32.sub - local.set $26 - local.get $22 - local.get $21 - i64.add - local.set $22 - br $continue|4 + local.set $25 + local.get $25 + if + local.get $26 + i32.const 1 + i32.sub + local.set $26 + local.get $23 + local.get $22 + i64.add + local.set $23 + br $while-continue|6 + end end - unreachable + local.get $27 + local.get $26 + i32.store16 + local.get $15 + return end - local.get $17 - local.get $26 - i32.store16 - local.get $15 - return + br $while-continue|4 end - br $continue|3 end - unreachable + local.get $15 ) (func $~lib/util/memory/memcpy (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1210,13 +1219,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1257,9 +1266,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -1416,13 +1424,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -1497,9 +1505,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -1538,13 +1545,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -1619,9 +1626,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -1646,13 +1652,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -1727,9 +1733,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2199,6 +2204,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2245,13 +2251,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2262,30 +2268,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2302,37 +2307,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2343,15 +2346,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2368,17 +2371,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -2391,16 +2393,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -2412,9 +2413,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -2463,15 +2463,15 @@ i32.const 0 end if - block $break|0 - local.get $1 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + local.get $1 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -2483,9 +2483,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -2574,15 +2573,15 @@ i32.shl i32.or i32.store - block $break|1 - i32.const 2 - local.set $5 - loop $loop|1 - local.get $5 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 2 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $4 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 i32.const 1 @@ -2594,9 +2593,8 @@ i32.const 1 i32.add local.set $5 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $1 local.get $4 @@ -2613,30 +2611,30 @@ local.get $0 i32.const 4 i32.add - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - local.get $5 - i32.const 0 - i32.lt_s local.set $6 local.get $6 + i32.const 0 + i32.lt_s + local.set $4 + local.get $4 if i32.const 0 - local.get $5 + local.get $6 i32.sub - local.set $5 + local.set $6 end - local.get $5 + local.get $6 call $~lib/util/number/decimalCount32 i32.const 1 i32.add local.set $7 - local.get $4 - local.set $10 local.get $5 + local.set $10 + local.get $6 local.set $9 local.get $7 local.set $8 @@ -2644,10 +2642,10 @@ local.get $9 local.get $8 call $~lib/util/number/utoa32_lut - local.get $4 + local.get $5 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 local.get $7 @@ -2693,8 +2691,8 @@ local.get $8 i32.const 0 i32.lt_s - local.set $6 - local.get $6 + local.set $4 + local.get $4 if i32.const 0 local.get $8 @@ -2705,24 +2703,24 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.set $4 + local.set $5 local.get $9 local.set $11 local.get $8 - local.set $5 - local.get $4 + local.set $6 + local.get $5 local.set $10 local.get $11 - local.get $5 + local.get $6 local.get $10 call $~lib/util/number/utoa32_lut local.get $9 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 - local.get $4 + local.get $5 i32.add local.set $1 local.get $1 @@ -4214,7 +4212,7 @@ local.get $10 call $~lib/rt/stub/__release ) - (func $start (; 30 ;) + (func $~start (; 30 ;) call $start:number ) ) diff --git a/tests/compiler/optional-typeparameters.optimized.wat b/tests/compiler/optional-typeparameters.optimized.wat index 9f39211a54..e5a0edcd04 100644 --- a/tests/compiler/optional-typeparameters.optimized.wat +++ b/tests/compiler/optional-typeparameters.optimized.wat @@ -8,7 +8,7 @@ (global $optional-typeparameters/tConcrete (mut i32) (i32.const 0)) (global $optional-typeparameters/tDerived (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -78,7 +78,7 @@ i32.store offset=12 local.get $2 ) - (func $start (; 2 ;) + (func $~start (; 2 ;) i32.const 16 global.set $~lib/rt/stub/startOffset i32.const 16 diff --git a/tests/compiler/optional-typeparameters.untouched.wat b/tests/compiler/optional-typeparameters.untouched.wat index 6017482a21..ab290f955a 100644 --- a/tests/compiler/optional-typeparameters.untouched.wat +++ b/tests/compiler/optional-typeparameters.untouched.wat @@ -13,7 +13,7 @@ (global $optional-typeparameters/tDerived (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 8)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $optional-typeparameters/testConcrete (; 0 ;) (param $0 i32) (result i32) local.get $0 ) @@ -198,7 +198,7 @@ call $optional-typeparameters/TestDerived#test drop ) - (func $start (; 10 ;) + (func $~start (; 10 ;) call $start:optional-typeparameters ) ) diff --git a/tests/compiler/overflow.untouched.wat b/tests/compiler/overflow.untouched.wat index 3dd5bc1bce..cf4e334191 100644 --- a/tests/compiler/overflow.untouched.wat +++ b/tests/compiler/overflow.untouched.wat @@ -6,7 +6,7 @@ (data (i32.const 16) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00o\00v\00e\00r\00f\00l\00o\00w\00.\00t\00s\00") (table $0 1 funcref) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:overflow (; 1 ;) (local $0 i32) (local $1 i32) @@ -728,7 +728,7 @@ unreachable end ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:overflow ) ) diff --git a/tests/compiler/portable-conversions.untouched.wat b/tests/compiler/portable-conversions.untouched.wat index fe4d48e987..08839798c6 100644 --- a/tests/compiler/portable-conversions.untouched.wat +++ b/tests/compiler/portable-conversions.untouched.wat @@ -10,7 +10,7 @@ (global $portable-conversions/f (mut f32) (f32.const 1)) (global $portable-conversions/F (mut f64) (f64.const 1)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:portable-conversions (; 1 ;) global.get $portable-conversions/i i32.const 24 @@ -633,7 +633,7 @@ unreachable end ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:portable-conversions ) ) diff --git a/tests/compiler/possibly-null.optimized.wat b/tests/compiler/possibly-null.optimized.wat index 175e2d2029..ad9f89271f 100644 --- a/tests/compiler/possibly-null.optimized.wat +++ b/tests/compiler/possibly-null.optimized.wat @@ -25,27 +25,27 @@ nop ) (func $possibly-null/testWhile (; 1 ;) (param $0 i32) - loop $continue|0 + loop $while-continue|0 local.get $0 if i32.const 0 local.set $0 - br $continue|0 + br $while-continue|0 end end ) (func $possibly-null/testWhile2 (; 2 ;) (param $0 i32) (param $1 i32) - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $1 local.set $0 - br $continue|0 + br $while-continue|0 end end ) (func $possibly-null/testWhile3 (; 3 ;) (param $0 i32) (param $1 i32) - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $1 @@ -53,7 +53,7 @@ local.get $1 local.set $0 end - br $continue|0 + br $while-continue|0 end end ) diff --git a/tests/compiler/possibly-null.untouched.wat b/tests/compiler/possibly-null.untouched.wat index 15951d41b2..8baf27bd9c 100644 --- a/tests/compiler/possibly-null.untouched.wat +++ b/tests/compiler/possibly-null.untouched.wat @@ -166,31 +166,31 @@ (func $possibly-null/testWhile (; 11 ;) (param $0 i32) (local $1 i32) (local $2 i32) + (local $3 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 - block $break|0 - loop $continue|0 - local.get $0 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $0 + local.set $1 + local.get $1 + if i32.const 0 - local.tee $1 - local.get $0 local.tee $2 + local.get $0 + local.tee $3 i32.ne if - local.get $1 - call $~lib/rt/stub/__retain - local.set $1 local.get $2 + call $~lib/rt/stub/__retain + local.set $2 + local.get $3 call $~lib/rt/stub/__release end - local.get $1 + local.get $2 local.set $0 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 call $~lib/rt/stub/__release @@ -198,34 +198,34 @@ (func $possibly-null/testWhile2 (; 12 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 local.get $1 call $~lib/rt/stub/__retain local.set $1 - block $break|0 - loop $continue|0 - local.get $0 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $0 + local.set $2 + local.get $2 + if local.get $1 - local.tee $2 - local.get $0 local.tee $3 + local.get $0 + local.tee $4 i32.ne if - local.get $2 - call $~lib/rt/stub/__retain - local.set $2 local.get $3 + call $~lib/rt/stub/__retain + local.set $3 + local.get $4 call $~lib/rt/stub/__release end - local.get $2 + local.get $3 local.set $0 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 call $~lib/rt/stub/__release @@ -235,37 +235,37 @@ (func $possibly-null/testWhile3 (; 13 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 local.get $1 call $~lib/rt/stub/__retain local.set $1 - block $break|0 - loop $continue|0 - local.get $0 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $0 + local.set $2 + local.get $2 + if local.get $1 if local.get $1 - local.tee $2 - local.get $0 local.tee $3 + local.get $0 + local.tee $4 i32.ne if - local.get $2 - call $~lib/rt/stub/__retain - local.set $2 local.get $3 + call $~lib/rt/stub/__retain + local.set $3 + local.get $4 call $~lib/rt/stub/__release end - local.get $2 + local.get $3 local.set $0 end - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 call $~lib/rt/stub/__release diff --git a/tests/compiler/rc/global-init.optimized.wat b/tests/compiler/rc/global-init.optimized.wat index 832a775cee..0bb872de62 100644 --- a/tests/compiler/rc/global-init.optimized.wat +++ b/tests/compiler/rc/global-init.optimized.wat @@ -11,7 +11,7 @@ (global $rc/global-init/a (mut i32) (i32.const 0)) (global $rc/global-init/b (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:rc/global-init (; 0 ;) i32.const 32 global.set $rc/global-init/a @@ -22,7 +22,7 @@ i32.const 0 global.set $rc/global-init/b ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:rc/global-init ) ) diff --git a/tests/compiler/rc/global-init.untouched.wat b/tests/compiler/rc/global-init.untouched.wat index b61fa1838a..e633ed7976 100644 --- a/tests/compiler/rc/global-init.untouched.wat +++ b/tests/compiler/rc/global-init.untouched.wat @@ -34,7 +34,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 304)) (global $~lib/heap/__heap_base i32 (i32.const 332)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $rc/global-init/getRef (; 5 ;) (result i32) i32.const 32 ) @@ -868,6 +868,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -921,71 +923,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1345,34 +1345,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1381,23 +1382,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1406,11 +1407,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1422,21 +1423,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1444,39 +1444,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1785,39 +1783,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1825,13 +1823,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1872,9 +1870,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2031,13 +2028,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2112,9 +2109,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2153,13 +2149,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2234,9 +2230,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2261,13 +2256,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2342,9 +2337,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2814,6 +2808,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2860,13 +2855,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2877,30 +2872,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2917,37 +2911,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2958,15 +2950,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2983,17 +2975,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3006,16 +2997,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3027,9 +3017,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3290,7 +3279,7 @@ local.get $1 global.set $rc/global-init/b ) - (func $start (; 33 ;) + (func $~start (; 33 ;) call $start:rc/global-init ) (func $~lib/rt/pure/__visit (; 34 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 02d7c92dab..5fdd6c1451 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -26,7 +26,7 @@ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -668,7 +668,7 @@ i32.const 1920 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -682,7 +682,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -702,14 +702,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 352 @@ -995,7 +995,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1054,14 +1054,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1073,12 +1073,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1097,7 +1097,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1354,7 +1354,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1380,10 +1380,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1404,11 +1404,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1429,7 +1429,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1441,7 +1441,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1462,10 +1462,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1481,11 +1481,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1499,7 +1499,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1751,7 +1751,7 @@ call $~lib/rt/pure/decrement end ) - (func $start (; 29 ;) + (func $~start (; 29 ;) call $start:rc/local-init ) (func $~lib/rt/pure/__visit (; 30 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/local-init.untouched.wat b/tests/compiler/rc/local-init.untouched.wat index a56e08702a..665e5d02e7 100644 --- a/tests/compiler/rc/local-init.untouched.wat +++ b/tests/compiler/rc/local-init.untouched.wat @@ -32,7 +32,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 304)) (global $~lib/heap/__heap_base i32 (i32.const 340)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -806,6 +806,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -859,71 +861,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1283,34 +1283,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1319,23 +1320,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1344,11 +1345,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1360,21 +1361,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1382,39 +1382,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1723,39 +1721,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1763,13 +1761,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1810,9 +1808,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -1969,13 +1966,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2050,9 +2047,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2091,13 +2087,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2172,9 +2168,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2199,13 +2194,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2280,9 +2275,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2752,6 +2746,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2798,13 +2793,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2815,30 +2810,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2855,37 +2849,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2896,15 +2888,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2921,17 +2913,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -2944,16 +2935,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -2965,9 +2955,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3280,7 +3269,7 @@ local.get $0 call $~lib/rt/pure/__release ) - (func $start (; 34 ;) + (func $~start (; 34 ;) call $start:rc/local-init ) (func $~lib/rt/pure/__visit (; 35 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index ac51130916..028e2b64d8 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -26,7 +26,7 @@ (global $rc/logical-and-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -622,7 +622,7 @@ i32.const 1904 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -636,7 +636,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -656,14 +656,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 336 @@ -975,7 +975,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1034,14 +1034,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1053,12 +1053,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1077,7 +1077,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1413,7 +1413,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1439,10 +1439,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1463,11 +1463,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1488,7 +1488,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1500,7 +1500,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1521,10 +1521,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1540,11 +1540,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1558,7 +1558,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1793,7 +1793,7 @@ global.get $rc/logical-and-mismatch/gloRef call $~lib/rt/pure/__release ) - (func $start (; 32 ;) + (func $~start (; 32 ;) call $start:rc/logical-and-mismatch ) (func $~lib/rt/pure/__visit (; 33 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/logical-and-mismatch.untouched.wat b/tests/compiler/rc/logical-and-mismatch.untouched.wat index e60d9514ec..8298354b0c 100644 --- a/tests/compiler/rc/logical-and-mismatch.untouched.wat +++ b/tests/compiler/rc/logical-and-mismatch.untouched.wat @@ -32,7 +32,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 288)) (global $~lib/heap/__heap_base i32 (i32.const 324)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -752,6 +752,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -805,71 +807,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1258,34 +1258,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1294,23 +1295,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1319,11 +1320,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1335,21 +1336,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1357,39 +1357,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1796,39 +1794,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1836,13 +1834,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1883,9 +1881,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2042,13 +2039,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2123,9 +2120,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2164,13 +2160,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2245,9 +2241,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2272,13 +2267,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2353,9 +2348,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2825,6 +2819,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2871,13 +2866,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2888,30 +2883,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2928,37 +2922,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2969,15 +2961,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2994,17 +2986,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3017,16 +3008,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3038,9 +3028,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3320,7 +3309,7 @@ global.get $rc/logical-and-mismatch/gloRef call $~lib/rt/pure/__release ) - (func $start (; 34 ;) + (func $~start (; 34 ;) call $start:rc/logical-and-mismatch ) (func $~lib/rt/pure/__visit (; 35 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 95ff6e137d..f1ba740510 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -26,7 +26,7 @@ (global $rc/logical-or-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -622,7 +622,7 @@ i32.const 1904 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -636,7 +636,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -656,14 +656,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 336 @@ -975,7 +975,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1034,14 +1034,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1053,12 +1053,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1077,7 +1077,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1413,7 +1413,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1439,10 +1439,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1463,11 +1463,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1488,7 +1488,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1500,7 +1500,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1521,10 +1521,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1540,11 +1540,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1558,7 +1558,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1793,7 +1793,7 @@ global.get $rc/logical-or-mismatch/gloRef call $~lib/rt/pure/__release ) - (func $start (; 32 ;) + (func $~start (; 32 ;) call $start:rc/logical-or-mismatch ) (func $~lib/rt/pure/__visit (; 33 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/logical-or-mismatch.untouched.wat b/tests/compiler/rc/logical-or-mismatch.untouched.wat index b572f07574..56b270725e 100644 --- a/tests/compiler/rc/logical-or-mismatch.untouched.wat +++ b/tests/compiler/rc/logical-or-mismatch.untouched.wat @@ -32,7 +32,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 288)) (global $~lib/heap/__heap_base i32 (i32.const 324)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -752,6 +752,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -805,71 +807,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1258,34 +1258,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1294,23 +1295,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1319,11 +1320,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1335,21 +1336,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1357,39 +1357,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1796,39 +1794,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1836,13 +1834,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1883,9 +1881,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2042,13 +2039,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2123,9 +2120,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2164,13 +2160,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2245,9 +2241,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2272,13 +2267,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2353,9 +2348,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2825,6 +2819,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2871,13 +2866,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2888,30 +2883,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2928,37 +2922,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2969,15 +2961,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2994,17 +2986,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3017,16 +3008,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3038,9 +3028,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3320,7 +3309,7 @@ global.get $rc/logical-or-mismatch/gloRef call $~lib/rt/pure/__release ) - (func $start (; 34 ;) + (func $~start (; 34 ;) call $start:rc/logical-or-mismatch ) (func $~lib/rt/pure/__visit (; 35 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index e1ca3aac1d..7bac65c3aa 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -41,7 +41,7 @@ (export "OptimizeARC.eliminates.balancedInsideLoop" (func $rc/optimize/eliminated_vii)) (export "OptimizeARC.eliminates.balancedOutsideLoop" (func $rc/optimize/eliminated_vii)) (export "OptimizeARC.eliminates.balancedInsideOutsideLoop" (func $rc/optimize/eliminated_vii)) - (export "OptimizeARC.eliminates.balancedInsideOutsideLoopWithBranch" (func $rc/optimize/eliminated_viii)) + (export "OptimizeARC.eliminates.balancedInsideOutsideLoopWithBranch" (func $rc/optimize/OptimizeARC.eliminates.balancedInsideOutsideLoopWithBranch)) (export "OptimizeARC.eliminates.replace" (func $rc/optimize/eliminated_vii)) (export "OptimizeARC.eliminates.replaceAlreadyRetained" (func $rc/optimize/eliminated_rr)) (export "OptimizeARC.keeps.partialRetains" (func $rc/optimize/OptimizeARC.keeps.partialRetains)) @@ -713,7 +713,7 @@ i32.const 1936 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -727,7 +727,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -747,14 +747,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 368 @@ -1066,7 +1066,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1125,14 +1125,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1144,12 +1144,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1168,7 +1168,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1451,7 +1451,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1477,10 +1477,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1501,11 +1501,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1526,7 +1526,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1538,7 +1538,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1559,10 +1559,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1578,11 +1578,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1596,7 +1596,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1797,7 +1797,19 @@ (func $rc/optimize/eliminated_rr (; 35 ;) (param $0 i32) (result i32) call $rc/optimize/getRef ) - (func $rc/optimize/OptimizeARC.keeps.partialRetains (; 36 ;) (param $0 i32) (param $1 i32) + (func $rc/optimize/OptimizeARC.eliminates.balancedInsideOutsideLoopWithBranch (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) + loop $while-continue|0 + local.get $1 + if + local.get $2 + if + return + end + br $while-continue|0 + end + end + ) + (func $rc/optimize/OptimizeARC.keeps.partialRetains (; 37 ;) (param $0 i32) (param $1 i32) local.get $1 if (result i32) local.get $0 @@ -1807,7 +1819,7 @@ end call $~lib/rt/pure/__release ) - (func $rc/optimize/OptimizeARC.keeps.reachesReturn (; 37 ;) (param $0 i32) (param $1 i32) (result i32) + (func $rc/optimize/OptimizeARC.keeps.reachesReturn (; 38 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -1820,16 +1832,16 @@ call $~lib/rt/pure/__release i32.const 0 ) - (func $rc/optimize/FinalizeARC.keeps.dynamicRetain (; 38 ;) (param $0 i32) + (func $rc/optimize/FinalizeARC.keeps.dynamicRetain (; 39 ;) (param $0 i32) local.get $0 call $~lib/rt/pure/__retain drop ) - (func $rc/optimize/FinalizeARC.keeps.dynamicRelease (; 39 ;) (param $0 i32) + (func $rc/optimize/FinalizeARC.keeps.dynamicRelease (; 40 ;) (param $0 i32) local.get $0 call $~lib/rt/pure/__release ) - (func $~lib/rt/pure/__visit (; 40 ;) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 41 ;) (param $0 i32) (param $1 i32) local.get $0 i32.const 356 i32.lt_u @@ -1932,7 +1944,7 @@ unreachable end ) - (func $~lib/rt/__visit_members (; 41 ;) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 42 ;) (param $0 i32) (param $1 i32) block $switch$1$default block $switch$1$case$4 block $switch$1$case$2 diff --git a/tests/compiler/rc/optimize.untouched.wat b/tests/compiler/rc/optimize.untouched.wat index c95c657467..ad1efd71fb 100644 --- a/tests/compiler/rc/optimize.untouched.wat +++ b/tests/compiler/rc/optimize.untouched.wat @@ -847,6 +847,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -900,71 +902,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1353,34 +1353,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1389,23 +1390,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1414,11 +1415,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1430,21 +1431,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1452,39 +1452,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1834,39 +1832,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1874,13 +1872,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1921,9 +1919,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2080,13 +2077,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2161,9 +2158,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2202,13 +2198,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2283,9 +2279,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2310,13 +2305,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2391,9 +2386,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2863,6 +2857,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2909,13 +2904,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2926,30 +2921,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2966,37 +2960,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3007,15 +2999,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3032,17 +3024,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3055,16 +3046,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3076,9 +3066,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3397,67 +3386,68 @@ call $~lib/rt/pure/__release ) (func $rc/optimize/OptimizeARC.eliminates.balancedInsideLoop (; 44 ;) (param $0 i32) (param $1 i32) - block $break|0 - loop $continue|0 - local.get $1 - i32.eqz - br_if $break|0 + (local $2 i32) + loop $while-continue|0 + local.get $1 + local.set $2 + local.get $2 + if local.get $0 call $~lib/rt/pure/__retain local.set $0 local.get $0 call $~lib/rt/pure/__release - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $rc/optimize/OptimizeARC.eliminates.balancedOutsideLoop (; 45 ;) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 - block $break|0 - loop $continue|0 - local.get $1 - i32.eqz - br_if $break|0 - br $continue|0 + loop $while-continue|0 + local.get $1 + local.set $2 + local.get $2 + if + br $while-continue|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release ) (func $rc/optimize/OptimizeARC.eliminates.balancedInsideOutsideLoop (; 46 ;) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 - block $break|0 - loop $continue|0 - local.get $1 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + local.set $2 + local.get $2 + if local.get $0 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__retain local.set $0 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release ) (func $rc/optimize/OptimizeARC.eliminates.balancedInsideOutsideLoopWithBranch (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 - block $break|0 - loop $continue|0 - local.get $1 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + local.set $3 + local.get $3 + if local.get $2 if local.get $0 @@ -3469,9 +3459,8 @@ local.get $0 call $~lib/rt/pure/__retain local.set $0 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 0350dc44a0..efa1c3e6cd 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -622,7 +622,7 @@ i32.const 1904 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -636,7 +636,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -656,14 +656,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 336 @@ -973,7 +973,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1032,14 +1032,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1051,12 +1051,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1075,7 +1075,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1401,7 +1401,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1427,10 +1427,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1451,11 +1451,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1476,7 +1476,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1488,7 +1488,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1509,10 +1509,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1528,11 +1528,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1546,7 +1546,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end diff --git a/tests/compiler/rc/rereturn.untouched.wat b/tests/compiler/rc/rereturn.untouched.wat index 4efa56fae5..5989bbf377 100644 --- a/tests/compiler/rc/rereturn.untouched.wat +++ b/tests/compiler/rc/rereturn.untouched.wat @@ -32,7 +32,7 @@ (export "__release" (func $~lib/rt/pure/__release)) (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 1 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -752,6 +752,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -805,71 +807,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1256,34 +1256,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1292,23 +1293,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1317,11 +1318,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1333,21 +1334,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1355,39 +1355,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1774,39 +1772,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1814,13 +1812,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1861,9 +1859,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2020,13 +2017,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2101,9 +2098,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2142,13 +2138,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2223,9 +2219,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2250,13 +2245,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2331,9 +2326,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2803,6 +2797,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2849,13 +2844,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2866,30 +2861,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2906,37 +2900,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2947,15 +2939,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2972,17 +2964,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -2995,16 +2986,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3016,9 +3006,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3256,7 +3245,7 @@ call $rc/rereturn/rereturnRef call $~lib/rt/pure/__release ) - (func $start (; 31 ;) + (func $~start (; 31 ;) call $start:rc/rereturn ) (func $~lib/rt/pure/__visit (; 32 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index 04749d47bd..7e8310abf3 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -28,7 +28,7 @@ (export "memory" (memory $0)) (export "test1" (func $rc/ternary-mismatch/test1)) (export "test2" (func $rc/ternary-mismatch/test2)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -624,7 +624,7 @@ i32.const 1904 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -638,7 +638,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -658,14 +658,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 336 @@ -977,7 +977,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1036,14 +1036,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1055,12 +1055,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1079,7 +1079,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1424,7 +1424,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1450,10 +1450,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1474,11 +1474,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1499,7 +1499,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1511,7 +1511,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1532,10 +1532,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1551,11 +1551,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1569,7 +1569,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1794,7 +1794,7 @@ global.get $rc/ternary-mismatch/gloRef call $~lib/rt/pure/__release ) - (func $start (; 34 ;) + (func $~start (; 34 ;) call $start:rc/ternary-mismatch ) (func $~lib/rt/pure/__visit (; 35 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/rc/ternary-mismatch.untouched.wat b/tests/compiler/rc/ternary-mismatch.untouched.wat index f879fd6490..ce9ccf2a2c 100644 --- a/tests/compiler/rc/ternary-mismatch.untouched.wat +++ b/tests/compiler/rc/ternary-mismatch.untouched.wat @@ -34,7 +34,7 @@ (export "memory" (memory $0)) (export "test1" (func $rc/ternary-mismatch/test1)) (export "test2" (func $rc/ternary-mismatch/test2)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -754,6 +754,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -807,71 +809,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1260,34 +1260,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1296,23 +1297,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1321,11 +1322,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1337,21 +1338,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1359,39 +1359,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1807,39 +1805,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1847,13 +1845,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1894,9 +1892,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2053,13 +2050,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2134,9 +2131,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2175,13 +2171,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2256,9 +2252,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2283,13 +2278,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2364,9 +2359,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2836,6 +2830,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2882,13 +2877,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2899,30 +2894,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2939,37 +2933,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2980,15 +2972,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3005,17 +2997,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3028,16 +3019,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3049,9 +3039,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3304,7 +3293,7 @@ global.get $rc/ternary-mismatch/gloRef call $~lib/rt/pure/__release ) - (func $start (; 36 ;) + (func $~start (; 36 ;) call $start:rc/ternary-mismatch ) (func $~lib/rt/pure/__visit (; 37 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/reexport.optimized.wat b/tests/compiler/reexport.optimized.wat index fde4e51818..2aa38298ec 100644 --- a/tests/compiler/reexport.optimized.wat +++ b/tests/compiler/reexport.optimized.wat @@ -17,7 +17,7 @@ (export "renamed_add" (func $export/add)) (export "rerenamed_sub" (func $export/mul)) (export "renamed_ns.two" (func $export/ns.one)) - (start $start) + (start $~start) (func $export/add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -36,7 +36,7 @@ (func $export/ns.one (; 3 ;) nop ) - (func $start (; 4 ;) + (func $~start (; 4 ;) i32.const 1 i32.const 2 call $export/add diff --git a/tests/compiler/reexport.untouched.wat b/tests/compiler/reexport.untouched.wat index a63db8e4bb..8c84f16753 100644 --- a/tests/compiler/reexport.untouched.wat +++ b/tests/compiler/reexport.untouched.wat @@ -18,7 +18,7 @@ (export "renamed_add" (func $export/add)) (export "rerenamed_sub" (func $export/mul)) (export "renamed_ns.two" (func $export/ns.two)) - (start $start) + (start $~start) (func $export/add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -50,7 +50,7 @@ (func $export/ns.two (; 5 ;) nop ) - (func $start (; 6 ;) + (func $~start (; 6 ;) call $start:reexport ) ) diff --git a/tests/compiler/rereexport.untouched.wat b/tests/compiler/rereexport.untouched.wat index fd72a51bbf..838b5739a4 100644 --- a/tests/compiler/rereexport.untouched.wat +++ b/tests/compiler/rereexport.untouched.wat @@ -11,7 +11,7 @@ (export "renamed_a" (global $export/a)) (export "renamed_b" (global $export/b)) (export "renamed_renamed_b" (global $export/b)) - (start $start) + (start $~start) (func $export/add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -35,7 +35,7 @@ (func $start:rereexport (; 3 ;) call $start:reexport ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:rereexport ) ) diff --git a/tests/compiler/resolve-access.optimized.wat b/tests/compiler/resolve-access.optimized.wat index 68aa986a2f..7f447fd521 100644 --- a/tests/compiler/resolve-access.optimized.wat +++ b/tests/compiler/resolve-access.optimized.wat @@ -21,7 +21,7 @@ (export "arrayAccess" (func $resolve-access/arrayAccess)) (export "fieldAccess" (func $resolve-access/fieldAccess)) (export "propertyAccess" (func $resolve-access/propertyAccess)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -132,7 +132,7 @@ i32.and i32.eqz if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -158,10 +158,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $1 i32.const 8 i32.ge_u @@ -182,11 +182,11 @@ i32.const 8 i32.add local.set $2 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $1 if local.get $0 @@ -207,7 +207,7 @@ i32.const 1 i32.sub local.set $1 - br $continue|2 + br $while-continue|2 end end else @@ -216,7 +216,7 @@ i32.and i32.eqz if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $1 i32.add @@ -237,10 +237,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $1 i32.const 8 i32.ge_u @@ -256,11 +256,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $1 if local.get $0 @@ -274,7 +274,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -372,7 +372,7 @@ ) (func $~lib/util/number/utoa_simple (; 7 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -391,7 +391,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/decimalCount64 (; 8 ;) (param $0 i64) (result i32) @@ -449,7 +449,7 @@ ) (func $~lib/util/number/utoa_simple (; 9 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i64) - loop $continue|0 + loop $do-continue|0 local.get $1 i64.const 10 i64.div_u @@ -471,7 +471,7 @@ local.tee $1 i64.const 0 i64.ne - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/utoa64 (; 10 ;) (param $0 i64) (result i32) @@ -574,7 +574,7 @@ i32.wrap_i64 call $~lib/util/number/utoa32 ) - (func $start (; 16 ;) + (func $~start (; 16 ;) i32.const 192 global.set $~lib/rt/stub/startOffset i32.const 192 diff --git a/tests/compiler/resolve-access.untouched.wat b/tests/compiler/resolve-access.untouched.wat index a90f713604..2489d8dbc8 100644 --- a/tests/compiler/resolve-access.untouched.wat +++ b/tests/compiler/resolve-access.untouched.wat @@ -28,7 +28,7 @@ (export "arrayAccess" (func $resolve-access/arrayAccess)) (export "fieldAccess" (func $resolve-access/fieldAccess)) (export "propertyAccess" (func $resolve-access/propertyAccess)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -143,39 +143,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -183,13 +183,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -230,9 +230,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -389,13 +388,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -470,9 +469,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -511,13 +509,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -592,9 +590,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -619,13 +616,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -700,9 +697,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -1172,6 +1168,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -1218,13 +1215,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1235,30 +1232,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -1275,37 +1271,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -1316,15 +1310,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1341,17 +1335,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -1364,16 +1357,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -1385,9 +1377,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -1531,50 +1522,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 624 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -1584,15 +1578,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -1601,30 +1594,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -1641,13 +1634,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -1657,13 +1650,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -1742,77 +1735,78 @@ ) (func $~lib/util/number/utoa64_lut (; 12 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i64) + (local $12 i32) (local $13 i64) + (local $14 i64) i32.const 624 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i64.const 100000000 - i64.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i64.const 100000000 + i64.ge_u + local.set $4 + local.get $4 + if local.get $1 i64.const 100000000 i64.div_u - local.set $4 + local.set $5 local.get $1 - local.get $4 + local.get $5 i64.const 100000000 i64.mul i64.sub i32.wrap_i64 - local.set $5 - local.get $4 - local.set $1 - local.get $5 - i32.const 10000 - i32.div_u local.set $6 local.get $5 - i32.const 10000 - i32.rem_u - local.set $7 + local.set $1 local.get $6 - i32.const 100 + i32.const 10000 i32.div_u - local.set $8 + local.set $7 local.get $6 - i32.const 100 + i32.const 10000 i32.rem_u - local.set $9 + local.set $8 local.get $7 i32.const 100 i32.div_u - local.set $10 + local.set $9 local.get $7 i32.const 100 i32.rem_u + local.set $10 + local.get $8 + i32.const 100 + i32.div_u local.set $11 + local.get $8 + i32.const 100 + i32.rem_u + local.set $12 local.get $3 - local.get $10 + local.get $11 i32.const 2 i32.shl i32.add i64.load32_u - local.set $12 + local.set $13 local.get $3 - local.get $11 + local.get $12 i32.const 2 i32.shl i32.add i64.load32_u - local.set $13 + local.set $14 local.get $2 i32.const 4 i32.sub @@ -1822,26 +1816,26 @@ i32.const 1 i32.shl i32.add - local.get $12 local.get $13 + local.get $14 i64.const 32 i64.shl i64.or i64.store local.get $3 - local.get $8 + local.get $9 i32.const 2 i32.shl i32.add i64.load32_u - local.set $12 + local.set $13 local.get $3 - local.get $9 + local.get $10 i32.const 2 i32.shl i32.add i64.load32_u - local.set $13 + local.set $14 local.get $2 i32.const 4 i32.sub @@ -1851,15 +1845,14 @@ i32.const 1 i32.shl i32.add - local.get $12 local.get $13 + local.get $14 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.get $1 @@ -1948,26 +1941,21 @@ (func $resolve-access/arrayAccess (; 17 ;) (result i32) (local $0 i32) (local $1 i32) - (local $2 i32) i32.const 1 i32.const 3 i32.const 3 i32.const 32 call $~lib/rt/__allocArray call $~lib/rt/stub/__retain - local.tee $1 - call $~lib/rt/stub/__retain - local.set $0 - local.get $0 + local.set $1 + local.get $1 i32.const 0 call $~lib/array/Array#__get call $~lib/number/U64#toString - local.set $2 + local.set $0 local.get $1 call $~lib/rt/stub/__release local.get $0 - call $~lib/rt/stub/__release - local.get $2 ) (func $resolve-access/Container#constructor (; 18 ;) (param $0 i32) (result i32) local.get $0 @@ -2066,7 +2054,7 @@ call $~lib/rt/stub/__release local.get $1 ) - (func $start (; 25 ;) + (func $~start (; 25 ;) global.get $~lib/heap/__heap_base i32.const 15 i32.add diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat index be28eaf805..5267674116 100644 --- a/tests/compiler/resolve-binary.optimized.wat +++ b/tests/compiler/resolve-binary.optimized.wat @@ -59,7 +59,7 @@ (global $resolve-binary/bar (mut i32) (i32.const 0)) (global $resolve-binary/bar2 (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/number/Bool#toString (; 1 ;) (param $0 i32) (result i32) i32.const 32 i32.const 64 @@ -91,7 +91,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -112,20 +112,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -138,18 +136,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -323,7 +319,7 @@ ) (func $~lib/util/number/utoa_simple (; 8 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -342,7 +338,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa32 (; 9 ;) (param $0 i32) (result i32) @@ -427,7 +423,7 @@ i32.const 1476 i32.load local.set $12 - loop $continue|0 + loop $while-continue|0 local.get $4 i32.const 0 i32.gt_s @@ -585,80 +581,82 @@ i64.add local.tee $1 local.get $5 - i64.gt_u - br_if $continue|0 - local.get $4 - global.get $~lib/util/number/_K - i32.add - global.set $~lib/util/number/_K - local.get $12 - local.get $4 - i32.const 2 - i32.shl - i32.add - i64.load32_u - local.get $10 - i64.extend_i32_s - i64.shl - local.set $3 - local.get $0 - local.get $2 - i32.const 1 - i32.sub - i32.const 1 - i32.shl - i32.add - local.tee $0 - i32.load16_u - local.set $4 - loop $continue|2 + i64.le_u + if + local.get $4 + global.get $~lib/util/number/_K + i32.add + global.set $~lib/util/number/_K + local.get $12 + local.get $4 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.get $10 + i64.extend_i32_s + i64.shl + local.set $3 + local.get $0 + local.get $2 i32.const 1 - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.tee $8 - local.get $9 - i64.sub - i64.gt_u - local.get $8 - local.get $9 - i64.lt_u - select - i32.const 0 - local.get $5 - local.get $1 - i64.sub - local.get $3 - i64.ge_u - i32.const 0 - local.get $1 - local.get $9 - i64.lt_u - select - select - if - local.get $4 + i32.sub + i32.const 1 + i32.shl + i32.add + local.tee $0 + i32.load16_u + local.set $4 + loop $while-continue|3 i32.const 1 - i32.sub - local.set $4 + local.get $9 + local.get $1 + i64.sub local.get $1 local.get $3 i64.add - local.set $1 - br $continue|2 + local.tee $8 + local.get $9 + i64.sub + i64.gt_u + local.get $8 + local.get $9 + i64.lt_u + select + i32.const 0 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 + local.get $1 + local.get $9 + i64.lt_u + select + select + if + local.get $4 + i32.const 1 + i32.sub + local.set $4 + local.get $1 + local.get $3 + i64.add + local.set $1 + br $while-continue|3 + end end + local.get $0 + local.get $4 + i32.store16 + local.get $2 + return end - local.get $0 - local.get $4 - i32.store16 - local.get $2 - return + br $while-continue|0 end end - loop $continue|3 + loop $while-continue|4 local.get $5 i64.const 10 i64.mul @@ -705,7 +703,7 @@ local.tee $8 local.get $5 i64.ge_u - br_if $continue|3 + br_if $while-continue|4 end local.get $4 global.get $~lib/util/number/_K @@ -734,7 +732,7 @@ local.tee $0 i32.load16_u local.set $4 - loop $continue|4 + loop $while-continue|6 i32.const 1 local.get $3 local.get $1 @@ -771,7 +769,7 @@ local.get $11 i64.add local.set $1 - br $continue|4 + br $while-continue|6 end end local.get $0 @@ -801,7 +799,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -827,10 +825,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -851,11 +849,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -876,7 +874,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -888,7 +886,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -909,10 +907,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -928,11 +926,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -946,7 +944,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -983,7 +981,7 @@ i32.const 0 end if (result i32) - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s @@ -999,7 +997,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -1071,7 +1069,7 @@ i32.store i32.const 2 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 local.get $3 i32.lt_s @@ -1087,7 +1085,7 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 @@ -1104,34 +1102,34 @@ local.get $0 i32.const 4 i32.add - local.tee $0 + local.tee $1 local.get $3 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if i32.const 0 - local.get $2 + local.get $0 i32.sub - local.set $2 + local.set $0 end - local.get $2 - local.get $2 + local.get $0 + local.get $0 call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_simple - local.get $0 + local.get $1 i32.const 45 i32.const 43 - local.get $1 + local.get $2 select i32.store16 - local.get $2 + local.get $0 i32.const 2 i32.add else @@ -2198,7 +2196,7 @@ unreachable end ) - (func $start (; 19 ;) + (func $~start (; 19 ;) call $start:resolve-binary ) ) diff --git a/tests/compiler/resolve-binary.untouched.wat b/tests/compiler/resolve-binary.untouched.wat index a5914f8028..88d1eaafda 100644 --- a/tests/compiler/resolve-binary.untouched.wat +++ b/tests/compiler/resolve-binary.untouched.wat @@ -79,7 +79,7 @@ (global $resolve-binary/bar2 (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 8744)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/number/Bool#toString (; 1 ;) (param $0 i32) (result i32) local.get $0 if (result i32) @@ -108,6 +108,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -142,15 +143,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -167,39 +168,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -210,17 +213,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 6 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -474,50 +476,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 640 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -527,15 +532,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -544,30 +548,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -584,13 +588,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -600,13 +604,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -1619,14 +1623,17 @@ (local $16 i32) (local $17 i32) (local $18 i32) - (local $19 i64) + (local $19 i32) (local $20 i64) (local $21 i64) (local $22 i64) (local $23 i64) - (local $24 i32) + (local $24 i64) (local $25 i32) (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i64) i32.const 0 local.get $4 i32.sub @@ -1664,13 +1671,13 @@ i32.const 8160 i32.load offset=4 local.set $16 - block $break|0 - loop $continue|0 - local.get $14 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $14 + i32.const 0 + i32.gt_s + local.set $17 + local.get $17 + if block $break|1 block $case10|1 block $case9|1 @@ -1684,44 +1691,44 @@ block $case1|1 block $case0|1 local.get $14 - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 10 i32.eq br_if $case0|1 - local.get $18 + local.get $19 i32.const 9 i32.eq br_if $case1|1 - local.get $18 + local.get $19 i32.const 8 i32.eq br_if $case2|1 - local.get $18 + local.get $19 i32.const 7 i32.eq br_if $case3|1 - local.get $18 + local.get $19 i32.const 6 i32.eq br_if $case4|1 - local.get $18 + local.get $19 i32.const 5 i32.eq br_if $case5|1 - local.get $18 + local.get $19 i32.const 4 i32.eq br_if $case6|1 - local.get $18 + local.get $19 i32.const 3 i32.eq br_if $case7|1 - local.get $18 + local.get $19 i32.const 2 i32.eq br_if $case8|1 - local.get $18 + local.get $19 i32.const 1 i32.eq br_if $case9|1 @@ -1730,7 +1737,7 @@ local.get $12 i32.const 1000000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000000 i32.rem_u @@ -1740,7 +1747,7 @@ local.get $12 i32.const 100000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000000 i32.rem_u @@ -1750,7 +1757,7 @@ local.get $12 i32.const 10000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000000 i32.rem_u @@ -1760,7 +1767,7 @@ local.get $12 i32.const 1000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000 i32.rem_u @@ -1770,7 +1777,7 @@ local.get $12 i32.const 100000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000 i32.rem_u @@ -1780,7 +1787,7 @@ local.get $12 i32.const 10000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000 i32.rem_u @@ -1790,7 +1797,7 @@ local.get $12 i32.const 1000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000 i32.rem_u @@ -1800,7 +1807,7 @@ local.get $12 i32.const 100 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100 i32.rem_u @@ -1810,7 +1817,7 @@ local.get $12 i32.const 10 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10 i32.rem_u @@ -1818,31 +1825,31 @@ br $break|1 end local.get $12 - local.set $17 + local.set $18 i32.const 0 local.set $12 br $break|1 end i32.const 0 - local.set $17 + local.set $18 br $break|1 end - local.get $17 + local.get $18 local.get $15 i32.or if local.get $0 local.get $15 - local.tee $18 + local.tee $19 i32.const 1 i32.add local.set $15 - local.get $18 + local.get $19 i32.const 1 i32.shl i32.add i32.const 48 - local.get $17 + local.get $18 i32.const 65535 i32.and i32.add @@ -1859,8 +1866,8 @@ i64.shl local.get $13 i64.add - local.set $19 - local.get $19 + local.set $20 + local.get $20 local.get $5 i64.le_u if @@ -1869,13 +1876,13 @@ i32.add global.set $~lib/util/number/_K local.get $0 - local.set $24 + local.set $25 local.get $15 - local.set $18 + local.set $19 local.get $5 + local.set $24 + local.get $20 local.set $23 - local.get $19 - local.set $22 local.get $16 local.get $14 i32.const 2 @@ -1885,266 +1892,268 @@ local.get $7 i64.extend_i32_s i64.shl - local.set $21 + local.set $22 local.get $10 - local.set $20 - local.get $24 - local.get $18 + local.set $21 + local.get $25 + local.get $19 i32.const 1 i32.sub i32.const 1 i32.shl i32.add - local.set $25 - local.get $25 - i32.load16_u local.set $26 - block $break|2 - loop $continue|2 + local.get $26 + i32.load16_u + local.set $27 + loop $while-continue|3 + local.get $23 + local.get $21 + i64.lt_u + if (result i32) + local.get $24 + local.get $23 + i64.sub + local.get $22 + i64.ge_u + else + i32.const 0 + end + if (result i32) + local.get $23 local.get $22 - local.get $20 + i64.add + local.get $21 i64.lt_u if (result i32) + i32.const 1 + else + local.get $21 local.get $23 - local.get $22 i64.sub - local.get $21 - i64.ge_u - else - i32.const 0 - end - if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 - i64.lt_u - if (result i32) - i32.const 1 - else - local.get $20 - local.get $22 - i64.sub - local.get $22 - local.get $21 - i64.add - local.get $20 - i64.sub - i64.gt_u - end - else - i32.const 0 + local.get $21 + i64.sub + i64.gt_u end - i32.eqz - br_if $break|2 - local.get $26 + else + i32.const 0 + end + local.set $28 + local.get $28 + if + local.get $27 i32.const 1 i32.sub - local.set $26 + local.set $27 + local.get $23 local.get $22 - local.get $21 i64.add - local.set $22 - br $continue|2 + local.set $23 + br $while-continue|3 end - unreachable end - local.get $25 local.get $26 + local.get $27 i32.store16 local.get $15 return end - br $continue|0 + br $while-continue|0 end - unreachable end - loop $continue|3 - local.get $13 - i64.const 10 - i64.mul - local.set $13 - local.get $5 - i64.const 10 - i64.mul - local.set $5 - local.get $13 - local.get $7 - i64.extend_i32_s - i64.shr_u - local.set $19 - local.get $19 - local.get $15 - i64.extend_i32_s - i64.or - i64.const 0 - i64.ne - if - local.get $0 - local.get $15 - local.tee $17 - i32.const 1 - i32.add - local.set $15 - local.get $17 - i32.const 1 - i32.shl - i32.add - i32.const 48 - local.get $19 - i32.wrap_i64 - i32.const 65535 - i32.and - i32.add - i32.store16 - end - local.get $13 - local.get $9 - i64.and - local.set $13 - local.get $14 + loop $while-continue|4 i32.const 1 - i32.sub - local.set $14 - local.get $13 - local.get $5 - i64.lt_u + local.set $17 + local.get $17 if - global.get $~lib/util/number/_K - local.get $14 - i32.add - global.set $~lib/util/number/_K - local.get $10 - local.get $16 - i32.const 0 - local.get $14 - i32.sub - i32.const 2 - i32.shl - i32.add - i64.load32_u + local.get $13 + i64.const 10 i64.mul - local.set $10 - local.get $0 - local.set $24 - local.get $15 - local.set $18 + local.set $13 local.get $5 - local.set $23 + i64.const 10 + i64.mul + local.set $5 local.get $13 - local.set $22 - local.get $8 - local.set $21 - local.get $10 - local.set $20 + local.get $7 + i64.extend_i32_s + i64.shr_u + local.set $24 local.get $24 - local.get $18 - i32.const 1 - i32.sub - i32.const 1 - i32.shl - i32.add - local.set $17 - local.get $17 - i32.load16_u - local.set $26 - block $break|4 - loop $continue|4 - local.get $22 - local.get $20 - i64.lt_u - if (result i32) - local.get $23 - local.get $22 - i64.sub - local.get $21 - i64.ge_u - else + local.get $15 + i64.extend_i32_s + i64.or + i64.const 0 + i64.ne + if + local.get $0 + local.get $15 + local.tee $27 + i32.const 1 + i32.add + local.set $15 + local.get $27 + i32.const 1 + i32.shl + i32.add + i32.const 48 + local.get $24 + i32.wrap_i64 + i32.const 65535 + i32.and + i32.add + i32.store16 + end + local.get $13 + local.get $9 + i64.and + local.set $13 + local.get $14 + i32.const 1 + i32.sub + local.set $14 + local.get $13 + local.get $5 + i64.lt_u + if + global.get $~lib/util/number/_K + local.get $14 + i32.add + global.set $~lib/util/number/_K + local.get $10 + local.get $16 + i32.const 0 + local.get $14 + i32.sub + i32.const 2 + i32.shl + i32.add + i64.load32_u + i64.mul + local.set $10 + local.get $0 + local.set $19 + local.get $15 + local.set $28 + local.get $5 + local.set $29 + local.get $13 + local.set $23 + local.get $8 + local.set $22 + local.get $10 + local.set $21 + local.get $19 + local.get $28 + i32.const 1 + i32.sub + i32.const 1 + i32.shl + i32.add + local.set $27 + local.get $27 + i32.load16_u + local.set $26 + loop $while-continue|6 + local.get $23 + local.get $21 + i64.lt_u + if (result i32) + local.get $29 + local.get $23 + i64.sub + local.get $22 + i64.ge_u + else i32.const 0 end if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.lt_u if (result i32) i32.const 1 else - local.get $20 - local.get $22 + local.get $21 + local.get $23 i64.sub + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.sub i64.gt_u end else i32.const 0 end - i32.eqz - br_if $break|4 - local.get $26 - i32.const 1 - i32.sub - local.set $26 - local.get $22 - local.get $21 - i64.add - local.set $22 - br $continue|4 + local.set $25 + local.get $25 + if + local.get $26 + i32.const 1 + i32.sub + local.set $26 + local.get $23 + local.get $22 + i64.add + local.set $23 + br $while-continue|6 + end end - unreachable + local.get $27 + local.get $26 + i32.store16 + local.get $15 + return end - local.get $17 - local.get $26 - i32.store16 - local.get $15 - return + br $while-continue|4 end - br $continue|3 end - unreachable + local.get $15 ) (func $~lib/util/memory/memcpy (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2152,13 +2161,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2199,9 +2208,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2358,13 +2366,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2439,9 +2447,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2480,13 +2487,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2561,9 +2568,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2588,13 +2594,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2669,9 +2675,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3141,6 +3146,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3187,13 +3193,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3204,30 +3210,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3244,37 +3249,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3285,15 +3288,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3310,17 +3313,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3333,16 +3335,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3354,9 +3355,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3405,15 +3405,15 @@ i32.const 0 end if - block $break|0 - local.get $1 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + local.get $1 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -3425,9 +3425,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -3516,15 +3515,15 @@ i32.shl i32.or i32.store - block $break|1 - i32.const 2 - local.set $5 - loop $loop|1 - local.get $5 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 2 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $4 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 i32.const 1 @@ -3536,9 +3535,8 @@ i32.const 1 i32.add local.set $5 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $1 local.get $4 @@ -3555,30 +3553,30 @@ local.get $0 i32.const 4 i32.add - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - local.get $5 - i32.const 0 - i32.lt_s local.set $6 local.get $6 + i32.const 0 + i32.lt_s + local.set $4 + local.get $4 if i32.const 0 - local.get $5 + local.get $6 i32.sub - local.set $5 + local.set $6 end - local.get $5 + local.get $6 call $~lib/util/number/decimalCount32 i32.const 1 i32.add local.set $7 - local.get $4 - local.set $10 local.get $5 + local.set $10 + local.get $6 local.set $9 local.get $7 local.set $8 @@ -3586,10 +3584,10 @@ local.get $9 local.get $8 call $~lib/util/number/utoa32_lut - local.get $4 + local.get $5 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 local.get $7 @@ -3635,8 +3633,8 @@ local.get $8 i32.const 0 i32.lt_s - local.set $6 - local.get $6 + local.set $4 + local.get $4 if i32.const 0 local.get $8 @@ -3647,24 +3645,24 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.set $4 + local.set $5 local.get $9 local.set $11 local.get $8 - local.set $5 - local.get $4 + local.set $6 + local.get $5 local.set $10 local.get $11 - local.get $5 + local.get $6 local.get $10 call $~lib/util/number/utoa32_lut local.get $9 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 - local.get $4 + local.get $5 i32.add local.set $1 local.get $1 @@ -5533,7 +5531,7 @@ local.get $62 call $~lib/rt/stub/__release ) - (func $start (; 44 ;) + (func $~start (; 44 ;) call $start:resolve-binary ) ) diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat index bc2c5bce8f..cd48f2864a 100644 --- a/tests/compiler/resolve-elementaccess.optimized.wat +++ b/tests/compiler/resolve-elementaccess.optimized.wat @@ -44,7 +44,7 @@ (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -347,7 +347,7 @@ i32.const 1460 i32.load local.set $13 - loop $continue|0 + loop $while-continue|0 local.get $4 i32.const 0 i32.gt_s @@ -505,81 +505,83 @@ i64.add local.tee $1 local.get $5 - i64.gt_u - br_if $continue|0 - local.get $4 - global.get $~lib/util/number/_K - i32.add - global.set $~lib/util/number/_K - local.get $13 - local.get $4 - i32.const 2 - i32.shl - i32.add - i64.load32_u - local.get $10 - i64.extend_i32_s - i64.shl - local.set $3 - local.get $0 - local.get $6 - i32.const 1 - i32.sub - i32.const 1 - i32.shl - i32.add - local.tee $2 - i32.load16_u - local.set $4 - loop $continue|2 + i64.le_u + if + local.get $4 + global.get $~lib/util/number/_K + i32.add + global.set $~lib/util/number/_K + local.get $13 + local.get $4 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.get $10 + i64.extend_i32_s + i64.shl + local.set $3 + local.get $0 + local.get $6 i32.const 1 - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.sub - i64.gt_u - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.lt_u - select - i32.const 0 - local.get $5 - local.get $1 - i64.sub - local.get $3 - i64.ge_u - i32.const 0 - local.get $1 - local.get $9 - i64.lt_u - select - select - if - local.get $4 + i32.sub + i32.const 1 + i32.shl + i32.add + local.tee $2 + i32.load16_u + local.set $4 + loop $while-continue|3 i32.const 1 - i32.sub - local.set $4 + local.get $9 + local.get $1 + i64.sub local.get $1 local.get $3 i64.add - local.set $1 - br $continue|2 + local.get $9 + i64.sub + i64.gt_u + local.get $1 + local.get $3 + i64.add + local.get $9 + i64.lt_u + select + i32.const 0 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 + local.get $1 + local.get $9 + i64.lt_u + select + select + if + local.get $4 + i32.const 1 + i32.sub + local.set $4 + local.get $1 + local.get $3 + i64.add + local.set $1 + br $while-continue|3 + end end + local.get $2 + local.get $4 + i32.store16 + local.get $6 + return end - local.get $2 - local.get $4 - i32.store16 - local.get $6 - return + br $while-continue|0 end end - loop $continue|3 (result i32) + loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul @@ -626,7 +628,7 @@ local.tee $12 local.get $5 i64.ge_u - br_if $continue|3 + br_if $while-continue|4 local.get $4 global.get $~lib/util/number/_K i32.add @@ -654,7 +656,7 @@ local.tee $2 i32.load16_u local.set $4 - loop $continue|4 + loop $while-continue|6 i32.const 1 local.get $3 local.get $1 @@ -692,7 +694,7 @@ local.get $11 i64.add local.set $1 - br $continue|4 + br $while-continue|6 end end local.get $2 @@ -723,7 +725,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -749,10 +751,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -773,11 +775,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -798,7 +800,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -810,7 +812,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -831,10 +833,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -850,11 +852,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -868,7 +870,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -876,7 +878,7 @@ ) (func $~lib/util/number/utoa_simple (; 10 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -895,7 +897,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/prettify (; 11 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -929,7 +931,7 @@ i32.const 0 end if (result i32) - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s @@ -945,7 +947,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -1017,7 +1019,7 @@ i32.store i32.const 2 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 local.get $3 i32.lt_s @@ -1033,7 +1035,7 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 @@ -1050,34 +1052,34 @@ local.get $0 i32.const 4 i32.add - local.tee $0 + local.tee $1 local.get $3 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if i32.const 0 - local.get $2 + local.get $0 i32.sub - local.set $2 + local.set $0 end - local.get $2 - local.get $2 + local.get $0 + local.get $0 call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_simple - local.get $0 + local.get $1 i32.const 45 i32.const 43 - local.get $1 + local.get $2 select i32.store16 - local.get $2 + local.get $0 i32.const 2 i32.add else @@ -1627,7 +1629,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -1648,20 +1650,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -1674,18 +1674,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -1817,7 +1815,7 @@ unreachable end ) - (func $start (; 21 ;) + (func $~start (; 21 ;) call $start:resolve-elementaccess ) ) diff --git a/tests/compiler/resolve-elementaccess.untouched.wat b/tests/compiler/resolve-elementaccess.untouched.wat index 556cda77cd..677f0aede7 100644 --- a/tests/compiler/resolve-elementaccess.untouched.wat +++ b/tests/compiler/resolve-elementaccess.untouched.wat @@ -51,7 +51,7 @@ (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 2136)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -166,6 +166,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -384,13 +385,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -417,9 +418,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -661,14 +661,17 @@ (local $16 i32) (local $17 i32) (local $18 i32) - (local $19 i64) + (local $19 i32) (local $20 i64) (local $21 i64) (local $22 i64) (local $23 i64) - (local $24 i32) + (local $24 i64) (local $25 i32) (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i64) i32.const 0 local.get $4 i32.sub @@ -706,13 +709,13 @@ i32.const 1456 i32.load offset=4 local.set $16 - block $break|0 - loop $continue|0 - local.get $14 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $14 + i32.const 0 + i32.gt_s + local.set $17 + local.get $17 + if block $break|1 block $case10|1 block $case9|1 @@ -726,44 +729,44 @@ block $case1|1 block $case0|1 local.get $14 - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 10 i32.eq br_if $case0|1 - local.get $18 + local.get $19 i32.const 9 i32.eq br_if $case1|1 - local.get $18 + local.get $19 i32.const 8 i32.eq br_if $case2|1 - local.get $18 + local.get $19 i32.const 7 i32.eq br_if $case3|1 - local.get $18 + local.get $19 i32.const 6 i32.eq br_if $case4|1 - local.get $18 + local.get $19 i32.const 5 i32.eq br_if $case5|1 - local.get $18 + local.get $19 i32.const 4 i32.eq br_if $case6|1 - local.get $18 + local.get $19 i32.const 3 i32.eq br_if $case7|1 - local.get $18 + local.get $19 i32.const 2 i32.eq br_if $case8|1 - local.get $18 + local.get $19 i32.const 1 i32.eq br_if $case9|1 @@ -772,7 +775,7 @@ local.get $12 i32.const 1000000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000000 i32.rem_u @@ -782,7 +785,7 @@ local.get $12 i32.const 100000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000000 i32.rem_u @@ -792,7 +795,7 @@ local.get $12 i32.const 10000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000000 i32.rem_u @@ -802,7 +805,7 @@ local.get $12 i32.const 1000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000 i32.rem_u @@ -812,7 +815,7 @@ local.get $12 i32.const 100000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000 i32.rem_u @@ -822,7 +825,7 @@ local.get $12 i32.const 10000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000 i32.rem_u @@ -832,7 +835,7 @@ local.get $12 i32.const 1000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000 i32.rem_u @@ -842,7 +845,7 @@ local.get $12 i32.const 100 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100 i32.rem_u @@ -852,7 +855,7 @@ local.get $12 i32.const 10 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10 i32.rem_u @@ -860,31 +863,31 @@ br $break|1 end local.get $12 - local.set $17 + local.set $18 i32.const 0 local.set $12 br $break|1 end i32.const 0 - local.set $17 + local.set $18 br $break|1 end - local.get $17 + local.get $18 local.get $15 i32.or if local.get $0 local.get $15 - local.tee $18 + local.tee $19 i32.const 1 i32.add local.set $15 - local.get $18 + local.get $19 i32.const 1 i32.shl i32.add i32.const 48 - local.get $17 + local.get $18 i32.const 65535 i32.and i32.add @@ -901,8 +904,8 @@ i64.shl local.get $13 i64.add - local.set $19 - local.get $19 + local.set $20 + local.get $20 local.get $5 i64.le_u if @@ -911,13 +914,13 @@ i32.add global.set $~lib/util/number/_K local.get $0 - local.set $24 + local.set $25 local.get $15 - local.set $18 + local.set $19 local.get $5 + local.set $24 + local.get $20 local.set $23 - local.get $19 - local.set $22 local.get $16 local.get $14 i32.const 2 @@ -927,266 +930,268 @@ local.get $7 i64.extend_i32_s i64.shl - local.set $21 + local.set $22 local.get $10 - local.set $20 - local.get $24 - local.get $18 + local.set $21 + local.get $25 + local.get $19 i32.const 1 i32.sub i32.const 1 i32.shl i32.add - local.set $25 - local.get $25 - i32.load16_u local.set $26 - block $break|2 - loop $continue|2 + local.get $26 + i32.load16_u + local.set $27 + loop $while-continue|3 + local.get $23 + local.get $21 + i64.lt_u + if (result i32) + local.get $24 + local.get $23 + i64.sub local.get $22 - local.get $20 + i64.ge_u + else + i32.const 0 + end + if (result i32) + local.get $23 + local.get $22 + i64.add + local.get $21 i64.lt_u if (result i32) + i32.const 1 + else + local.get $21 local.get $23 - local.get $22 i64.sub - local.get $21 - i64.ge_u - else - i32.const 0 - end - if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 - i64.lt_u - if (result i32) - i32.const 1 - else - local.get $20 - local.get $22 - i64.sub - local.get $22 - local.get $21 - i64.add - local.get $20 - i64.sub - i64.gt_u - end - else - i32.const 0 + local.get $21 + i64.sub + i64.gt_u end - i32.eqz - br_if $break|2 - local.get $26 + else + i32.const 0 + end + local.set $28 + local.get $28 + if + local.get $27 i32.const 1 i32.sub - local.set $26 + local.set $27 + local.get $23 local.get $22 - local.get $21 i64.add - local.set $22 - br $continue|2 + local.set $23 + br $while-continue|3 end - unreachable end - local.get $25 local.get $26 + local.get $27 i32.store16 local.get $15 return end - br $continue|0 + br $while-continue|0 end - unreachable end - loop $continue|3 - local.get $13 - i64.const 10 - i64.mul - local.set $13 - local.get $5 - i64.const 10 - i64.mul - local.set $5 - local.get $13 - local.get $7 - i64.extend_i32_s - i64.shr_u - local.set $19 - local.get $19 - local.get $15 - i64.extend_i32_s - i64.or - i64.const 0 - i64.ne - if - local.get $0 - local.get $15 - local.tee $17 - i32.const 1 - i32.add - local.set $15 - local.get $17 - i32.const 1 - i32.shl - i32.add - i32.const 48 - local.get $19 - i32.wrap_i64 - i32.const 65535 - i32.and - i32.add - i32.store16 - end - local.get $13 - local.get $9 - i64.and - local.set $13 - local.get $14 + loop $while-continue|4 i32.const 1 - i32.sub - local.set $14 - local.get $13 - local.get $5 - i64.lt_u + local.set $17 + local.get $17 if - global.get $~lib/util/number/_K - local.get $14 - i32.add - global.set $~lib/util/number/_K - local.get $10 - local.get $16 - i32.const 0 - local.get $14 - i32.sub - i32.const 2 - i32.shl - i32.add - i64.load32_u + local.get $13 + i64.const 10 i64.mul - local.set $10 - local.get $0 - local.set $24 - local.get $15 - local.set $18 + local.set $13 local.get $5 - local.set $23 + i64.const 10 + i64.mul + local.set $5 local.get $13 - local.set $22 - local.get $8 - local.set $21 - local.get $10 - local.set $20 + local.get $7 + i64.extend_i32_s + i64.shr_u + local.set $24 local.get $24 - local.get $18 + local.get $15 + i64.extend_i32_s + i64.or + i64.const 0 + i64.ne + if + local.get $0 + local.get $15 + local.tee $27 + i32.const 1 + i32.add + local.set $15 + local.get $27 + i32.const 1 + i32.shl + i32.add + i32.const 48 + local.get $24 + i32.wrap_i64 + i32.const 65535 + i32.and + i32.add + i32.store16 + end + local.get $13 + local.get $9 + i64.and + local.set $13 + local.get $14 i32.const 1 i32.sub - i32.const 1 - i32.shl - i32.add - local.set $17 - local.get $17 - i32.load16_u - local.set $26 - block $break|4 - loop $continue|4 - local.get $22 - local.get $20 + local.set $14 + local.get $13 + local.get $5 + i64.lt_u + if + global.get $~lib/util/number/_K + local.get $14 + i32.add + global.set $~lib/util/number/_K + local.get $10 + local.get $16 + i32.const 0 + local.get $14 + i32.sub + i32.const 2 + i32.shl + i32.add + i64.load32_u + i64.mul + local.set $10 + local.get $0 + local.set $19 + local.get $15 + local.set $28 + local.get $5 + local.set $29 + local.get $13 + local.set $23 + local.get $8 + local.set $22 + local.get $10 + local.set $21 + local.get $19 + local.get $28 + i32.const 1 + i32.sub + i32.const 1 + i32.shl + i32.add + local.set $27 + local.get $27 + i32.load16_u + local.set $26 + loop $while-continue|6 + local.get $23 + local.get $21 i64.lt_u if (result i32) + local.get $29 local.get $23 - local.get $22 i64.sub - local.get $21 + local.get $22 i64.ge_u else i32.const 0 end if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.lt_u if (result i32) i32.const 1 else - local.get $20 - local.get $22 + local.get $21 + local.get $23 i64.sub + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.sub i64.gt_u end else i32.const 0 end - i32.eqz - br_if $break|4 - local.get $26 - i32.const 1 - i32.sub - local.set $26 - local.get $22 - local.get $21 - i64.add - local.set $22 - br $continue|4 + local.set $25 + local.get $25 + if + local.get $26 + i32.const 1 + i32.sub + local.set $26 + local.get $23 + local.get $22 + i64.add + local.set $23 + br $while-continue|6 + end end - unreachable + local.get $27 + local.get $26 + i32.store16 + local.get $15 + return end - local.get $17 - local.get $26 - i32.store16 - local.get $15 - return + br $while-continue|4 end - br $continue|3 end - unreachable + local.get $15 ) (func $~lib/util/memory/memcpy (; 14 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1194,13 +1199,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1241,9 +1246,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -1400,13 +1404,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -1481,9 +1485,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -1522,13 +1525,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -1603,9 +1606,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -1630,13 +1632,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -1711,9 +1713,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2183,6 +2184,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2229,13 +2231,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2246,30 +2248,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2286,37 +2287,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2327,15 +2326,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2352,17 +2351,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -2375,16 +2373,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -2396,9 +2393,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -2409,50 +2405,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 1904 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -2462,15 +2461,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -2479,30 +2477,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -2519,13 +2517,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -2535,13 +2533,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -2589,15 +2587,15 @@ i32.const 0 end if - block $break|0 - local.get $1 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + local.get $1 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -2609,9 +2607,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -2700,15 +2697,15 @@ i32.shl i32.or i32.store - block $break|1 - i32.const 2 - local.set $5 - loop $loop|1 - local.get $5 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 2 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $4 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 i32.const 1 @@ -2720,9 +2717,8 @@ i32.const 1 i32.add local.set $5 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $1 local.get $4 @@ -2739,30 +2735,30 @@ local.get $0 i32.const 4 i32.add - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - local.get $5 - i32.const 0 - i32.lt_s local.set $6 local.get $6 + i32.const 0 + i32.lt_s + local.set $4 + local.get $4 if i32.const 0 - local.get $5 + local.get $6 i32.sub - local.set $5 + local.set $6 end - local.get $5 + local.get $6 call $~lib/util/number/decimalCount32 i32.const 1 i32.add local.set $7 - local.get $4 - local.set $10 local.get $5 + local.set $10 + local.get $6 local.set $9 local.get $7 local.set $8 @@ -2770,10 +2766,10 @@ local.get $9 local.get $8 call $~lib/util/number/utoa32_lut - local.get $4 + local.get $5 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 local.get $7 @@ -2819,8 +2815,8 @@ local.get $8 i32.const 0 i32.lt_s - local.set $6 - local.get $6 + local.set $4 + local.get $4 if i32.const 0 local.get $8 @@ -2831,24 +2827,24 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.set $4 + local.set $5 local.get $9 local.set $11 local.get $8 - local.set $5 - local.get $4 + local.set $6 + local.get $5 local.set $10 local.get $11 - local.get $5 + local.get $6 local.get $10 call $~lib/util/number/utoa32_lut local.get $9 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 - local.get $4 + local.get $5 i32.add local.set $1 local.get $1 @@ -3523,6 +3519,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -3557,15 +3554,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -3582,39 +3579,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -3625,17 +3624,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 25 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -3824,7 +3822,7 @@ local.get $2 call $~lib/rt/stub/__release ) - (func $start (; 27 ;) + (func $~start (; 27 ;) call $start:resolve-elementaccess ) ) diff --git a/tests/compiler/resolve-function-expression.optimized.wat b/tests/compiler/resolve-function-expression.optimized.wat index 3a2020bf8b..9a48402352 100644 --- a/tests/compiler/resolve-function-expression.optimized.wat +++ b/tests/compiler/resolve-function-expression.optimized.wat @@ -10,11 +10,12 @@ (data (i32.const 16) "<\00\00\00\01\00\00\00\01\00\00\00<\00\00\00r\00e\00s\00o\00l\00v\00e\00-\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s") (data (i32.const 96) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000") (data (i32.const 128) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\004\002") - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:resolve-function-expression~anonymous|0 (; 1 ;) (param $0 i32) (result i32) local.get $0 i32.const 40 @@ -167,7 +168,7 @@ ) (func $~lib/util/number/utoa_simple (; 7 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -186,7 +187,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa32 (; 8 ;) (param $0 i32) (result i32) @@ -253,7 +254,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $2 @@ -274,20 +275,18 @@ local.tee $1 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $1 - local.tee $3 - i32.const 1 - i32.sub - local.set $1 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $1 + local.tee $3 + i32.const 1 + i32.sub + local.set $1 + local.get $3 + if local.get $0 i32.load16_u local.tee $3 @@ -300,18 +299,16 @@ local.get $4 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $2 - i32.const 2 - i32.add - local.set $2 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $2 + i32.const 2 + i32.add + local.set $2 + br $while-continue|1 end end i32.const 0 @@ -348,7 +345,7 @@ ) (func $start:resolve-function-expression (; 12 ;) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 2 call $start:resolve-function-expression~anonymous|0 i32.const 42 @@ -362,7 +359,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 call $start:resolve-function-expression~anonymous|1 i32.const 42 @@ -380,7 +377,7 @@ i32.const 160 global.set $~lib/rt/stub/offset i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 call $start:resolve-function-expression~anonymous|2 call $~lib/util/number/itoa32 @@ -395,7 +392,7 @@ unreachable end ) - (func $start (; 13 ;) + (func $~start (; 13 ;) call $start:resolve-function-expression ) ) diff --git a/tests/compiler/resolve-function-expression.untouched.wat b/tests/compiler/resolve-function-expression.untouched.wat index e483ecb1b4..9d882f285b 100644 --- a/tests/compiler/resolve-function-expression.untouched.wat +++ b/tests/compiler/resolve-function-expression.untouched.wat @@ -15,13 +15,14 @@ (data (i32.const 576) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\004\002\00") (table $0 4 funcref) (elem (i32.const 1) $start:resolve-function-expression~anonymous|0 $start:resolve-function-expression~anonymous|1 $start:resolve-function-expression~anonymous|2) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 596)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:resolve-function-expression~anonymous|0 (; 1 ;) (param $0 i32) (result i32) local.get $0 i32.const 40 @@ -216,50 +217,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 560 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -269,15 +273,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -286,30 +289,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -326,13 +329,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -342,13 +345,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -435,6 +438,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -469,15 +473,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -494,39 +498,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -537,17 +543,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 15 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -625,7 +630,7 @@ (func $start:resolve-function-expression (; 16 ;) (local $0 i32) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 2 i32.const 1 call_indirect (type $i32_=>_i32) @@ -641,7 +646,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 i32.const 2 call_indirect (type $i32_=>_i32) @@ -667,7 +672,7 @@ global.get $~lib/rt/stub/startOffset global.set $~lib/rt/stub/offset i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 i32.const 3 call_indirect (type $i32_=>_i32) @@ -687,7 +692,7 @@ local.get $0 call $~lib/rt/stub/__release ) - (func $start (; 17 ;) + (func $~start (; 17 ;) call $start:resolve-function-expression ) ) diff --git a/tests/compiler/resolve-new.optimized.wat b/tests/compiler/resolve-new.optimized.wat index bec129ac15..c4170ae6ab 100644 --- a/tests/compiler/resolve-new.optimized.wat +++ b/tests/compiler/resolve-new.optimized.wat @@ -7,7 +7,7 @@ (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $resolve-new/foo (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -77,7 +77,7 @@ i32.store offset=12 local.get $1 ) - (func $start (; 2 ;) + (func $~start (; 2 ;) i32.const 16 global.set $~lib/rt/stub/startOffset i32.const 16 diff --git a/tests/compiler/resolve-new.untouched.wat b/tests/compiler/resolve-new.untouched.wat index 4dd064abbb..e4bd8ae438 100644 --- a/tests/compiler/resolve-new.untouched.wat +++ b/tests/compiler/resolve-new.untouched.wat @@ -10,7 +10,7 @@ (global $resolve-new/foo (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 8)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -161,7 +161,7 @@ local.get $0 call $~lib/rt/stub/__release ) - (func $start (; 7 ;) + (func $~start (; 7 ;) call $start:resolve-new ) ) diff --git a/tests/compiler/resolve-propertyaccess.optimized.wat b/tests/compiler/resolve-propertyaccess.optimized.wat index e309fefac1..7d81ff4392 100644 --- a/tests/compiler/resolve-propertyaccess.optimized.wat +++ b/tests/compiler/resolve-propertyaccess.optimized.wat @@ -23,7 +23,7 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/util/number/decimalCount32 (; 1 ;) (param $0 i32) (result i32) i32.const 1 i32.const 2 @@ -161,7 +161,7 @@ ) (func $~lib/util/number/utoa_simple (; 4 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -180,7 +180,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa32 (; 5 ;) (param $0 i32) (result i32) @@ -249,7 +249,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -270,20 +270,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -296,18 +294,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -488,7 +484,7 @@ unreachable end ) - (func $start (; 10 ;) + (func $~start (; 10 ;) call $start:resolve-propertyaccess ) ) diff --git a/tests/compiler/resolve-propertyaccess.untouched.wat b/tests/compiler/resolve-propertyaccess.untouched.wat index 44baa9b658..3df95e0a47 100644 --- a/tests/compiler/resolve-propertyaccess.untouched.wat +++ b/tests/compiler/resolve-propertyaccess.untouched.wat @@ -37,7 +37,7 @@ (global $resolve-propertyaccess/Class.lazyStaticField (mut i32) (i32.const 55)) (global $~lib/heap/__heap_base i32 (i32.const 884)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/util/number/decimalCount32 (; 1 ;) (param $0 i32) (result i32) (local $1 i32) local.get $0 @@ -217,50 +217,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 480 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -270,15 +273,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -287,30 +289,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -327,13 +329,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -343,13 +345,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -436,6 +438,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -470,15 +473,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -495,39 +498,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -538,17 +543,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 12 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -827,7 +831,7 @@ local.get $8 call $~lib/rt/stub/__release ) - (func $start (; 15 ;) + (func $~start (; 15 ;) call $start:resolve-propertyaccess ) ) diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index a623840d07..0a838332c0 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -43,15 +43,16 @@ (global $~lib/util/number/_K (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 1680)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) (export "__retain" (func $~lib/rt/pure/__retain)) (export "__release" (func $~lib/rt/pure/__release)) (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 1 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -647,7 +648,7 @@ i32.const 3312 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -661,7 +662,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -681,14 +682,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 1744 @@ -998,7 +999,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1057,14 +1058,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1076,12 +1077,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1100,7 +1101,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1426,7 +1427,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1452,10 +1453,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1476,11 +1477,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1501,7 +1502,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1513,7 +1514,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1534,10 +1535,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1553,11 +1554,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1571,7 +1572,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1809,7 +1810,7 @@ ) (func $~lib/util/number/utoa_simple (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -1828,7 +1829,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/string/String#get:length (; 28 ;) (param $0 i32) (result i32) @@ -1856,7 +1857,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -1877,20 +1878,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $0 i32.load16_u local.tee $3 @@ -1903,18 +1902,16 @@ local.get $4 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -1994,7 +1991,7 @@ i32.const 1620 i32.load local.set $12 - loop $continue|0 + loop $while-continue|0 local.get $4 i32.const 0 i32.gt_s @@ -2152,80 +2149,82 @@ i64.add local.tee $1 local.get $5 - i64.gt_u - br_if $continue|0 - local.get $4 - global.get $~lib/util/number/_K - i32.add - global.set $~lib/util/number/_K - local.get $12 - local.get $4 - i32.const 2 - i32.shl - i32.add - i64.load32_u - local.get $10 - i64.extend_i32_s - i64.shl - local.set $3 - local.get $0 - local.get $2 - i32.const 1 - i32.sub - i32.const 1 - i32.shl - i32.add - local.tee $0 - i32.load16_u - local.set $4 - loop $continue|2 + i64.le_u + if + local.get $4 + global.get $~lib/util/number/_K + i32.add + global.set $~lib/util/number/_K + local.get $12 + local.get $4 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.get $10 + i64.extend_i32_s + i64.shl + local.set $3 + local.get $0 + local.get $2 i32.const 1 - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.tee $8 - local.get $9 - i64.sub - i64.gt_u - local.get $8 - local.get $9 - i64.lt_u - select - i32.const 0 - local.get $5 - local.get $1 - i64.sub - local.get $3 - i64.ge_u - i32.const 0 - local.get $1 - local.get $9 - i64.lt_u - select - select - if - local.get $4 + i32.sub + i32.const 1 + i32.shl + i32.add + local.tee $0 + i32.load16_u + local.set $4 + loop $while-continue|3 i32.const 1 - i32.sub - local.set $4 + local.get $9 + local.get $1 + i64.sub local.get $1 local.get $3 i64.add - local.set $1 - br $continue|2 + local.tee $8 + local.get $9 + i64.sub + i64.gt_u + local.get $8 + local.get $9 + i64.lt_u + select + i32.const 0 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 + local.get $1 + local.get $9 + i64.lt_u + select + select + if + local.get $4 + i32.const 1 + i32.sub + local.set $4 + local.get $1 + local.get $3 + i64.add + local.set $1 + br $while-continue|3 + end end + local.get $0 + local.get $4 + i32.store16 + local.get $2 + return end - local.get $0 - local.get $4 - i32.store16 - local.get $2 - return + br $while-continue|0 end end - loop $continue|3 + loop $while-continue|4 local.get $5 i64.const 10 i64.mul @@ -2272,7 +2271,7 @@ local.tee $8 local.get $5 i64.ge_u - br_if $continue|3 + br_if $while-continue|4 end local.get $4 global.get $~lib/util/number/_K @@ -2301,7 +2300,7 @@ local.tee $0 i32.load16_u local.set $4 - loop $continue|4 + loop $while-continue|6 i32.const 1 local.get $3 local.get $1 @@ -2338,7 +2337,7 @@ local.get $11 i64.add local.set $1 - br $continue|4 + br $while-continue|6 end end local.get $0 @@ -2377,7 +2376,7 @@ i32.const 0 end if (result i32) - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s @@ -2393,7 +2392,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -2465,7 +2464,7 @@ i32.store i32.const 2 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 local.get $3 i32.lt_s @@ -2481,7 +2480,7 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 @@ -2498,34 +2497,34 @@ local.get $0 i32.const 4 i32.add - local.tee $0 + local.tee $1 local.get $3 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if i32.const 0 - local.get $2 + local.get $0 i32.sub - local.set $2 + local.set $0 end - local.get $2 - local.get $2 + local.get $0 + local.get $0 call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_simple - local.get $0 + local.get $1 i32.const 45 i32.const 43 - local.get $1 + local.get $2 select i32.store16 - local.get $2 + local.get $0 i32.const 2 i32.add else @@ -2886,7 +2885,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 call $start:resolve-ternary~anonymous|0 i32.const 2 @@ -2900,7 +2899,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 call $resolve-ternary/g1 i32.const 4 @@ -2914,7 +2913,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 call $start:resolve-ternary~anonymous|1 i32.const 3 @@ -2931,7 +2930,7 @@ local.get $0 call $~lib/rt/pure/__release ) - (func $start (; 40 ;) + (func $~start (; 40 ;) call $start:resolve-ternary ) (func $~lib/rt/pure/__visit (; 41 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/resolve-ternary.untouched.wat b/tests/compiler/resolve-ternary.untouched.wat index fbc0069290..02aaa3dcf5 100644 --- a/tests/compiler/resolve-ternary.untouched.wat +++ b/tests/compiler/resolve-ternary.untouched.wat @@ -57,16 +57,17 @@ (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) (global $resolve-ternary/f1 i32 (i32.const 1)) (global $resolve-ternary/f2 i32 (i32.const 2)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 2128)) (global $~lib/heap/__heap_base i32 (i32.const 2180)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) (export "__retain" (func $~lib/rt/pure/__retain)) (export "__release" (func $~lib/rt/pure/__release)) (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 1 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -786,6 +787,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -839,71 +842,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1290,34 +1291,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1326,23 +1328,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1351,11 +1353,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1367,21 +1369,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1389,39 +1390,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1808,39 +1807,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1848,13 +1847,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1895,9 +1894,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2054,13 +2052,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2135,9 +2133,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2176,13 +2173,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2257,9 +2254,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2284,13 +2280,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2365,9 +2361,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2837,6 +2832,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2883,13 +2879,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2900,30 +2896,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2940,37 +2935,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2981,15 +2974,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3006,17 +2999,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3029,16 +3021,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3050,9 +3041,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3339,50 +3329,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 752 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -3392,15 +3385,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -3409,30 +3401,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -3449,13 +3441,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -3465,13 +3457,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -3552,6 +3544,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -3586,15 +3579,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -3611,39 +3604,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $9 + local.get $10 return end local.get $5 @@ -3654,17 +3649,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 34 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -3770,14 +3764,17 @@ (local $16 i32) (local $17 i32) (local $18 i32) - (local $19 i64) + (local $19 i32) (local $20 i64) (local $21 i64) (local $22 i64) (local $23 i64) - (local $24 i32) + (local $24 i64) (local $25 i32) (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i64) i32.const 0 local.get $4 i32.sub @@ -3815,13 +3812,13 @@ i32.const 2064 i32.load offset=4 local.set $16 - block $break|0 - loop $continue|0 - local.get $14 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $14 + i32.const 0 + i32.gt_s + local.set $17 + local.get $17 + if block $break|1 block $case10|1 block $case9|1 @@ -3835,44 +3832,44 @@ block $case1|1 block $case0|1 local.get $14 - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 10 i32.eq br_if $case0|1 - local.get $18 + local.get $19 i32.const 9 i32.eq br_if $case1|1 - local.get $18 + local.get $19 i32.const 8 i32.eq br_if $case2|1 - local.get $18 + local.get $19 i32.const 7 i32.eq br_if $case3|1 - local.get $18 + local.get $19 i32.const 6 i32.eq br_if $case4|1 - local.get $18 + local.get $19 i32.const 5 i32.eq br_if $case5|1 - local.get $18 + local.get $19 i32.const 4 i32.eq br_if $case6|1 - local.get $18 + local.get $19 i32.const 3 i32.eq br_if $case7|1 - local.get $18 + local.get $19 i32.const 2 i32.eq br_if $case8|1 - local.get $18 + local.get $19 i32.const 1 i32.eq br_if $case9|1 @@ -3881,7 +3878,7 @@ local.get $12 i32.const 1000000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000000 i32.rem_u @@ -3891,7 +3888,7 @@ local.get $12 i32.const 100000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000000 i32.rem_u @@ -3901,7 +3898,7 @@ local.get $12 i32.const 10000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000000 i32.rem_u @@ -3911,7 +3908,7 @@ local.get $12 i32.const 1000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000 i32.rem_u @@ -3921,7 +3918,7 @@ local.get $12 i32.const 100000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000 i32.rem_u @@ -3931,7 +3928,7 @@ local.get $12 i32.const 10000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000 i32.rem_u @@ -3941,7 +3938,7 @@ local.get $12 i32.const 1000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000 i32.rem_u @@ -3951,7 +3948,7 @@ local.get $12 i32.const 100 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100 i32.rem_u @@ -3961,7 +3958,7 @@ local.get $12 i32.const 10 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10 i32.rem_u @@ -3969,31 +3966,31 @@ br $break|1 end local.get $12 - local.set $17 + local.set $18 i32.const 0 local.set $12 br $break|1 end i32.const 0 - local.set $17 + local.set $18 br $break|1 end - local.get $17 + local.get $18 local.get $15 i32.or if local.get $0 local.get $15 - local.tee $18 + local.tee $19 i32.const 1 i32.add local.set $15 - local.get $18 + local.get $19 i32.const 1 i32.shl i32.add i32.const 48 - local.get $17 + local.get $18 i32.const 65535 i32.and i32.add @@ -4010,8 +4007,8 @@ i64.shl local.get $13 i64.add - local.set $19 - local.get $19 + local.set $20 + local.get $20 local.get $5 i64.le_u if @@ -4020,13 +4017,13 @@ i32.add global.set $~lib/util/number/_K local.get $0 - local.set $24 + local.set $25 local.get $15 - local.set $18 + local.set $19 local.get $5 + local.set $24 + local.get $20 local.set $23 - local.get $19 - local.set $22 local.get $16 local.get $14 i32.const 2 @@ -4036,228 +4033,230 @@ local.get $7 i64.extend_i32_s i64.shl - local.set $21 + local.set $22 local.get $10 - local.set $20 - local.get $24 - local.get $18 + local.set $21 + local.get $25 + local.get $19 i32.const 1 i32.sub i32.const 1 i32.shl i32.add - local.set $25 - local.get $25 - i32.load16_u local.set $26 - block $break|2 - loop $continue|2 + local.get $26 + i32.load16_u + local.set $27 + loop $while-continue|3 + local.get $23 + local.get $21 + i64.lt_u + if (result i32) + local.get $24 + local.get $23 + i64.sub + local.get $22 + i64.ge_u + else + i32.const 0 + end + if (result i32) + local.get $23 local.get $22 - local.get $20 + i64.add + local.get $21 i64.lt_u if (result i32) + i32.const 1 + else + local.get $21 local.get $23 - local.get $22 i64.sub - local.get $21 - i64.ge_u - else - i32.const 0 - end - if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 - i64.lt_u - if (result i32) - i32.const 1 - else - local.get $20 - local.get $22 - i64.sub - local.get $22 - local.get $21 - i64.add - local.get $20 - i64.sub - i64.gt_u - end - else - i32.const 0 + local.get $21 + i64.sub + i64.gt_u end - i32.eqz - br_if $break|2 - local.get $26 + else + i32.const 0 + end + local.set $28 + local.get $28 + if + local.get $27 i32.const 1 i32.sub - local.set $26 + local.set $27 + local.get $23 local.get $22 - local.get $21 i64.add - local.set $22 - br $continue|2 + local.set $23 + br $while-continue|3 end - unreachable end - local.get $25 local.get $26 + local.get $27 i32.store16 local.get $15 return end - br $continue|0 + br $while-continue|0 end - unreachable end - loop $continue|3 - local.get $13 - i64.const 10 - i64.mul - local.set $13 - local.get $5 - i64.const 10 - i64.mul - local.set $5 - local.get $13 - local.get $7 - i64.extend_i32_s - i64.shr_u - local.set $19 - local.get $19 - local.get $15 - i64.extend_i32_s - i64.or - i64.const 0 - i64.ne - if - local.get $0 - local.get $15 - local.tee $17 - i32.const 1 - i32.add - local.set $15 - local.get $17 - i32.const 1 - i32.shl - i32.add - i32.const 48 - local.get $19 - i32.wrap_i64 - i32.const 65535 - i32.and - i32.add - i32.store16 - end - local.get $13 - local.get $9 - i64.and - local.set $13 - local.get $14 + loop $while-continue|4 i32.const 1 - i32.sub - local.set $14 - local.get $13 - local.get $5 - i64.lt_u + local.set $17 + local.get $17 if - global.get $~lib/util/number/_K - local.get $14 - i32.add - global.set $~lib/util/number/_K - local.get $10 - local.get $16 - i32.const 0 - local.get $14 - i32.sub - i32.const 2 - i32.shl - i32.add - i64.load32_u + local.get $13 + i64.const 10 i64.mul - local.set $10 - local.get $0 - local.set $24 - local.get $15 - local.set $18 + local.set $13 local.get $5 - local.set $23 + i64.const 10 + i64.mul + local.set $5 local.get $13 - local.set $22 - local.get $8 - local.set $21 - local.get $10 - local.set $20 + local.get $7 + i64.extend_i32_s + i64.shr_u + local.set $24 local.get $24 - local.get $18 + local.get $15 + i64.extend_i32_s + i64.or + i64.const 0 + i64.ne + if + local.get $0 + local.get $15 + local.tee $27 + i32.const 1 + i32.add + local.set $15 + local.get $27 + i32.const 1 + i32.shl + i32.add + i32.const 48 + local.get $24 + i32.wrap_i64 + i32.const 65535 + i32.and + i32.add + i32.store16 + end + local.get $13 + local.get $9 + i64.and + local.set $13 + local.get $14 i32.const 1 i32.sub - i32.const 1 - i32.shl - i32.add - local.set $17 - local.get $17 - i32.load16_u - local.set $26 - block $break|4 - loop $continue|4 - local.get $22 - local.get $20 + local.set $14 + local.get $13 + local.get $5 + i64.lt_u + if + global.get $~lib/util/number/_K + local.get $14 + i32.add + global.set $~lib/util/number/_K + local.get $10 + local.get $16 + i32.const 0 + local.get $14 + i32.sub + i32.const 2 + i32.shl + i32.add + i64.load32_u + i64.mul + local.set $10 + local.get $0 + local.set $19 + local.get $15 + local.set $28 + local.get $5 + local.set $29 + local.get $13 + local.set $23 + local.get $8 + local.set $22 + local.get $10 + local.set $21 + local.get $19 + local.get $28 + i32.const 1 + i32.sub + i32.const 1 + i32.shl + i32.add + local.set $27 + local.get $27 + i32.load16_u + local.set $26 + loop $while-continue|6 + local.get $23 + local.get $21 i64.lt_u if (result i32) + local.get $29 local.get $23 - local.get $22 i64.sub - local.get $21 + local.get $22 i64.ge_u else i32.const 0 end if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.lt_u if (result i32) i32.const 1 else - local.get $20 - local.get $22 + local.get $21 + local.get $23 i64.sub + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.sub i64.gt_u end else i32.const 0 end - i32.eqz - br_if $break|4 - local.get $26 - i32.const 1 - i32.sub - local.set $26 - local.get $22 - local.get $21 - i64.add - local.set $22 - br $continue|4 + local.set $25 + local.get $25 + if + local.get $26 + i32.const 1 + i32.sub + local.set $26 + local.get $23 + local.get $22 + i64.add + local.set $23 + br $while-continue|6 + end end - unreachable + local.get $27 + local.get $26 + i32.store16 + local.get $15 + return end - local.get $17 - local.get $26 - i32.store16 - local.get $15 - return + br $while-continue|4 end - br $continue|3 end - unreachable + local.get $15 ) (func $~lib/util/number/prettify (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -4303,15 +4302,15 @@ i32.const 0 end if - block $break|0 - local.get $1 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + local.get $1 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -4323,9 +4322,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -4414,15 +4412,15 @@ i32.shl i32.or i32.store - block $break|1 - i32.const 2 - local.set $5 - loop $loop|1 - local.get $5 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 2 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $4 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 i32.const 1 @@ -4434,9 +4432,8 @@ i32.const 1 i32.add local.set $5 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $1 local.get $4 @@ -4453,30 +4450,30 @@ local.get $0 i32.const 4 i32.add - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - local.get $5 - i32.const 0 - i32.lt_s local.set $6 local.get $6 + i32.const 0 + i32.lt_s + local.set $4 + local.get $4 if i32.const 0 - local.get $5 + local.get $6 i32.sub - local.set $5 + local.set $6 end - local.get $5 + local.get $6 call $~lib/util/number/decimalCount32 i32.const 1 i32.add local.set $7 - local.get $4 - local.set $10 local.get $5 + local.set $10 + local.get $6 local.set $9 local.get $7 local.set $8 @@ -4484,10 +4481,10 @@ local.get $9 local.get $8 call $~lib/util/number/utoa32_lut - local.get $4 + local.get $5 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 local.get $7 @@ -4533,8 +4530,8 @@ local.get $8 i32.const 0 i32.lt_s - local.set $6 - local.get $6 + local.set $4 + local.get $4 if i32.const 0 local.get $8 @@ -4545,24 +4542,24 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.set $4 + local.set $5 local.get $9 local.set $11 local.get $8 - local.set $5 - local.get $4 + local.set $6 + local.get $5 local.set $10 local.get $11 - local.get $5 + local.get $6 local.get $10 call $~lib/util/number/utoa32_lut local.get $9 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 - local.get $4 + local.get $5 i32.add local.set $1 local.get $1 @@ -5235,7 +5232,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 global.get $resolve-ternary/b if (result i32) @@ -5256,7 +5253,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 global.get $resolve-ternary/b if (result i32) @@ -5277,7 +5274,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 global.get $resolve-ternary/b if (result i32) @@ -5302,7 +5299,7 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $start (; 48 ;) + (func $~start (; 48 ;) call $start:resolve-ternary ) (func $~lib/array/Array#__visit_impl (; 49 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/resolve-unary.optimized.wat b/tests/compiler/resolve-unary.optimized.wat index 3b8b0abc9c..2f8c559ea7 100644 --- a/tests/compiler/resolve-unary.optimized.wat +++ b/tests/compiler/resolve-unary.optimized.wat @@ -31,7 +31,7 @@ (global $resolve-unary/foo (mut i32) (i32.const 0)) (global $resolve-unary/bar (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/util/number/decimalCount32 (; 1 ;) (param $0 i32) (result i32) i32.const 1 i32.const 2 @@ -169,7 +169,7 @@ ) (func $~lib/util/number/utoa_simple (; 4 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -188,7 +188,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa32 (; 5 ;) (param $0 i32) (result i32) @@ -257,7 +257,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -278,20 +278,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -304,18 +302,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -637,7 +633,7 @@ unreachable end ) - (func $start (; 11 ;) + (func $~start (; 11 ;) call $start:resolve-unary ) ) diff --git a/tests/compiler/resolve-unary.untouched.wat b/tests/compiler/resolve-unary.untouched.wat index 131b765614..b188d61cc7 100644 --- a/tests/compiler/resolve-unary.untouched.wat +++ b/tests/compiler/resolve-unary.untouched.wat @@ -36,7 +36,7 @@ (global $resolve-unary/bar (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 984)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/util/number/decimalCount32 (; 1 ;) (param $0 i32) (result i32) (local $1 i32) local.get $0 @@ -216,50 +216,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 480 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -269,15 +272,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -286,30 +288,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -326,13 +328,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -342,13 +344,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -435,6 +437,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -469,15 +472,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -494,39 +497,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -537,17 +542,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 12 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -1250,7 +1254,7 @@ local.get $32 call $~lib/rt/stub/__release ) - (func $start (; 31 ;) + (func $~start (; 31 ;) call $start:resolve-unary ) ) diff --git a/tests/compiler/retain-i32.optimized.wat b/tests/compiler/retain-i32.optimized.wat index 2911aa407d..b27a25c7be 100644 --- a/tests/compiler/retain-i32.optimized.wat +++ b/tests/compiler/retain-i32.optimized.wat @@ -6,12 +6,12 @@ (global $retain-i32/ui (mut i32) (i32.const 0)) (global $retain-i32/ri (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:retain-i32 (; 0 ;) (local $0 i32) i32.const -128 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 255 i32.le_s @@ -20,7 +20,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -66,7 +66,7 @@ i32.load8_s drop ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:retain-i32 ) ) diff --git a/tests/compiler/retain-i32.untouched.wat b/tests/compiler/retain-i32.untouched.wat index c66e51bdbc..59e6f12e87 100644 --- a/tests/compiler/retain-i32.untouched.wat +++ b/tests/compiler/retain-i32.untouched.wat @@ -19,7 +19,7 @@ (global $retain-i32/ui (mut i32) (i32.const 0)) (global $retain-i32/ri (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $retain-i32/test (; 1 ;) (param $0 i32) (param $1 i32) local.get $0 local.get $1 @@ -338,6 +338,7 @@ ) (func $start:retain-i32 (; 3 ;) (local $0 i32) + (local $1 i32) i32.const 0 global.get $~lib/builtins/i8.MAX_VALUE call $retain-i32/test @@ -407,15 +408,15 @@ global.get $~lib/builtins/u8.MAX_VALUE global.get $~lib/builtins/u8.MAX_VALUE call $retain-i32/test - block $break|0 - global.get $~lib/builtins/i8.MIN_VALUE - local.set $0 - loop $loop|0 - local.get $0 - i32.const 255 - i32.le_s - i32.eqz - br_if $break|0 + global.get $~lib/builtins/i8.MIN_VALUE + local.set $0 + loop $for-loop|0 + local.get $0 + i32.const 255 + i32.le_s + local.set $1 + local.get $1 + if i32.const 0 local.get $0 call $retain-i32/test @@ -456,9 +457,8 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 127 i32.const 127 @@ -797,7 +797,7 @@ global.set $retain-i32/ri call $retain-i32/testLocalRetain ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:retain-i32 ) ) diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index 758551755d..381f7a97fa 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -35,7 +35,7 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -631,7 +631,7 @@ i32.const 2288 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -645,7 +645,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -665,14 +665,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 720 @@ -984,7 +984,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1043,14 +1043,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1062,12 +1062,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1086,7 +1086,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1496,7 +1496,7 @@ local.get $2 i32.sub local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 32 i32.ge_u @@ -1527,7 +1527,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -1627,7 +1627,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1653,10 +1653,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1677,11 +1677,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1702,7 +1702,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1714,7 +1714,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1735,10 +1735,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1754,11 +1754,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1772,7 +1772,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -2407,19 +2407,19 @@ call $~lib/rt/pure/__retain i32.const 3 call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $0 + local.tee $1 i32.const 0 i32.store offset=12 - local.get $0 + local.get $1 i32.const 3 i32.store offset=12 - local.get $0 + local.get $1 call $~lib/array/Array#push - local.get $0 + local.get $1 call $~lib/array/Array#push - local.get $0 + local.get $1 call $~lib/array/Array#pop - local.get $0 + local.get $1 call $~lib/rt/pure/__release i32.const 16 i32.const 5 @@ -2427,14 +2427,14 @@ call $~lib/rt/pure/__retain i32.const 0 call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $0 + local.tee $1 i32.const 0 i32.store offset=12 - local.get $0 + local.get $1 i32.const 0 i32.store offset=12 - loop $loop|0 - local.get $1 + loop $for-loop|0 + local.get $0 i32.const 10 i32.lt_s if @@ -2452,7 +2452,7 @@ i32.store offset=12 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 10 i32.lt_s @@ -2463,19 +2463,19 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $3 call $~lib/rt/pure/__release - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 - br $loop|0 + local.set $0 + br $for-loop|0 end end - local.get $0 + local.get $1 call $~lib/rt/pure/__release i32.const 528 i32.const 560 @@ -2490,10 +2490,10 @@ i32.const 6 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $0 + local.tee $1 i32.const 0 i32.store - local.get $0 + local.get $1 i32.const 4 i32.const 7 call $~lib/rt/tlsf/__alloc @@ -2502,110 +2502,107 @@ i32.const 0 i32.store local.get $3 - local.tee $4 - local.get $0 + local.tee $0 + local.get $1 i32.load - local.tee $1 + local.tee $2 i32.ne if - local.get $4 + local.get $0 call $~lib/rt/pure/__retain - local.set $4 - local.get $1 + local.set $0 + local.get $2 call $~lib/rt/pure/__release end - local.get $4 + local.get $0 i32.store local.get $3 - local.tee $1 - local.get $0 - local.tee $4 - i32.load local.tee $2 + local.get $1 + local.tee $0 + i32.load + local.tee $4 i32.ne if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 - local.get $1 - i32.store - local.get $3 - local.set $2 local.get $0 + local.get $2 + i32.store + local.get $1 local.get $3 + local.tee $2 i32.load - local.tee $1 + local.tee $4 i32.ne if - local.get $4 + local.get $0 call $~lib/rt/pure/__retain - local.set $4 - local.get $1 + local.set $0 + local.get $4 call $~lib/rt/pure/__release end local.get $2 - local.get $4 - i32.store local.get $0 - local.tee $1 + i32.store + local.get $1 + local.tee $0 local.get $2 i32.load local.tee $4 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $4 call $~lib/rt/pure/__release end local.get $2 - local.get $1 + local.get $0 i32.store - local.get $2 - local.set $4 local.get $3 - local.get $0 - local.tee $1 + local.get $1 + local.tee $0 i32.load - local.tee $2 + local.tee $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 call $~lib/rt/pure/__release end - local.get $1 - local.get $4 - i32.store local.get $0 + local.get $2 + i32.store + local.get $1 local.get $3 i32.load local.tee $2 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $2 call $~lib/rt/pure/__release end local.get $3 - local.get $1 - i32.store local.get $0 + i32.store + local.get $1 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release call $~lib/rt/pure/__collect ) - (func $start (; 42 ;) + (func $~start (; 42 ;) call $start:retain-release-sanity ) (func $~lib/rt/pure/__visit (; 43 ;) (param $0 i32) (param $1 i32) @@ -2723,7 +2720,7 @@ i32.shl i32.add local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $0 i32.lt_u @@ -2740,7 +2737,7 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end ) diff --git a/tests/compiler/retain-release-sanity.untouched.wat b/tests/compiler/retain-release-sanity.untouched.wat index 2818b35627..0ddb8646a5 100644 --- a/tests/compiler/retain-release-sanity.untouched.wat +++ b/tests/compiler/retain-release-sanity.untouched.wat @@ -40,7 +40,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 640)) (global $~lib/heap/__heap_base i32 (i32.const 708)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -760,6 +760,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -813,71 +815,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1266,34 +1266,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1302,23 +1303,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1327,11 +1328,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1343,21 +1344,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1365,39 +1365,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1709,6 +1707,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -1927,13 +1926,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -1960,9 +1959,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -2052,39 +2050,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2092,13 +2090,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2139,9 +2137,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2298,13 +2295,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2379,9 +2376,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2420,13 +2416,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2501,9 +2497,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2528,13 +2523,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2609,9 +2604,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3081,6 +3075,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3127,13 +3122,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3144,30 +3139,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3184,37 +3178,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3225,15 +3217,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3250,17 +3242,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3273,16 +3264,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3294,9 +3284,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -4134,6 +4123,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) i32.const 0 i32.const 3 call $~lib/array/Array#constructor @@ -4155,49 +4145,47 @@ i32.const 0 call $~lib/array/Array<~lib/array/Array<~lib/string/String>>#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 10 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 10 + i32.lt_s + local.set $2 + local.get $2 + if i32.const 0 i32.const 0 call $~lib/array/Array<~lib/string/String>#constructor - local.set $2 - block $break|1 - i32.const 0 - local.set $3 - loop $loop|1 + local.set $3 + i32.const 0 + local.set $4 + loop $for-loop|1 + local.get $4 + i32.const 10 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 - i32.const 10 - i32.lt_s - i32.eqz - br_if $break|1 - local.get $2 i32.const 512 call $~lib/array/Array<~lib/string/String>#push drop - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 - br $loop|1 + local.set $4 + br $for-loop|1 end - unreachable end - local.get $2 + local.get $3 call $~lib/rt/pure/__release local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -4231,19 +4219,19 @@ local.get $3 local.tee $1 local.get $2 - local.tee $0 + local.tee $5 local.get $1 i32.load - local.tee $4 + local.tee $0 i32.ne if - local.get $0 + local.get $5 call $~lib/rt/pure/__retain - local.set $0 - local.get $4 + local.set $5 + local.get $0 call $~lib/rt/pure/__release end - local.get $0 + local.get $5 i32.store local.get $3 local.tee $1 @@ -4251,13 +4239,13 @@ local.tee $4 local.get $1 i32.load - local.tee $0 + local.tee $5 i32.ne if local.get $4 call $~lib/rt/pure/__retain local.set $4 - local.get $0 + local.get $5 call $~lib/rt/pure/__release end local.get $4 @@ -4282,53 +4270,53 @@ local.get $2 local.tee $1 local.get $3 - local.tee $4 + local.tee $5 local.get $1 i32.load local.tee $0 i32.ne if - local.get $4 + local.get $5 call $~lib/rt/pure/__retain - local.set $4 + local.set $5 local.get $0 call $~lib/rt/pure/__release end - local.get $4 + local.get $5 i32.store local.get $3 local.tee $1 local.get $2 - local.tee $0 + local.tee $4 local.get $1 i32.load - local.tee $4 + local.tee $5 i32.ne if - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 local.get $4 + call $~lib/rt/pure/__retain + local.set $4 + local.get $5 call $~lib/rt/pure/__release end - local.get $0 + local.get $4 i32.store local.get $2 local.tee $1 local.get $3 - local.tee $4 + local.tee $0 local.get $1 i32.load - local.tee $0 + local.tee $4 i32.ne if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $4 call $~lib/rt/pure/__release end - local.get $4 + local.get $0 i32.store local.get $3 call $~lib/rt/pure/__release @@ -4336,7 +4324,7 @@ call $~lib/rt/pure/__release call $~lib/rt/pure/__collect ) - (func $start (; 48 ;) + (func $~start (; 48 ;) call $start:retain-release-sanity ) (func $~lib/array/Array#__visit_impl (; 49 ;) (param $0 i32) (param $1 i32) @@ -4476,6 +4464,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -4486,19 +4475,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -4506,15 +4495,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array<~lib/array/Array<~lib/string/String>>#__visit_impl (; 52 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -4525,19 +4514,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -4545,9 +4534,8 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/rt/__visit_members (; 53 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/retain-release.optimized.wat b/tests/compiler/retain-release.optimized.wat index 44a15c941e..8da75224ae 100644 --- a/tests/compiler/retain-release.optimized.wat +++ b/tests/compiler/retain-release.optimized.wat @@ -15,9 +15,10 @@ (global $retain-release/REF (mut i32) (i32.const 0)) (global $retain-release/glo (mut i32) (i32.const 0)) (global $retain-release/TARGET (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "returnRef" (func $retain-release/returnRef)) (export "receiveRef" (func $retain-release/receiveRef)) @@ -185,26 +186,26 @@ (func $retain-release/scopeForComplex (; 11 ;) (param $0 i32) (local $1 i32) (local $2 i32) - loop $loop|0 + loop $for-loop|0 local.get $0 if i32.const 0 local.set $1 - loop $loop|1 + loop $for-loop|1 local.get $0 if local.get $1 i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|1 end end local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end ) @@ -227,26 +228,26 @@ ) (func $retain-release/provideRefIndirect (; 14 ;) (param $0 i32) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-release/REF local.get $0 call_indirect (type $i32_=>_none) ) (func $retain-release/receiveRefIndirect (; 15 ;) (param $0 i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) drop ) - (func $start (; 16 ;) + (func $~start (; 16 ;) (local $0 i32) - global.get $~lib/started + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end i32.const 112 global.set $~lib/rt/stub/startOffset diff --git a/tests/compiler/retain-release.untouched.wat b/tests/compiler/retain-release.untouched.wat index 2913b644f7..6a7fbd0220 100644 --- a/tests/compiler/retain-release.untouched.wat +++ b/tests/compiler/retain-release.untouched.wat @@ -15,10 +15,11 @@ (global $retain-release/REF (mut i32) (i32.const 0)) (global $retain-release/glo (mut i32) (i32.const 0)) (global $retain-release/TARGET (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 100)) - (export "_start" (func $start)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "returnRef" (func $retain-release/returnRef)) (export "receiveRef" (func $retain-release/receiveRef)) @@ -495,48 +496,51 @@ ) (func $retain-release/scopeWhile (; 28 ;) (param $0 i32) (local $1 i32) - block $break|0 - loop $continue|0 - local.get $0 - i32.eqz - br_if $break|0 + (local $2 i32) + loop $while-continue|0 + local.get $0 + local.set $1 + local.get $1 + if global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $1 - local.get $1 + local.set $2 + local.get $2 call $~lib/rt/stub/__release - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $retain-release/scopeDo (; 29 ;) (param $0 i32) (local $1 i32) - loop $continue|0 + (local $2 i32) + loop $do-continue|0 global.get $retain-release/REF call $~lib/rt/stub/__retain local.set $1 local.get $1 call $~lib/rt/stub/__release local.get $0 - br_if $continue|0 + local.set $2 + local.get $2 + br_if $do-continue|0 end ) (func $retain-release/scopeFor (; 30 ;) (param $0 i32) (local $1 i32) - block $break|0 - loop $loop|0 - local.get $0 - i32.eqz - br_if $break|0 + (local $2 i32) + loop $for-loop|0 + local.get $0 + local.set $1 + local.get $1 + if global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $1 - local.get $1 + local.set $2 + local.get $2 call $~lib/rt/stub/__release - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $retain-release/scopeForComplex (; 31 ;) (param $0 i32) @@ -545,184 +549,197 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $0 - i32.eqz - br_if $break|0 + (local $6 i32) + (local $7 i32) + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $0 + local.set $2 + local.get $2 + if global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $2 - block $break|1 - i32.const 0 - local.set $3 - loop $loop|1 - local.get $0 - i32.eqz - br_if $break|1 - block $continue|1 + local.set $3 + i32.const 0 + local.set $4 + loop $for-loop|1 + local.get $0 + local.set $5 + local.get $5 + if + block $for-continue|1 global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $4 + local.set $6 local.get $0 if global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $5 - local.get $5 + local.set $7 + local.get $7 call $~lib/rt/stub/__release - local.get $4 + local.get $6 call $~lib/rt/stub/__release - br $continue|1 + br $for-continue|1 end - local.get $4 + local.get $6 call $~lib/rt/stub/__release end - local.get $3 + local.get $4 i32.const 1 i32.add - local.set $3 - br $loop|1 + local.set $4 + br $for-loop|1 end - unreachable end - local.get $2 + local.get $3 call $~lib/rt/stub/__release local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $retain-release/scopeBreak (; 32 ;) (param $0 i32) - (local $1 i32) - block $break|0 - local.get $0 - i32.eqz - br_if $break|0 - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - call $~lib/rt/stub/__release - br $break|0 - end - ) - (func $retain-release/scopeBreakNested (; 33 ;) (param $0 i32) (local $1 i32) (local $2 i32) - block $break|0 - loop $continue|0 + block $while-break|0 + loop $while-continue|0 local.get $0 - i32.eqz - br_if $break|0 - global.get $retain-release/REF - call $~lib/rt/stub/__retain local.set $1 - block $break|1 - local.get $0 - i32.eqz - br_if $break|1 + local.get $1 + if global.get $retain-release/REF call $~lib/rt/stub/__retain local.set $2 local.get $2 call $~lib/rt/stub/__release - br $break|1 + br $while-break|0 end - local.get $1 + end + end + ) + (func $retain-release/scopeBreakNested (; 33 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + loop $while-continue|0 + local.get $0 + local.set $1 + local.get $1 + if + global.get $retain-release/REF + call $~lib/rt/stub/__retain + local.set $2 + block $while-break|1 + loop $while-continue|1 + local.get $0 + local.set $3 + local.get $3 + if + global.get $retain-release/REF + call $~lib/rt/stub/__retain + local.set $4 + local.get $4 + call $~lib/rt/stub/__release + br $while-break|1 + end + end + end + local.get $2 call $~lib/rt/stub/__release - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $retain-release/scopeContinue (; 34 ;) (param $0 i32) (local $1 i32) - block $break|0 - loop $continue|0 - local.get $0 - i32.eqz - br_if $break|0 + (local $2 i32) + loop $while-continue|0 + local.get $0 + local.set $1 + local.get $1 + if global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $1 - local.get $1 + local.set $2 + local.get $2 call $~lib/rt/stub/__release - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $retain-release/scopeContinueNested (; 35 ;) (param $0 i32) (local $1 i32) (local $2 i32) - block $break|0 - loop $continue|0 - local.get $0 - i32.eqz - br_if $break|0 + (local $3 i32) + (local $4 i32) + loop $while-continue|0 + local.get $0 + local.set $1 + local.get $1 + if global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $1 - block $break|1 - loop $continue|1 - local.get $0 - i32.eqz - br_if $break|1 + local.set $2 + loop $while-continue|1 + local.get $0 + local.set $3 + local.get $3 + if global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $2 - local.get $2 + local.set $4 + local.get $4 call $~lib/rt/stub/__release - br $continue|1 + br $while-continue|1 end - unreachable end - local.get $1 + local.get $2 call $~lib/rt/stub/__release - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $retain-release/scopeThrow (; 36 ;) (param $0 i32) (local $1 i32) - block $break|0 + (local $2 i32) + loop $while-continue|0 local.get $0 - i32.eqz - br_if $break|0 - global.get $retain-release/REF - call $~lib/rt/stub/__retain local.set $1 local.get $1 - call $~lib/rt/stub/__release - i32.const 32 - i32.const 64 - i32.const 367 - i32.const 4 - call $~lib/builtins/abort - unreachable + if + global.get $retain-release/REF + call $~lib/rt/stub/__retain + local.set $2 + local.get $2 + call $~lib/rt/stub/__release + i32.const 32 + i32.const 64 + i32.const 367 + i32.const 4 + call $~lib/builtins/abort + unreachable + end end ) (func $retain-release/scopeUnreachable (; 37 ;) (param $0 i32) (local $1 i32) - block $break|0 - loop $continue|0 - local.get $0 - i32.eqz - br_if $break|0 + (local $2 i32) + loop $while-continue|0 + local.get $0 + local.set $1 + local.get $1 + if global.get $retain-release/REF call $~lib/rt/stub/__retain - local.set $1 + local.set $2 unreachable end - unreachable end ) (func $retain-release/callInline (; 38 ;) @@ -758,7 +775,7 @@ ) (func $retain-release/provideRefIndirect (; 42 ;) (param $0 i32) i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-release/REF local.get $0 call_indirect (type $i32_=>_none) @@ -766,7 +783,7 @@ (func $retain-release/receiveRefIndirect (; 43 ;) (param $0 i32) (local $1 i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) local.tee $1 @@ -777,18 +794,18 @@ ) (func $retain-release/receiveRefIndirectDrop (; 44 ;) (param $0 i32) i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call_indirect (type $none_=>_i32) call $~lib/rt/stub/__release ) - (func $start (; 45 ;) - global.get $~lib/started + (func $~start (; 45 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:retain-release ) diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index 4f20356eb5..9ebd37b214 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -21,9 +21,10 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $retain-return/ref (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/tlsf/removeBlock (; 1 ;) (param $0 i32) (param $1 i32) (local $2 i32) @@ -620,7 +621,7 @@ i32.const 1904 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -634,7 +635,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -654,14 +655,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 336 @@ -971,7 +972,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1030,14 +1031,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1049,12 +1050,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1073,7 +1074,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1405,7 +1406,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1431,10 +1432,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1455,11 +1456,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1480,7 +1481,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1492,7 +1493,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1513,10 +1514,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1532,11 +1533,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1550,7 +1551,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1751,41 +1752,41 @@ call $retain-return/Ref#constructor global.set $retain-return/ref i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength call $retain-return/Ref#constructor call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength call $retain-return/Ref#constructor call $~lib/rt/pure/__release i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength call $retain-return/Ref#constructor call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength call $retain-return/Ref#constructor call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength call $retain-return/Ref#constructor call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength call $retain-return/Ref#constructor call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/ref local.tee $0 if @@ -1795,13 +1796,13 @@ i32.const 0 global.set $retain-return/ref ) - (func $start (; 28 ;) - global.get $~lib/started + (func $~start (; 28 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:retain-return ) diff --git a/tests/compiler/retain-return.untouched.wat b/tests/compiler/retain-return.untouched.wat index 701b17c923..a948bf28ef 100644 --- a/tests/compiler/retain-return.untouched.wat +++ b/tests/compiler/retain-return.untouched.wat @@ -27,16 +27,17 @@ (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $retain-return/ref (mut i32) (i32.const 0)) (global $retain-return/returnNewFnExpr (mut i32) (i32.const 1)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $retain-return/returnLocalFnExpr (mut i32) (i32.const 2)) (global $retain-return/returnGlobalFnExpr (mut i32) (i32.const 3)) (global $retain-return/returnNewFnBlock (mut i32) (i32.const 4)) (global $retain-return/returnLocalFnBlock (mut i32) (i32.const 5)) (global $retain-return/returnGlobalFnBlock (mut i32) (i32.const 6)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 288)) (global $~lib/heap/__heap_base i32 (i32.const 324)) - (export "_start" (func $start)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/tlsf/removeBlock (; 1 ;) (param $0 i32) (param $1 i32) (local $2 i32) @@ -757,6 +758,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -810,71 +813,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1261,34 +1262,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1297,23 +1299,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1322,11 +1324,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1338,21 +1340,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1360,39 +1361,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1795,39 +1794,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1835,13 +1834,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1882,9 +1881,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2041,13 +2039,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2122,9 +2120,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2163,13 +2160,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2244,9 +2241,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2271,13 +2267,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2352,9 +2348,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2824,6 +2819,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2870,13 +2866,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2887,30 +2883,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2927,37 +2922,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2968,15 +2961,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2993,17 +2986,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3016,16 +3008,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3037,9 +3028,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3313,64 +3303,64 @@ call $retain-return/returnGlobal call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnNewFnExpr call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnNewFnExpr call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/ref global.get $retain-return/returnLocalFnExpr call_indirect (type $i32_=>_i32) call $~lib/rt/pure/__release i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/ref global.get $retain-return/returnLocalFnExpr call_indirect (type $i32_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnGlobalFnExpr call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnGlobalFnExpr call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnNewFnBlock call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnNewFnBlock call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnLocalFnBlock call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnLocalFnBlock call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnGlobalFnBlock call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength global.get $retain-return/returnGlobalFnBlock call_indirect (type $none_=>_i32) call $~lib/rt/pure/__release @@ -3389,13 +3379,13 @@ local.get $0 global.set $retain-return/ref ) - (func $start (; 38 ;) - global.get $~lib/started + (func $~start (; 38 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:retain-return ) diff --git a/tests/compiler/rt/flags.optimized.wat b/tests/compiler/rt/flags.optimized.wat index 4e5360b881..c734ebc185 100644 --- a/tests/compiler/rt/flags.optimized.wat +++ b/tests/compiler/rt/flags.optimized.wat @@ -13,7 +13,7 @@ (data (i32.const 684) "\88\04A") (data (i32.const 700) "\88 \t\00\00\00\00\00\10\00\00\00\00\00\00\00\10") (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/__typeinfo (; 1 ;) (param $0 i32) (result i32) local.get $0 i32.const 176 @@ -40,403 +40,285 @@ call $~lib/rt/__typeinfo i32.const 1073 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 4 call $~lib/rt/__typeinfo i32.const 49 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 5 call $~lib/rt/__typeinfo i32.const 49 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 6 call $~lib/rt/__typeinfo i32.const 1105 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 7 call $~lib/rt/__typeinfo i32.const 81 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 8 call $~lib/rt/__typeinfo i32.const 1169 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 9 call $~lib/rt/__typeinfo i32.const 145 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 10 call $~lib/rt/__typeinfo i32.const 1297 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 11 call $~lib/rt/__typeinfo i32.const 273 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 12 call $~lib/rt/__typeinfo i32.const 3217 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 13 call $~lib/rt/__typeinfo i32.const 3345 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 14 call $~lib/rt/__typeinfo i32.const 1075 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 15 call $~lib/rt/__typeinfo i32.const 51 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 16 call $~lib/rt/__typeinfo i32.const 1107 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 17 call $~lib/rt/__typeinfo i32.const 83 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 18 call $~lib/rt/__typeinfo i32.const 1171 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 19 call $~lib/rt/__typeinfo i32.const 147 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 20 call $~lib/rt/__typeinfo i32.const 1299 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 21 call $~lib/rt/__typeinfo i32.const 275 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 22 call $~lib/rt/__typeinfo i32.const 3219 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 23 call $~lib/rt/__typeinfo i32.const 3347 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 24 call $~lib/rt/__typeinfo i32.const 531 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 26 call $~lib/rt/__typeinfo i32.const 8339 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 27 call $~lib/rt/__typeinfo i32.const 12435 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 28 call $~lib/rt/__typeinfo i32.const 1076 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 29 call $~lib/rt/__typeinfo i32.const 52 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 30 call $~lib/rt/__typeinfo i32.const 1108 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 31 call $~lib/rt/__typeinfo i32.const 84 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 32 call $~lib/rt/__typeinfo i32.const 1172 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 33 call $~lib/rt/__typeinfo i32.const 148 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 34 call $~lib/rt/__typeinfo i32.const 1300 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 35 call $~lib/rt/__typeinfo i32.const 276 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 36 call $~lib/rt/__typeinfo i32.const 3220 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 37 call $~lib/rt/__typeinfo i32.const 3348 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 38 call $~lib/rt/__typeinfo i32.const 532 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 39 call $~lib/rt/__typeinfo i32.const 8340 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 40 call $~lib/rt/__typeinfo i32.const 12436 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 41 call $~lib/rt/__typeinfo i32.const 263224 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 42 call $~lib/rt/__typeinfo i32.const 656472 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 43 call $~lib/rt/__typeinfo i32.const 591000 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 44 call $~lib/rt/__typeinfo i32.const 558360 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 45 call $~lib/rt/__typeinfo i32.const 541208 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 46 call $~lib/rt/__typeinfo i32.const 4260920 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 47 call $~lib/rt/__typeinfo i32.const 6358072 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 48 call $~lib/rt/__typeinfo i32.const 549016 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 49 call $~lib/rt/__typeinfo i32.const 553112 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 50 call $~lib/rt/__typeinfo i32.const 6369432 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 51 call $~lib/rt/__typeinfo i32.const 1639576 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 52 call $~lib/rt/__typeinfo i32.const 16 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 53 call $~lib/rt/__typeinfo - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 54 call $~lib/rt/__typeinfo - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 56 call $~lib/rt/__typeinfo - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 58 call $~lib/rt/__typeinfo i32.const 16 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 59 call $~lib/rt/__typeinfo - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 61 call $~lib/rt/__typeinfo i32.const 16 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 62 call $~lib/rt/__typeinfo - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 64 call $~lib/rt/__typeinfo - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 66 call $~lib/rt/__typeinfo i32.const 16 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 i32.const 67 call $~lib/rt/__typeinfo i32.const 16 i32.ne - if - br $folding-inner0 - end + br_if $folding-inner0 return end i32.const 0 @@ -446,7 +328,7 @@ call $~lib/builtins/abort unreachable ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:rt/flags ) ) diff --git a/tests/compiler/rt/flags.untouched.wat b/tests/compiler/rt/flags.untouched.wat index cc5bbfb02f..aa772e7d7b 100644 --- a/tests/compiler/rt/flags.untouched.wat +++ b/tests/compiler/rt/flags.untouched.wat @@ -14,7 +14,7 @@ (global $rt/flags/KEY_ALIGN_REF i32 (i32.const 65536)) (global $~lib/rt/__rtti_base i32 (i32.const 176)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/__typeinfo (; 1 ;) (param $0 i32) (result i32) (local $1 i32) global.get $~lib/rt/__rtti_base @@ -1395,7 +1395,7 @@ i32.const 16 call $rt/flags/test ) - (func $start (; 62 ;) + (func $~start (; 62 ;) call $start:rt/flags ) ) diff --git a/tests/compiler/rt/instanceof.optimized.wat b/tests/compiler/rt/instanceof.optimized.wat index 3aa17391d5..96e3cb1e35 100644 --- a/tests/compiler/rt/instanceof.optimized.wat +++ b/tests/compiler/rt/instanceof.optimized.wat @@ -17,8 +17,8 @@ (global $rt/instanceof/nullableAnimal (mut i32) (i32.const 0)) (global $rt/instanceof/nullableCat (mut i32) (i32.const 0)) (global $rt/instanceof/nullableBlackcat (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) @@ -125,7 +125,7 @@ i32.load i32.le_u if - loop $continue|0 + loop $do-continue|0 local.get $0 local.get $1 i32.eq @@ -140,7 +140,7 @@ i32.add i32.load offset=4 local.tee $0 - br_if $continue|0 + br_if $do-continue|0 end end i32.const 0 @@ -408,13 +408,13 @@ unreachable end ) - (func $start (; 8 ;) - global.get $~lib/started + (func $~start (; 8 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:rt/instanceof ) diff --git a/tests/compiler/rt/instanceof.untouched.wat b/tests/compiler/rt/instanceof.untouched.wat index c13b0ba7aa..74c87d9867 100644 --- a/tests/compiler/rt/instanceof.untouched.wat +++ b/tests/compiler/rt/instanceof.untouched.wat @@ -20,10 +20,10 @@ (global $rt/instanceof/nullAnimal (mut i32) (i32.const 0)) (global $rt/instanceof/nullCat (mut i32) (i32.const 0)) (global $rt/instanceof/nullBlackcat (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 64)) (global $~lib/heap/__heap_base i32 (i32.const 116)) - (export "_start" (func $start)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) @@ -180,6 +180,7 @@ (func $~lib/rt/__instanceof (; 7 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + (local $4 i32) local.get $0 i32.const 16 i32.sub @@ -192,7 +193,7 @@ i32.load i32.le_u if - loop $continue|0 + loop $do-continue|0 local.get $2 local.get $1 i32.eq @@ -209,7 +210,9 @@ i32.add i32.load offset=4 local.tee $2 - br_if $continue|0 + local.set $4 + local.get $4 + br_if $do-continue|0 end end i32.const 0 @@ -674,13 +677,13 @@ unreachable end ) - (func $start (; 9 ;) - global.get $~lib/started + (func $~start (; 9 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:rt/instanceof ) diff --git a/tests/compiler/rt/stub-realloc.optimized.wat b/tests/compiler/rt/stub-realloc.optimized.wat index 468bf7f9b7..5a7324aad9 100644 --- a/tests/compiler/rt/stub-realloc.optimized.wat +++ b/tests/compiler/rt/stub-realloc.optimized.wat @@ -15,9 +15,9 @@ (global $rt/stub-realloc/ptr (mut i32) (i32.const 0)) (global $rt/stub-realloc/originalPtr (mut i32) (i32.const 0)) (global $rt/stub-realloc/newLastPtr (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 128)) - (export "_start" (func $start)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/stub/__alloc)) (export "__retain" (func $~lib/rt/stub/__retain)) @@ -147,7 +147,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -173,10 +173,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -197,11 +197,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -222,7 +222,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -234,7 +234,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -255,10 +255,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -274,11 +274,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -292,7 +292,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -587,13 +587,13 @@ unreachable end ) - (func $start (; 11 ;) - global.get $~lib/started + (func $~start (; 11 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end i32.const 160 global.set $~lib/rt/stub/startOffset diff --git a/tests/compiler/rt/stub-realloc.untouched.wat b/tests/compiler/rt/stub-realloc.untouched.wat index 070098ae69..6d325d96b2 100644 --- a/tests/compiler/rt/stub-realloc.untouched.wat +++ b/tests/compiler/rt/stub-realloc.untouched.wat @@ -17,10 +17,10 @@ (global $rt/stub-realloc/originalPtr (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $rt/stub-realloc/newLastPtr (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 128)) (global $~lib/heap/__heap_base i32 (i32.const 156)) - (export "_start" (func $start)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/stub/__alloc)) (export "__retain" (func $~lib/rt/stub/__retain)) @@ -152,39 +152,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -192,13 +192,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -239,9 +239,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -398,13 +397,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -479,9 +478,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -520,13 +518,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -601,9 +599,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -628,13 +625,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -709,9 +706,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -1181,6 +1177,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -1227,13 +1224,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1244,30 +1241,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -1284,37 +1280,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -1325,15 +1319,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1350,17 +1344,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -1373,16 +1366,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -1394,9 +1386,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -1718,13 +1709,13 @@ unreachable end ) - (func $start (; 12 ;) - global.get $~lib/started + (func $~start (; 12 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end global.get $~lib/heap/__heap_base i32.const 15 diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index 44e37a68ae..a6086eecb0 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -622,7 +622,7 @@ i32.const 1888 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -636,7 +636,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -656,14 +656,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 320 @@ -973,7 +973,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1032,14 +1032,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1051,12 +1051,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1075,7 +1075,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1401,7 +1401,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1427,10 +1427,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1451,11 +1451,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1476,7 +1476,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1488,7 +1488,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1509,10 +1509,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1528,11 +1528,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1546,7 +1546,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end diff --git a/tests/compiler/runtime-full.untouched.wat b/tests/compiler/runtime-full.untouched.wat index 19b6b64ed4..ec352a486f 100644 --- a/tests/compiler/runtime-full.untouched.wat +++ b/tests/compiler/runtime-full.untouched.wat @@ -751,6 +751,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -804,71 +806,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1255,34 +1255,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1291,23 +1292,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1316,11 +1317,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1332,21 +1333,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1354,39 +1354,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1773,39 +1771,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1813,13 +1811,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1860,9 +1858,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2019,13 +2016,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2100,9 +2097,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2141,13 +2137,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2222,9 +2218,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2249,13 +2244,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2330,9 +2325,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2802,6 +2796,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2848,13 +2843,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2865,30 +2860,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2905,37 +2899,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2946,15 +2938,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2971,17 +2963,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -2994,16 +2985,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3015,9 +3005,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end diff --git a/tests/compiler/runtime-stub.optimized.wat b/tests/compiler/runtime-stub.optimized.wat index f791ad25de..4647e2d833 100644 --- a/tests/compiler/runtime-stub.optimized.wat +++ b/tests/compiler/runtime-stub.optimized.wat @@ -15,7 +15,7 @@ (export "__collect" (func $~lib/rt/stub/__collect)) (export "__reset" (func $~lib/rt/stub/__reset)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -116,7 +116,7 @@ global.get $~lib/rt/stub/startOffset global.set $~lib/rt/stub/offset ) - (func $start (; 6 ;) + (func $~start (; 6 ;) i32.const 48 global.set $~lib/rt/stub/startOffset i32.const 48 diff --git a/tests/compiler/runtime-stub.untouched.wat b/tests/compiler/runtime-stub.untouched.wat index 8ce1ed926a..75c880414a 100644 --- a/tests/compiler/runtime-stub.untouched.wat +++ b/tests/compiler/runtime-stub.untouched.wat @@ -17,7 +17,7 @@ (export "__collect" (func $~lib/rt/stub/__collect)) (export "__reset" (func $~lib/rt/stub/__reset)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -138,7 +138,7 @@ global.get $~lib/rt/stub/startOffset global.set $~lib/rt/stub/offset ) - (func $start (; 6 ;) + (func $~start (; 6 ;) global.get $~lib/heap/__heap_base i32.const 15 i32.add diff --git a/tests/compiler/scoped.optimized.wat b/tests/compiler/scoped.optimized.wat index d89d89c35e..9d34a26fd3 100644 --- a/tests/compiler/scoped.optimized.wat +++ b/tests/compiler/scoped.optimized.wat @@ -2,10 +2,10 @@ (type $none_=>_none (func)) (memory $0 0) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:scoped (; 0 ;) (local $0 i32) - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 1 i32.lt_s @@ -14,12 +14,12 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i32.const 1 i32.lt_s @@ -28,11 +28,11 @@ i32.const 1 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:scoped ) ) diff --git a/tests/compiler/scoped.untouched.wat b/tests/compiler/scoped.untouched.wat index 1c7075b075..8880780146 100644 --- a/tests/compiler/scoped.untouched.wat +++ b/tests/compiler/scoped.untouched.wat @@ -7,7 +7,7 @@ (global $scoped/aConstant i32 (i32.const 3)) (global $scoped/aStartFunctionLocal (mut i32) (i32.const 2)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $scoped/fn (; 0 ;) (param $0 i32) (local $1 i32) i32.const 0 @@ -18,53 +18,52 @@ (func $start:scoped (; 1 ;) (local $0 i32) (local $1 i32) - (local $2 i64) - (local $3 f32) - block $break|0 - i32.const 0 - local.set $0 - loop $loop|0 - local.get $0 - i32.const 1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $2 i32) + (local $3 i64) + (local $4 f32) + i32.const 0 + local.set $0 + loop $for-loop|0 + local.get $0 + i32.const 1 + i32.lt_s + local.set $1 + local.get $1 + if nop local.get $0 i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end - unreachable end - block $break|1 - i32.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 1 + i32.lt_s + local.set $2 + local.get $2 + if local.get $1 drop local.get $1 i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end i64.const 5 - local.set $2 - f32.const 10 local.set $3 + f32.const 10 + local.set $4 i32.const 42 call $scoped/fn ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:scoped ) ) diff --git a/tests/compiler/static-this.untouched.wat b/tests/compiler/static-this.untouched.wat index ecf4ae1648..0bf6583a39 100644 --- a/tests/compiler/static-this.untouched.wat +++ b/tests/compiler/static-this.untouched.wat @@ -8,7 +8,7 @@ (table $0 1 funcref) (global $static-this/Foo.bar (mut i32) (i32.const 42)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $static-this/Foo.getBar (; 1 ;) (result i32) global.get $static-this/Foo.bar ) @@ -26,7 +26,7 @@ unreachable end ) - (func $start (; 3 ;) + (func $~start (; 3 ;) call $start:static-this ) ) diff --git a/tests/compiler/std/array-access.optimized.wat b/tests/compiler/std/array-access.optimized.wat index 3fbdb0e3c1..6aaa67dcd0 100644 --- a/tests/compiler/std/array-access.optimized.wat +++ b/tests/compiler/std/array-access.optimized.wat @@ -107,7 +107,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $1 i64.load local.get $3 @@ -128,20 +128,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $0 - i32.const 1 - i32.sub - local.set $2 - local.get $0 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $0 + i32.const 1 + i32.sub + local.set $2 + local.get $0 + if local.get $1 i32.load16_u local.tee $0 @@ -154,18 +152,16 @@ local.get $4 i32.sub return - else - local.get $1 - i32.const 2 - i32.add - local.set $1 - local.get $3 - i32.const 2 - i32.add - local.set $3 - br $continue|1 end - unreachable + local.get $1 + i32.const 2 + i32.add + local.set $1 + local.get $3 + i32.const 2 + i32.add + local.set $3 + br $while-continue|1 end end i32.const 0 diff --git a/tests/compiler/std/array-access.untouched.wat b/tests/compiler/std/array-access.untouched.wat index 9cb2a85abe..82898f2501 100644 --- a/tests/compiler/std/array-access.untouched.wat +++ b/tests/compiler/std/array-access.untouched.wat @@ -190,6 +190,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -224,15 +225,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -249,39 +250,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -292,17 +295,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String#startsWith (; 13 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index 74f6507330..d9f48e614e 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -7,6 +7,7 @@ (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -38,7 +39,7 @@ (global $std/array-literal/dynamicArrayRefWithCtor (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/array/Array#__get (; 5 ;) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 @@ -674,7 +675,7 @@ i32.const 2224 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -688,7 +689,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -708,14 +709,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 656 @@ -1027,7 +1028,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1086,14 +1087,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1105,12 +1106,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1129,7 +1130,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1439,7 +1440,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1465,10 +1466,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1489,11 +1490,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1514,7 +1515,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1526,7 +1527,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1547,10 +1548,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1566,11 +1567,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1584,37 +1585,37 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end end ) - (func $~lib/rt/__allocArray (; 26 ;) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/rt/__allocArray (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) i32.const 16 - local.get $1 + local.get $2 call $~lib/rt/tlsf/__alloc - local.tee $1 - i32.const 3 + local.tee $2 local.get $0 + local.get $1 i32.shl - local.tee $0 + local.tee $1 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $3 call $~lib/rt/pure/__retain i32.store - local.get $1 local.get $2 + local.get $3 i32.store offset=4 + local.get $2 local.get $1 - local.get $0 i32.store offset=8 - local.get $1 - i32.const 3 + local.get $2 + local.get $0 i32.store offset=12 - local.get $1 + local.get $2 ) (func $std/array-literal/Ref#constructor (; 27 ;) (result i32) i32.const 0 @@ -1848,6 +1849,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) i32.const 76 i32.load i32.const 3 @@ -1956,9 +1958,11 @@ call $~lib/builtins/abort unreachable end + i32.const 3 i32.const 0 i32.const 3 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 i32.load offset=4 local.tee $0 @@ -1979,7 +1983,6 @@ global.get $std/array-literal/i i32.store8 offset=2 local.get $1 - call $~lib/rt/pure/__retain global.set $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8 i32.load offset=12 @@ -2032,9 +2035,11 @@ end i32.const 0 global.set $std/array-literal/i + i32.const 3 i32.const 2 i32.const 4 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 i32.load offset=4 local.tee $0 @@ -2055,7 +2060,6 @@ global.get $std/array-literal/i i32.store offset=8 local.get $1 - call $~lib/rt/pure/__retain global.set $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32 i32.load offset=12 @@ -2106,9 +2110,11 @@ call $~lib/builtins/abort unreachable end + i32.const 3 i32.const 2 i32.const 6 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 i32.load offset=4 local.tee $0 @@ -2127,7 +2133,6 @@ call $~lib/rt/pure/__retain i32.store offset=8 local.get $1 - call $~lib/rt/pure/__retain global.set $std/array-literal/dynamicArrayRef global.get $std/array-literal/dynamicArrayRef i32.load offset=12 @@ -2141,9 +2146,11 @@ call $~lib/builtins/abort unreachable end + i32.const 3 i32.const 2 i32.const 8 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 i32.load offset=4 local.tee $0 @@ -2162,7 +2169,6 @@ call $~lib/rt/pure/__retain i32.store offset=8 local.get $1 - call $~lib/rt/pure/__retain global.set $std/array-literal/dynamicArrayRefWithCtor global.get $std/array-literal/dynamicArrayRefWithCtor i32.load offset=12 @@ -2184,6 +2190,21 @@ call $~lib/rt/pure/__release global.get $std/array-literal/dynamicArrayRefWithCtor call $~lib/rt/pure/__release + i32.const 1 + i32.const 2 + i32.const 6 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain + local.tee $1 + i32.load offset=4 + call $std/array-literal/Ref#constructor + local.tee $7 + call $~lib/rt/pure/__retain + i32.store + local.get $7 + call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 @@ -2197,7 +2218,7 @@ local.get $0 call $~lib/rt/pure/__release ) - (func $start (; 36 ;) + (func $~start (; 36 ;) call $start:std/array-literal ) (func $~lib/rt/pure/__visit (; 37 ;) (param $0 i32) (param $1 i32) @@ -2315,7 +2336,7 @@ i32.shl i32.add local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $0 i32.lt_u @@ -2332,7 +2353,7 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end ) diff --git a/tests/compiler/std/array-literal.ts b/tests/compiler/std/array-literal.ts index f7ddcb3bb7..5d85019d68 100644 --- a/tests/compiler/std/array-literal.ts +++ b/tests/compiler/std/array-literal.ts @@ -43,3 +43,9 @@ __release(changetype(dynamicArrayI8)); __release(changetype(dynamicArrayI32)); __release(changetype(dynamicArrayRef)); __release(changetype(dynamicArrayRefWithCtor)); + +// Make sure unassigned literals don't +function doesntLeak(refs: Ref[]): void {} +{ + doesntLeak([ new Ref() ]); +} diff --git a/tests/compiler/std/array-literal.untouched.wat b/tests/compiler/std/array-literal.untouched.wat index e2a72c9367..44da5ed355 100644 --- a/tests/compiler/std/array-literal.untouched.wat +++ b/tests/compiler/std/array-literal.untouched.wat @@ -48,7 +48,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 576)) (global $~lib/heap/__heap_base i32 (i32.const 652)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/array/Array#get:length (; 5 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 @@ -834,6 +834,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -887,71 +889,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1340,34 +1340,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1376,23 +1377,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1401,11 +1402,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1417,21 +1418,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1439,39 +1439,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1837,39 +1835,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1877,13 +1875,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1924,9 +1922,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2083,13 +2080,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2164,9 +2161,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2205,13 +2201,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2286,9 +2282,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2313,13 +2308,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2394,9 +2389,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2866,6 +2860,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2912,13 +2907,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2929,30 +2924,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2969,37 +2963,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3010,15 +3002,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3035,17 +3027,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3058,16 +3049,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3079,9 +3069,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3401,7 +3390,14 @@ call $~lib/rt/pure/decrement end ) - (func $start:std/array-literal (; 42 ;) + (func $std/array-literal/doesntLeak (; 42 ;) (param $0 i32) + local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + ) + (func $start:std/array-literal (; 43 ;) (local $0 i32) (local $1 i32) (local $2 i32) @@ -3410,6 +3406,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) i32.const 64 call $~lib/array/Array#get:length i32.const 3 @@ -3538,6 +3535,7 @@ i32.const 3 i32.const 0 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 @@ -3560,7 +3558,6 @@ global.get $std/array-literal/i i32.store8 offset=2 local.get $1 - call $~lib/rt/pure/__retain global.set $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8 call $~lib/array/Array#get:length @@ -3624,6 +3621,7 @@ i32.const 4 i32.const 0 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $0 local.get $0 i32.load offset=4 @@ -3646,7 +3644,6 @@ global.get $std/array-literal/i i32.store offset=8 local.get $0 - call $~lib/rt/pure/__retain global.set $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32 call $~lib/array/Array#get:length @@ -3708,6 +3705,7 @@ i32.const 6 i32.const 0 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 @@ -3731,7 +3729,6 @@ call $~lib/rt/pure/__retain i32.store offset=8 local.get $1 - call $~lib/rt/pure/__retain global.set $std/array-literal/dynamicArrayRef global.get $std/array-literal/dynamicArrayRef call $~lib/array/Array#get:length @@ -3751,6 +3748,7 @@ i32.const 8 i32.const 0 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $0 local.get $0 i32.load offset=4 @@ -3774,7 +3772,6 @@ call $~lib/rt/pure/__retain i32.store offset=8 local.get $0 - call $~lib/rt/pure/__retain global.set $std/array-literal/dynamicArrayRefWithCtor global.get $std/array-literal/dynamicArrayRefWithCtor call $~lib/array/Array#get:length @@ -3799,6 +3796,29 @@ call $~lib/rt/pure/__release global.get $std/array-literal/dynamicArrayRefWithCtor call $~lib/rt/pure/__release + i32.const 1 + i32.const 2 + i32.const 6 + i32.const 0 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain + local.set $1 + local.get $1 + i32.load offset=4 + local.set $0 + local.get $0 + i32.const 0 + call $std/array-literal/Ref#constructor + local.tee $8 + call $~lib/rt/pure/__retain + i32.store + local.get $1 + local.tee $0 + call $std/array-literal/doesntLeak + local.get $8 + call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $3 @@ -3812,16 +3832,16 @@ local.get $7 call $~lib/rt/pure/__release ) - (func $start (; 43 ;) + (func $~start (; 44 ;) call $start:std/array-literal ) - (func $~lib/array/Array#__visit_impl (; 44 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 45 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/array/Array#__visit_impl (; 45 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 46 ;) (param $0 i32) (param $1 i32) nop ) - (func $~lib/rt/pure/__visit (; 46 ;) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 47 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 @@ -3951,10 +3971,11 @@ end end ) - (func $~lib/array/Array#__visit_impl (; 47 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 48 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -3965,19 +3986,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -3985,15 +4006,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) - (func $~lib/array/Array#__visit_impl (; 48 ;) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit_impl (; 49 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -4004,19 +4025,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -4024,12 +4045,11 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) - (func $~lib/rt/__visit_members (; 49 ;) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 50 ;) (param $0 i32) (param $1 i32) (local $2 i32) block $block$4$break block $switch$1$default diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 7b39d69312..35faf25e73 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -229,7 +229,7 @@ (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $std/array/arr (mut i32) (i32.const 0)) (global $std/array/i (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/math/random_seeded (mut i32) (i32.const 0)) (global $~lib/math/random_state0_64 (mut i64) (i64.const 0)) (global $~lib/math/random_state1_64 (mut i64) (i64.const 0)) @@ -241,8 +241,9 @@ (global $~lib/util/number/_K (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/tlsf/removeBlock (; 6 ;) (param $0 i32) (param $1 i32) (local $2 i32) @@ -839,7 +840,7 @@ i32.const 10240 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -853,7 +854,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -873,14 +874,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 8672 @@ -1192,7 +1193,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1251,14 +1252,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1270,12 +1271,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1294,7 +1295,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1718,7 +1719,7 @@ i64.shl i64.or local.set $4 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 32 i32.ge_u @@ -1749,7 +1750,7 @@ i32.const 32 i32.add local.set $1 - br $continue|0 + br $while-continue|0 end end end @@ -1849,7 +1850,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1875,10 +1876,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1899,11 +1900,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1924,7 +1925,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1936,7 +1937,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1957,10 +1958,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1976,11 +1977,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1994,7 +1995,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -2433,7 +2434,7 @@ i32.const 1 return end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -2448,14 +2449,12 @@ if i32.const 0 return - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const 1 @@ -2513,7 +2512,7 @@ select end local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -2529,7 +2528,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -2579,7 +2578,7 @@ return end end - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -2594,14 +2593,12 @@ if i32.const 0 return - else - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $loop|0 end - unreachable + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 end end i32.const 1 @@ -2894,7 +2891,7 @@ i32.shl i32.add local.set $1 - loop $continue|0 + loop $do-continue|0 local.get $2 i32.load call $~lib/rt/pure/__release @@ -2904,7 +2901,7 @@ local.tee $2 local.get $1 i32.lt_u - br_if $continue|0 + br_if $do-continue|0 end else local.get $0 @@ -3164,7 +3161,7 @@ i32.shl i32.add local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $1 i32.lt_u @@ -3187,7 +3184,7 @@ i32.const 4 i32.sub local.set $1 - br $continue|0 + br $while-continue|0 end end end @@ -3228,7 +3225,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_s @@ -3244,14 +3241,12 @@ if local.get $2 return - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $continue|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $while-continue|0 end end i32.const -1 @@ -3276,7 +3271,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $1 local.get $2 i32.lt_s @@ -3292,14 +3287,12 @@ if local.get $1 return - else - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $continue|0 end - unreachable + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|0 end end i32.const -1 @@ -3324,7 +3317,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $1 local.get $2 i32.lt_s @@ -3340,14 +3333,12 @@ if local.get $1 return - else - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $continue|0 end - unreachable + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|0 end end i32.const -1 @@ -3381,7 +3372,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $1 local.get $2 i32.lt_s @@ -3405,14 +3396,12 @@ if i32.const 1 return - else - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $continue|0 end - unreachable + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|0 end end i32.const 0 @@ -3438,7 +3427,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $1 local.get $2 i32.lt_s @@ -3462,14 +3451,12 @@ if i32.const 1 return - else - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $continue|0 end - unreachable + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $while-continue|0 end end i32.const 0 @@ -3838,7 +3825,7 @@ local.get $0 i32.load offset=12 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 local.get $0 @@ -3851,7 +3838,7 @@ i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $2 @@ -3866,14 +3853,12 @@ if local.get $2 return - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const -1 @@ -3916,7 +3901,7 @@ local.get $0 i32.load offset=12 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 local.get $0 @@ -3929,7 +3914,7 @@ i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $2 @@ -3941,17 +3926,16 @@ local.get $0 local.get $1 call_indirect (type $i32_i32_i32_=>_i32) + i32.eqz if - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 - else i32.const 0 return end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const 1 @@ -3994,7 +3978,7 @@ local.get $0 i32.load offset=12 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 local.get $0 @@ -4007,7 +3991,7 @@ i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $2 @@ -4022,14 +4006,12 @@ if i32.const 1 return - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const 0 @@ -4070,24 +4052,23 @@ (local $2 i32) (local $3 i32) (local $4 i32) - block $break|0 + local.get $0 + i32.load offset=12 + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 local.get $0 i32.load offset=12 - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - local.get $0 - i32.load offset=12 - local.tee $4 - local.get $3 - local.get $4 - i32.lt_s - select - i32.ge_s - br_if $break|0 + local.tee $4 + local.get $3 + local.get $4 + i32.lt_s + select + i32.lt_s + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $2 @@ -4103,9 +4084,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $start:std/array~anonymous|17 (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i32) @@ -4131,7 +4111,7 @@ local.get $1 i32.eqz if - loop $loop|0 + loop $for-loop|0 local.get $3 i32.const 4 i32.lt_s @@ -4143,12 +4123,12 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end i32.const 0 local.set $3 - loop $loop|1 + loop $for-loop|1 local.get $3 i32.const 100 i32.lt_s @@ -4162,12 +4142,12 @@ i32.const 1 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end end i32.const 0 local.set $3 - loop $loop|2 + loop $for-loop|2 local.get $3 i32.const 100 i32.lt_s @@ -4179,12 +4159,12 @@ i32.const 1 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end end i32.const 0 local.set $3 - loop $loop|3 + loop $for-loop|3 local.get $3 i32.const 100 i32.lt_s @@ -4198,7 +4178,7 @@ i32.const 1 i32.add local.set $3 - br $loop|3 + br $for-loop|3 end end end @@ -4241,7 +4221,7 @@ local.tee $4 i32.load offset=4 local.set $5 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 local.get $0 @@ -4254,7 +4234,7 @@ i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $1 i32.const 2 i32.shl @@ -4274,7 +4254,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $4 @@ -4328,7 +4308,7 @@ local.tee $5 i32.load offset=4 local.set $6 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 local.get $0 @@ -4341,7 +4321,7 @@ i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 i32.const 2 i32.shl @@ -4364,7 +4344,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $5 @@ -4406,7 +4386,7 @@ local.get $0 i32.load offset=12 local.set $5 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $5 local.get $0 @@ -4427,7 +4407,7 @@ i32.load local.set $3 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $2 local.get $0 @@ -4442,7 +4422,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $4 @@ -4492,7 +4472,7 @@ local.get $0 i32.load offset=12 local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $4 local.get $0 @@ -4505,7 +4485,7 @@ i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $0 i32.load offset=4 @@ -4523,7 +4503,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -4567,13 +4547,13 @@ i32.const 1 i32.sub local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $3 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $0 i32.load offset=4 @@ -4591,7 +4571,7 @@ i32.const 1 i32.sub local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -4699,7 +4679,7 @@ (local $4 f32) (local $5 f32) (local $6 i32) - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -4715,42 +4695,43 @@ i32.const 1 i32.sub local.set $2 - loop $continue|1 - block $break|1 - local.get $2 - i32.const 0 - i32.lt_s - br_if $break|1 - local.get $0 - local.get $2 - i32.const 2 - i32.shl - i32.add - f32.load - local.set $5 - i32.const 2 - global.set $~lib/argc - local.get $4 - local.get $5 - call $~lib/util/sort/COMPARATOR~anonymous|0 - i32.const 0 - i32.ge_s - br_if $break|1 - local.get $2 - local.tee $6 - i32.const 1 - i32.sub - local.set $2 - local.get $0 - local.get $6 - i32.const 1 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $5 - f32.store - br $continue|1 + loop $while-continue|1 + local.get $2 + i32.const 0 + i32.ge_s + if + block $while-break|1 + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + f32.load + local.set $5 + i32.const 2 + global.set $~argumentsLength + local.get $4 + local.get $5 + call $~lib/util/sort/COMPARATOR~anonymous|0 + i32.const 0 + i32.ge_s + br_if $while-break|1 + local.get $2 + local.tee $6 + i32.const 1 + i32.sub + local.set $2 + local.get $0 + local.get $6 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $5 + f32.store + br $while-continue|1 + end end end local.get $0 @@ -4766,7 +4747,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end ) @@ -4795,14 +4776,14 @@ i32.const 1 i32.sub local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $3 i32.const 0 i32.gt_s if local.get $3 local.set $2 - loop $continue|1 + loop $while-continue|1 local.get $2 i32.const 1 i32.and @@ -4828,7 +4809,7 @@ i32.const 1 i32.shr_s local.set $2 - br $continue|1 + br $while-continue|1 end end local.get $0 @@ -4849,7 +4830,7 @@ f32.load local.set $6 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $6 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -4892,14 +4873,14 @@ i32.const 1 i32.sub local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 i32.const 1 i32.sub local.set $3 - loop $loop|2 + loop $for-loop|2 local.get $3 i32.const 2 i32.ge_s @@ -4921,7 +4902,7 @@ f32.store i32.const 1 local.set $1 - loop $continue|3 + loop $while-continue|3 local.get $5 local.get $1 i32.const 5 @@ -4946,10 +4927,10 @@ if local.get $2 local.set $1 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $1 i32.const 0 i32.gt_s @@ -4965,7 +4946,7 @@ f32.load local.set $6 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $6 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -5004,14 +4985,14 @@ i32.const 1 i32.shr_s local.set $1 - br $continue|4 + br $while-continue|4 end end local.get $3 i32.const 1 i32.sub local.set $3 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -5056,7 +5037,7 @@ f32.load local.set $4 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $4 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -5139,7 +5120,7 @@ i32.const 1 return end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -5178,7 +5159,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -5189,7 +5170,7 @@ (local $4 f64) (local $5 f64) (local $6 i32) - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -5205,42 +5186,43 @@ i32.const 1 i32.sub local.set $2 - loop $continue|1 - block $break|1 - local.get $2 - i32.const 0 - i32.lt_s - br_if $break|1 - local.get $0 - local.get $2 - i32.const 3 - i32.shl - i32.add - f64.load - local.set $5 - i32.const 2 - global.set $~lib/argc - local.get $4 - local.get $5 - call $~lib/util/sort/COMPARATOR~anonymous|0 - i32.const 0 - i32.ge_s - br_if $break|1 - local.get $2 - local.tee $6 - i32.const 1 - i32.sub - local.set $2 - local.get $0 - local.get $6 - i32.const 1 - i32.add - i32.const 3 - i32.shl - i32.add - local.get $5 - f64.store - br $continue|1 + loop $while-continue|1 + local.get $2 + i32.const 0 + i32.ge_s + if + block $while-break|1 + local.get $0 + local.get $2 + i32.const 3 + i32.shl + i32.add + f64.load + local.set $5 + i32.const 2 + global.set $~argumentsLength + local.get $4 + local.get $5 + call $~lib/util/sort/COMPARATOR~anonymous|0 + i32.const 0 + i32.ge_s + br_if $while-break|1 + local.get $2 + local.tee $6 + i32.const 1 + i32.sub + local.set $2 + local.get $0 + local.get $6 + i32.const 1 + i32.add + i32.const 3 + i32.shl + i32.add + local.get $5 + f64.store + br $while-continue|1 + end end end local.get $0 @@ -5256,7 +5238,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end ) @@ -5285,14 +5267,14 @@ i32.const 1 i32.sub local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $3 i32.const 0 i32.gt_s if local.get $3 local.set $2 - loop $continue|1 + loop $while-continue|1 local.get $2 i32.const 1 i32.and @@ -5318,7 +5300,7 @@ i32.const 1 i32.shr_s local.set $2 - br $continue|1 + br $while-continue|1 end end local.get $0 @@ -5339,7 +5321,7 @@ f64.load local.set $6 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $6 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -5382,14 +5364,14 @@ i32.const 1 i32.sub local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 i32.const 1 i32.sub local.set $3 - loop $loop|2 + loop $for-loop|2 local.get $3 i32.const 2 i32.ge_s @@ -5411,7 +5393,7 @@ f64.store i32.const 1 local.set $1 - loop $continue|3 + loop $while-continue|3 local.get $5 local.get $1 i32.const 5 @@ -5436,10 +5418,10 @@ if local.get $2 local.set $1 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $1 i32.const 0 i32.gt_s @@ -5455,7 +5437,7 @@ f64.load local.set $6 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $6 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -5494,14 +5476,14 @@ i32.const 1 i32.shr_s local.set $1 - br $continue|4 + br $while-continue|4 end end local.get $3 i32.const 1 i32.sub local.set $3 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -5546,7 +5528,7 @@ f64.load local.set $4 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $4 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -5650,7 +5632,7 @@ i32.const 1 return end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -5689,7 +5671,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -5700,12 +5682,11 @@ (local $5 i32) (local $6 i32) (local $7 i32) - loop $loop|0 - block $break|0 - local.get $4 - local.get $1 - i32.ge_s - br_if $break|0 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + if local.get $0 local.get $4 i32.const 2 @@ -5717,43 +5698,44 @@ i32.const 1 i32.sub local.set $3 - loop $continue|1 - block $break|1 - local.get $3 - i32.const 0 - i32.lt_s - br_if $break|1 - local.get $0 - local.get $3 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $5 - local.get $6 - local.get $2 - call_indirect (type $i32_i32_=>_i32) - i32.const 0 - i32.ge_s - br_if $break|1 - local.get $3 - local.tee $7 - i32.const 1 - i32.sub - local.set $3 - local.get $0 - local.get $7 - i32.const 1 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store - br $continue|1 + loop $while-continue|1 + local.get $3 + i32.const 0 + i32.ge_s + if + block $while-break|1 + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $6 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $6 + local.get $2 + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.ge_s + br_if $while-break|1 + local.get $3 + local.tee $7 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + local.get $7 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store + br $while-continue|1 + end end end local.get $0 @@ -5769,7 +5751,7 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end end ) @@ -5798,14 +5780,14 @@ i32.const 1 i32.sub local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $4 i32.const 0 i32.gt_s if local.get $4 local.set $3 - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 1 i32.and @@ -5831,7 +5813,7 @@ i32.const 1 i32.shr_s local.set $3 - br $continue|1 + br $while-continue|1 end end local.get $0 @@ -5852,7 +5834,7 @@ i32.load local.set $6 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $2 @@ -5896,14 +5878,14 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end end local.get $1 i32.const 1 i32.sub local.set $4 - loop $loop|2 + loop $for-loop|2 local.get $4 i32.const 2 i32.ge_s @@ -5925,7 +5907,7 @@ i32.store i32.const 1 local.set $1 - loop $continue|3 + loop $while-continue|3 local.get $5 local.get $1 i32.const 5 @@ -5950,10 +5932,10 @@ if local.get $3 local.set $1 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $1 i32.const 0 i32.gt_s @@ -5969,7 +5951,7 @@ i32.load local.set $6 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $2 @@ -6009,14 +5991,14 @@ i32.const 1 i32.shr_s local.set $1 - br $continue|4 + br $while-continue|4 end end local.get $4 i32.const 1 i32.sub local.set $4 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -6060,7 +6042,7 @@ i32.load local.set $4 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $4 local.get $1 @@ -6116,7 +6098,7 @@ local.get $0 call $~lib/array/Array#constructor local.set $2 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $0 i32.lt_s @@ -6133,7 +6115,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -6188,7 +6170,7 @@ local.get $0 call $~lib/array/Array#constructor local.set $2 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $0 i32.lt_s @@ -6205,7 +6187,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -6218,13 +6200,13 @@ local.get $0 i32.load offset=12 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s if i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $2 i32.const 1 @@ -6240,14 +6222,12 @@ if i32.const 0 return - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const 1 @@ -6352,7 +6332,7 @@ local.get $1 i32.const 2 i32.store offset=12 - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 2 i32.lt_s @@ -6375,7 +6355,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -6417,7 +6397,7 @@ i32.load local.set $4 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $4 local.get $1 @@ -6453,13 +6433,13 @@ local.get $0 i32.load offset=12 local.set $5 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $5 i32.lt_s if i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $2 i32.const 1 @@ -6481,18 +6461,16 @@ call $~lib/rt/pure/__release i32.const 0 return - else - local.get $3 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const 1 @@ -6533,7 +6511,7 @@ local.get $1 i32.const 512 i32.store offset=12 - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 512 i32.lt_s @@ -6557,7 +6535,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -6579,13 +6557,13 @@ local.get $0 i32.load offset=12 local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $4 i32.lt_s if i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $1 i32.const 1 @@ -6606,18 +6584,16 @@ call $~lib/rt/pure/__release i32.const 0 return - else - local.get $2 - call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $loop|0 end - unreachable + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + call $~lib/rt/pure/__release + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 end end i32.const 1 @@ -6665,7 +6641,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -6686,20 +6662,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $0 i32.load16_u local.tee $3 @@ -6712,18 +6686,16 @@ local.get $4 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -6838,7 +6810,7 @@ i32.const 1 return end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $5 i32.lt_s @@ -6852,17 +6824,8 @@ call $~lib/array/Array#__get local.tee $4 call $~lib/string/String.__eq + i32.eqz if - local.get $3 - call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 - else local.get $3 call $~lib/rt/pure/__release local.get $4 @@ -6870,7 +6833,15 @@ i32.const 0 return end - unreachable + local.get $3 + call $~lib/rt/pure/__release + local.get $4 + call $~lib/rt/pure/__release + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const 1 @@ -6974,7 +6945,7 @@ (local $5 i32) i32.const 5168 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $0 i32.lt_s @@ -7010,7 +6981,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -7032,7 +7003,7 @@ local.get $0 i32.const 400 i32.store offset=12 - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 400 i32.lt_s @@ -7052,7 +7023,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -7178,7 +7149,7 @@ local.set $3 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $5 local.get $2 i32.lt_s @@ -7230,7 +7201,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|1 end end local.get $0 @@ -7321,7 +7292,7 @@ ) (func $~lib/util/number/utoa_simple (; 160 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -7340,7 +7311,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa32 (; 161 ;) (param $0 i32) (result i32) @@ -7469,7 +7440,7 @@ local.set $3 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $6 local.get $4 i32.lt_s @@ -7507,7 +7478,7 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end end local.get $7 @@ -7631,7 +7602,7 @@ local.set $3 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $6 local.get $4 i32.lt_s @@ -7669,7 +7640,7 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end end local.get $7 @@ -7742,7 +7713,7 @@ i32.const 7060 i32.load local.set $13 - loop $continue|0 + loop $while-continue|0 local.get $4 i32.const 0 i32.gt_s @@ -7900,81 +7871,83 @@ i64.add local.tee $1 local.get $5 - i64.gt_u - br_if $continue|0 - local.get $4 - global.get $~lib/util/number/_K - i32.add - global.set $~lib/util/number/_K - local.get $13 - local.get $4 - i32.const 2 - i32.shl - i32.add - i64.load32_u - local.get $10 - i64.extend_i32_s - i64.shl - local.set $3 - local.get $0 - local.get $6 - i32.const 1 - i32.sub - i32.const 1 - i32.shl - i32.add - local.tee $2 - i32.load16_u - local.set $4 - loop $continue|2 + i64.le_u + if + local.get $4 + global.get $~lib/util/number/_K + i32.add + global.set $~lib/util/number/_K + local.get $13 + local.get $4 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.get $10 + i64.extend_i32_s + i64.shl + local.set $3 + local.get $0 + local.get $6 i32.const 1 - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.sub - i64.gt_u - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.lt_u - select - i32.const 0 - local.get $5 - local.get $1 - i64.sub - local.get $3 - i64.ge_u - i32.const 0 - local.get $1 - local.get $9 - i64.lt_u - select - select - if - local.get $4 + i32.sub + i32.const 1 + i32.shl + i32.add + local.tee $2 + i32.load16_u + local.set $4 + loop $while-continue|3 i32.const 1 - i32.sub - local.set $4 + local.get $9 + local.get $1 + i64.sub local.get $1 local.get $3 i64.add - local.set $1 - br $continue|2 + local.get $9 + i64.sub + i64.gt_u + local.get $1 + local.get $3 + i64.add + local.get $9 + i64.lt_u + select + i32.const 0 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 + local.get $1 + local.get $9 + i64.lt_u + select + select + if + local.get $4 + i32.const 1 + i32.sub + local.set $4 + local.get $1 + local.get $3 + i64.add + local.set $1 + br $while-continue|3 + end end + local.get $2 + local.get $4 + i32.store16 + local.get $6 + return end - local.get $2 - local.get $4 - i32.store16 - local.get $6 - return + br $while-continue|0 end end - loop $continue|3 (result i32) + loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul @@ -8021,7 +7994,7 @@ local.tee $12 local.get $5 i64.ge_u - br_if $continue|3 + br_if $while-continue|4 local.get $4 global.get $~lib/util/number/_K i32.add @@ -8049,7 +8022,7 @@ local.tee $2 i32.load16_u local.set $4 - loop $continue|4 + loop $while-continue|6 i32.const 1 local.get $3 local.get $1 @@ -8087,7 +8060,7 @@ local.get $11 i64.add local.set $1 - br $continue|4 + br $while-continue|6 end end local.get $2 @@ -8127,7 +8100,7 @@ i32.const 0 end if (result i32) - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s @@ -8143,7 +8116,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -8215,7 +8188,7 @@ i32.store i32.const 2 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 local.get $3 i32.lt_s @@ -8231,7 +8204,7 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 @@ -8248,34 +8221,34 @@ local.get $0 i32.const 4 i32.add - local.tee $0 + local.tee $1 local.get $3 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if i32.const 0 - local.get $2 + local.get $0 i32.sub - local.set $2 + local.set $0 end - local.get $2 - local.get $2 + local.get $0 + local.get $0 call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_simple - local.get $0 + local.get $1 i32.const 45 i32.const 43 - local.get $1 + local.get $2 select i32.store16 - local.get $2 + local.get $0 i32.const 2 i32.add else @@ -8794,7 +8767,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -8832,7 +8805,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -8908,7 +8881,7 @@ local.get $5 call $~lib/string/String#get:length local.set $8 - loop $loop|0 + loop $for-loop|0 local.get $4 local.get $6 i32.lt_s @@ -8979,7 +8952,7 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -9004,11 +8977,11 @@ call $~lib/rt/pure/__retain local.tee $0 local.get $1 + local.get $1 local.get $0 call $~lib/string/String.__concat local.tee $0 local.tee $2 - local.get $1 i32.ne if local.get $2 @@ -9076,7 +9049,7 @@ i32.const 5408 call $~lib/string/String#get:length local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $4 local.get $5 i32.lt_s @@ -9143,7 +9116,7 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -9296,7 +9269,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -9332,7 +9305,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -9429,7 +9402,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -9467,7 +9440,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -9549,7 +9522,7 @@ ) (func $~lib/util/number/utoa_simple (; 185 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i64) - loop $continue|0 + loop $do-continue|0 local.get $1 i64.const 10 i64.div_u @@ -9571,7 +9544,7 @@ local.tee $1 i64.const 0 i64.ne - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/utoa64 (; 186 ;) (param $0 i64) (result i32) @@ -9699,7 +9672,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -9737,7 +9710,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -9931,7 +9904,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -9969,7 +9942,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -10046,7 +10019,7 @@ i32.const 5408 call $~lib/string/String#get:length local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $5 i32.lt_s @@ -10117,7 +10090,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -10237,7 +10210,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -10273,7 +10246,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -10350,7 +10323,7 @@ i32.const 5408 call $~lib/string/String#get:length local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $5 i32.lt_s @@ -10421,7 +10394,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -10519,7 +10492,7 @@ i32.const 5408 call $~lib/string/String#get:length local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $5 i32.lt_s @@ -10590,7 +10563,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -10690,7 +10663,7 @@ i32.const 5408 call $~lib/string/String#get:length local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $5 i32.lt_s @@ -10761,7 +10734,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -10873,20 +10846,6 @@ (local $60 i32) (local $61 i32) (local $62 i32) - (local $63 i32) - (local $64 i32) - (local $65 i32) - (local $66 i32) - (local $67 i32) - (local $68 i32) - (local $69 i32) - (local $70 i32) - (local $71 i32) - (local $72 i32) - (local $73 i32) - (local $74 i32) - (local $75 i32) - (local $76 i32) i32.const 0 call $~lib/array/Array#constructor global.set $std/array/arr @@ -10909,7 +10868,7 @@ i32.const 1 i32.const 0 call $~lib/arraybuffer/ArrayBufferView#constructor - local.set $2 + local.set $1 global.get $std/array/arr call $~lib/array/Array.isArray<~lib/array/Array | null> i32.eqz @@ -10922,7 +10881,7 @@ unreachable end call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release i32.const 5 i32.const 0 @@ -10930,7 +10889,6 @@ i32.const 496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 local.tee $0 i32.const 1 i32.const 1 @@ -10944,7 +10902,7 @@ i32.const 528 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $1 call $std/array/isArraysEqual i32.eqz if @@ -10968,7 +10926,7 @@ i32.const 608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $7 + local.tee $4 call $std/array/isArraysEqual i32.eqz if @@ -10992,7 +10950,7 @@ i32.const 640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $6 call $std/array/isArraysEqual i32.eqz if @@ -11016,7 +10974,7 @@ i32.const 672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 call $std/array/isArraysEqual i32.eqz if @@ -11040,7 +10998,7 @@ i32.const 704 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 + local.tee $3 call $std/array/isArraysEqual i32.eqz if @@ -11051,25 +11009,24 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 + call $~lib/rt/pure/__release + local.get $1 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $7 + local.get $6 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release i32.const 5 i32.const 2 i32.const 7 i32.const 736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 local.tee $0 i32.const 1 i32.const 1 @@ -11083,7 +11040,7 @@ i32.const 784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $1 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11108,7 +11065,7 @@ i32.const 832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $7 + local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11133,7 +11090,7 @@ i32.const 880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $6 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11158,7 +11115,7 @@ i32.const 928 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11183,7 +11140,7 @@ i32.const 976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 + local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11195,18 +11152,18 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 + call $~lib/rt/pure/__release + local.get $1 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $7 + local.get $6 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release global.get $std/array/arr i32.load offset=12 if @@ -11465,23 +11422,22 @@ i32.const 8 i32.const 0 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.load offset=4 - local.tee $2 + local.tee $1 i32.const 0 call $std/array/Ref#constructor local.tee $4 call $~lib/rt/pure/__retain i32.store - local.get $2 + local.get $1 i32.const 0 call $std/array/Ref#constructor - local.tee $2 + local.tee $1 call $~lib/rt/pure/__retain i32.store offset=4 local.get $0 - call $~lib/rt/pure/__retain - local.tee $0 call $~lib/array/Array#set:length local.get $0 i32.load offset=12 @@ -11495,15 +11451,15 @@ end local.get $4 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release i32.const 0 call $~lib/array/Array#constructor - local.set $2 + local.set $1 global.get $std/array/arr - local.get $2 + local.get $1 call $~lib/array/Array#concat local.set $4 global.get $std/array/arr @@ -11549,7 +11505,7 @@ i32.const 1072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 call $~lib/array/Array#concat call $~lib/rt/pure/__release global.get $std/array/arr @@ -11603,14 +11559,14 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 46 call $~lib/array/Array#push - local.get $2 + local.get $1 i32.const 47 call $~lib/array/Array#push global.get $std/array/arr - local.get $2 + local.get $1 call $~lib/array/Array#concat local.set $0 local.get $4 @@ -11627,7 +11583,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.load offset=12 i32.const 2 i32.ne @@ -11738,8 +11694,6 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.tee $4 - local.set $7 - local.get $4 i32.load offset=12 if i32.const 0 @@ -11749,13 +11703,13 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $4 global.get $std/array/arr call $~lib/array/Array#concat - local.set $1 + local.set $6 local.get $0 call $~lib/rt/pure/__release - local.get $1 + local.get $6 i32.load offset=12 i32.const 3 i32.ne @@ -11767,7 +11721,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $4 i32.load offset=12 if i32.const 0 @@ -11777,11 +11731,11 @@ call $~lib/builtins/abort unreachable end - local.get $2 - call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $3 + local.get $6 + call $~lib/rt/pure/__release + local.get $2 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -11796,14 +11750,14 @@ i32.const 3 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $2 + local.tee $4 i32.const 5 i32.const 2 i32.const 3 i32.const 1152 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $6 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11821,12 +11775,15 @@ i32.const 1200 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $7 + local.set $1 + local.get $0 + call $~lib/rt/pure/__release + local.get $1 i32.const 1 i32.const 3 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $1 + local.tee $2 i32.const 5 i32.const 2 i32.const 3 @@ -11851,19 +11808,21 @@ i32.const 1296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 1 i32.const 2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $10 + local.tee $5 i32.const 5 i32.const 2 i32.const 3 i32.const 1344 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $7 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11881,19 +11840,21 @@ i32.const 1392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 2 i32.const 2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $6 + local.tee $8 i32.const 5 i32.const 2 i32.const 3 i32.const 1440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 + local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11911,19 +11872,21 @@ i32.const 1488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $15 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 0 i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $16 + local.tee $10 i32.const 5 i32.const 2 i32.const 3 i32.const 1536 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $12 + local.tee $11 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11941,19 +11904,21 @@ i32.const 1584 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $17 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 1 i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $13 + local.tee $12 i32.const 5 i32.const 2 i32.const 3 i32.const 1632 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $19 + local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -11971,19 +11936,21 @@ i32.const 1680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $20 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 1 i32.const 2 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $35 + local.tee $14 i32.const 5 i32.const 2 i32.const 3 i32.const 1728 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $11 + local.tee $25 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12001,19 +11968,21 @@ i32.const 1776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $18 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 0 i32.const -2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $21 + local.tee $16 i32.const 5 i32.const 2 i32.const 3 i32.const 1824 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $22 + local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12031,19 +12000,21 @@ i32.const 1872 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $23 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const 0 i32.const -2 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $24 + local.tee $18 i32.const 5 i32.const 2 i32.const 3 i32.const 1920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $27 + local.tee $19 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12061,19 +12032,21 @@ i32.const 1968 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $28 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const -4 i32.const -3 i32.const -2 call $~lib/array/Array#copyWithin - local.tee $29 + local.tee $20 i32.const 5 i32.const 2 i32.const 3 i32.const 2016 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $30 + local.tee $15 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12091,19 +12064,21 @@ i32.const 2064 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $31 + local.get $1 + call $~lib/rt/pure/__release + local.tee $1 i32.const -4 i32.const -3 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $32 + local.tee $21 i32.const 5 i32.const 2 i32.const 3 i32.const 2112 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $33 + local.tee $22 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12121,19 +12096,22 @@ i32.const 2160 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $25 + local.set $0 + local.get $1 + call $~lib/rt/pure/__release + local.get $0 i32.const -4 i32.const -3 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $26 + local.tee $1 i32.const 5 i32.const 2 i32.const 3 i32.const 2208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $34 + local.tee $23 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -12147,75 +12125,53 @@ end local.get $0 call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release - local.get $7 + local.get $6 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release local.get $8 call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release local.get $10 call $~lib/rt/pure/__release - local.get $9 + local.get $11 call $~lib/rt/pure/__release - local.get $5 + local.get $12 call $~lib/rt/pure/__release - local.get $6 + local.get $13 call $~lib/rt/pure/__release local.get $14 call $~lib/rt/pure/__release - local.get $15 + local.get $25 call $~lib/rt/pure/__release local.get $16 call $~lib/rt/pure/__release - local.get $12 - call $~lib/rt/pure/__release local.get $17 call $~lib/rt/pure/__release - local.get $13 + local.get $18 call $~lib/rt/pure/__release local.get $19 call $~lib/rt/pure/__release local.get $20 call $~lib/rt/pure/__release - local.get $35 - call $~lib/rt/pure/__release - local.get $11 - call $~lib/rt/pure/__release - local.get $18 + local.get $15 call $~lib/rt/pure/__release local.get $21 call $~lib/rt/pure/__release local.get $22 call $~lib/rt/pure/__release - local.get $23 - call $~lib/rt/pure/__release - local.get $24 - call $~lib/rt/pure/__release - local.get $27 - call $~lib/rt/pure/__release - local.get $28 - call $~lib/rt/pure/__release - local.get $29 - call $~lib/rt/pure/__release - local.get $30 - call $~lib/rt/pure/__release - local.get $31 - call $~lib/rt/pure/__release - local.get $32 - call $~lib/rt/pure/__release - local.get $33 - call $~lib/rt/pure/__release - local.get $25 - call $~lib/rt/pure/__release - local.get $26 + local.get $1 call $~lib/rt/pure/__release - local.get $34 + local.get $23 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 42 @@ -12809,7 +12765,7 @@ i32.const 2288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 call $~lib/array/Array#indexOf i32.const -1 i32.ne @@ -12823,7 +12779,7 @@ end local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 44 @@ -12984,7 +12940,7 @@ i32.const 2352 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 call $~lib/array/Array#includes i32.eqz if @@ -13052,7 +13008,7 @@ end local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release i32.const 5 i32.const 2 @@ -13060,19 +13016,18 @@ i32.const 2384 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 - local.get $1 + local.tee $0 i32.const 0 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $18 + local.tee $5 i32.const 5 i32.const 2 i32.const 3 i32.const 2432 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 + local.tee $7 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13084,13 +13039,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 0 i32.const 2 i32.const 3 i32.const 2480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $22 + local.tee $8 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13108,19 +13064,21 @@ i32.const 2496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 - local.get $3 + local.set $1 + local.get $0 + call $~lib/rt/pure/__release + local.get $1 i32.const 0 i32.const 0 call $~lib/array/Array#splice - local.tee $23 + local.tee $9 i32.const 0 i32.const 2 i32.const 3 i32.const 2544 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $24 + local.tee $10 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13132,13 +13090,14 @@ call $~lib/builtins/abort unreachable end + local.get $1 i32.const 5 i32.const 2 i32.const 3 i32.const 2560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $27 + local.tee $11 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13156,19 +13115,21 @@ i32.const 2608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 - local.get $8 + local.set $0 + local.get $1 + call $~lib/rt/pure/__release + local.get $0 i32.const 2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $28 + local.tee $12 i32.const 3 i32.const 2 i32.const 3 i32.const 2656 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $29 + local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13180,13 +13141,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 2 i32.const 2 i32.const 3 i32.const 2688 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $30 + local.tee $14 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13204,19 +13166,20 @@ i32.const 2720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 - local.get $10 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const 2 i32.const 2 call $~lib/array/Array#splice - local.tee $31 + local.tee $16 i32.const 2 i32.const 2 i32.const 3 i32.const 2768 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $32 + local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13228,13 +13191,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 3 i32.const 2 i32.const 3 i32.const 2800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $33 + local.tee $18 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13252,19 +13216,20 @@ i32.const 2832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 - local.get $9 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const 0 i32.const 1 call $~lib/array/Array#splice - local.tee $25 + local.tee $19 i32.const 1 i32.const 2 i32.const 3 i32.const 2880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $26 + local.tee $20 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13276,13 +13241,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 4 i32.const 2 i32.const 3 i32.const 2912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $34 + local.tee $15 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13300,19 +13266,20 @@ i32.const 2944 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 - local.get $5 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const -1 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $36 + local.tee $21 i32.const 1 i32.const 2 i32.const 3 i32.const 2992 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $37 + local.tee $22 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13324,13 +13291,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 4 i32.const 2 i32.const 3 i32.const 3024 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $38 + local.tee $23 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13348,19 +13316,20 @@ i32.const 3056 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 - local.get $6 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const -2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $39 + local.tee $26 i32.const 2 i32.const 2 i32.const 3 i32.const 3104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $40 + local.tee $27 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13372,13 +13341,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 3 i32.const 2 i32.const 3 i32.const 3136 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $41 + local.tee $28 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13396,19 +13366,20 @@ i32.const 3168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 - local.get $14 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const -2 i32.const 1 call $~lib/array/Array#splice - local.tee $42 + local.tee $29 i32.const 1 i32.const 2 i32.const 3 i32.const 3216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $43 + local.tee $30 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13420,13 +13391,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 4 i32.const 2 i32.const 3 i32.const 3248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $44 + local.tee $31 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13444,19 +13416,20 @@ i32.const 3280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $15 - local.get $15 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const -7 i32.const 1 call $~lib/array/Array#splice - local.tee $45 + local.tee $32 i32.const 1 i32.const 2 i32.const 3 i32.const 3328 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $46 + local.tee $33 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13468,13 +13441,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 4 i32.const 2 i32.const 3 i32.const 3360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $47 + local.tee $34 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13492,19 +13466,20 @@ i32.const 3392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 - local.get $16 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const -2 i32.const -1 call $~lib/array/Array#splice - local.tee $48 + local.tee $24 i32.const 0 i32.const 2 i32.const 3 i32.const 3440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $49 + local.tee $35 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13516,13 +13491,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 5 i32.const 2 i32.const 3 i32.const 3456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $50 + local.tee $36 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13540,19 +13516,20 @@ i32.const 3504 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $12 - local.get $12 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const 1 i32.const -2 call $~lib/array/Array#splice - local.tee $51 + local.tee $37 i32.const 0 i32.const 2 i32.const 3 i32.const 3552 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $52 + local.tee $38 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13564,13 +13541,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 5 i32.const 2 i32.const 3 i32.const 3568 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $53 + local.tee $39 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13588,19 +13566,20 @@ i32.const 3616 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $17 - local.get $17 + local.get $0 + call $~lib/rt/pure/__release + local.tee $0 i32.const 4 i32.const 0 call $~lib/array/Array#splice - local.tee $54 + local.tee $40 i32.const 0 i32.const 2 i32.const 3 i32.const 3664 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $55 + local.tee $41 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13612,13 +13591,14 @@ call $~lib/builtins/abort unreachable end + local.get $0 i32.const 5 i32.const 2 i32.const 3 i32.const 3680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $56 + local.tee $42 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13636,19 +13616,21 @@ i32.const 3728 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $13 - local.get $13 + local.set $1 + local.get $0 + call $~lib/rt/pure/__release + local.get $1 i32.const 7 i32.const 0 call $~lib/array/Array#splice - local.tee $57 + local.tee $43 i32.const 0 i32.const 2 i32.const 3 i32.const 3776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $58 + local.tee $44 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13660,13 +13642,14 @@ call $~lib/builtins/abort unreachable end + local.get $1 i32.const 5 i32.const 2 i32.const 3 i32.const 3792 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $59 + local.tee $45 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13684,19 +13667,21 @@ i32.const 3840 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $19 - local.get $19 + local.set $2 + local.get $1 + call $~lib/rt/pure/__release + local.get $2 i32.const 7 i32.const 5 call $~lib/array/Array#splice - local.tee $60 + local.tee $46 i32.const 0 i32.const 2 i32.const 3 i32.const 3888 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $61 + local.tee $47 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13708,13 +13693,14 @@ call $~lib/builtins/abort unreachable end + local.get $2 i32.const 5 i32.const 2 i32.const 3 i32.const 3904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $62 + local.tee $48 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -13732,12 +13718,10 @@ i32.const 3952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $20 - local.set $4 - local.get $20 + local.tee $4 i32.const 1 call $~lib/array/Array#splice - local.tee $7 + local.tee $3 i32.load offset=12 if i32.const 0 @@ -13762,53 +13746,48 @@ i32.const 8 i32.const 0 call $~lib/rt/__allocArray - local.tee $2 + call $~lib/rt/pure/__retain + local.tee $1 i32.load offset=4 local.tee $0 i32.const 1 call $std/array/Ref#constructor - local.tee $63 + local.tee $49 call $~lib/rt/pure/__retain i32.store local.get $0 i32.const 2 call $std/array/Ref#constructor - local.tee $64 + local.tee $50 call $~lib/rt/pure/__retain i32.store offset=4 local.get $0 i32.const 3 call $std/array/Ref#constructor - local.tee $65 + local.tee $51 call $~lib/rt/pure/__retain i32.store offset=8 local.get $0 i32.const 4 call $std/array/Ref#constructor - local.tee $66 + local.tee $52 call $~lib/rt/pure/__retain i32.store offset=12 local.get $0 i32.const 5 call $std/array/Ref#constructor - local.tee $67 + local.tee $53 call $~lib/rt/pure/__retain i32.store offset=16 - local.get $2 local.get $4 - i32.ne - if - local.get $2 - call $~lib/rt/pure/__retain - local.set $2 - end - local.get $2 + call $~lib/rt/pure/__release + local.get $1 i32.const 2 call $~lib/array/Array#splice - local.set $4 - local.get $7 + local.set $6 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $6 i32.load offset=12 i32.const 2 i32.ne @@ -13820,10 +13799,10 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $6 i32.const 0 call $~lib/array/Array#__get - local.tee $68 + local.tee $54 i32.load i32.const 3 i32.ne @@ -13835,10 +13814,10 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $6 i32.const 1 call $~lib/array/Array#__get - local.tee $69 + local.tee $55 i32.load i32.const 4 i32.ne @@ -13850,7 +13829,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.load offset=12 i32.const 3 i32.ne @@ -13862,10 +13841,10 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 0 call $~lib/array/Array#__get - local.tee $70 + local.tee $56 i32.load i32.const 1 i32.ne @@ -13877,10 +13856,10 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 1 call $~lib/array/Array#__get - local.tee $71 + local.tee $57 i32.load i32.const 2 i32.ne @@ -13892,10 +13871,10 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 2 call $~lib/array/Array#__get - local.tee $72 + local.tee $58 i32.load i32.const 5 i32.ne @@ -13912,12 +13891,13 @@ i32.const 11 i32.const 0 call $~lib/rt/__allocArray - local.tee $7 + call $~lib/rt/pure/__retain + local.tee $4 i32.load offset=4 local.tee $0 i32.const 1 call $std/array/Ref#constructor - local.tee $73 + local.tee $59 call $~lib/rt/pure/__retain i32.store local.get $0 @@ -13926,14 +13906,12 @@ local.get $0 i32.const 2 call $std/array/Ref#constructor - local.tee $74 + local.tee $60 call $~lib/rt/pure/__retain i32.store offset=8 - local.get $7 - call $~lib/rt/pure/__retain - local.tee $7 + local.get $4 call $~lib/array/Array#splice - local.tee $35 + local.tee $25 i32.load offset=12 i32.const 1 i32.ne @@ -13945,7 +13923,7 @@ call $~lib/builtins/abort unreachable end - local.get $35 + local.get $25 i32.const 0 call $~lib/array/Array#__get local.tee $0 @@ -13965,7 +13943,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $4 i32.load offset=12 i32.const 2 i32.ne @@ -13977,10 +13955,10 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $4 i32.const 0 call $~lib/array/Array#__get - local.tee $75 + local.tee $61 if i32.const 0 i32.const 416 @@ -13989,11 +13967,11 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $4 i32.const 1 call $~lib/array/Array#__get - local.tee $11 - local.get $11 + local.tee $3 + local.get $3 i32.eqz if unreachable @@ -14009,47 +13987,65 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $2 + call $~lib/rt/pure/__release + local.get $5 + call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release + local.get $9 + call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release + local.get $11 + call $~lib/rt/pure/__release + local.get $12 + call $~lib/rt/pure/__release + local.get $13 + call $~lib/rt/pure/__release + local.get $14 + call $~lib/rt/pure/__release + local.get $16 + call $~lib/rt/pure/__release + local.get $17 call $~lib/rt/pure/__release local.get $18 call $~lib/rt/pure/__release + local.get $19 + call $~lib/rt/pure/__release + local.get $20 + call $~lib/rt/pure/__release + local.get $15 + call $~lib/rt/pure/__release local.get $21 call $~lib/rt/pure/__release local.get $22 call $~lib/rt/pure/__release - local.get $3 - call $~lib/rt/pure/__release local.get $23 call $~lib/rt/pure/__release - local.get $24 + local.get $26 call $~lib/rt/pure/__release local.get $27 call $~lib/rt/pure/__release - local.get $8 - call $~lib/rt/pure/__release local.get $28 call $~lib/rt/pure/__release local.get $29 call $~lib/rt/pure/__release local.get $30 call $~lib/rt/pure/__release - local.get $10 - call $~lib/rt/pure/__release local.get $31 call $~lib/rt/pure/__release local.get $32 call $~lib/rt/pure/__release local.get $33 call $~lib/rt/pure/__release - local.get $9 - call $~lib/rt/pure/__release - local.get $25 - call $~lib/rt/pure/__release - local.get $26 - call $~lib/rt/pure/__release local.get $34 call $~lib/rt/pure/__release - local.get $5 + local.get $24 + call $~lib/rt/pure/__release + local.get $35 call $~lib/rt/pure/__release local.get $36 call $~lib/rt/pure/__release @@ -14057,101 +14053,55 @@ call $~lib/rt/pure/__release local.get $38 call $~lib/rt/pure/__release - local.get $6 - call $~lib/rt/pure/__release local.get $39 call $~lib/rt/pure/__release local.get $40 call $~lib/rt/pure/__release local.get $41 call $~lib/rt/pure/__release - local.get $14 - call $~lib/rt/pure/__release local.get $42 call $~lib/rt/pure/__release local.get $43 call $~lib/rt/pure/__release local.get $44 call $~lib/rt/pure/__release - local.get $15 - call $~lib/rt/pure/__release local.get $45 call $~lib/rt/pure/__release local.get $46 call $~lib/rt/pure/__release local.get $47 call $~lib/rt/pure/__release - local.get $16 - call $~lib/rt/pure/__release local.get $48 call $~lib/rt/pure/__release local.get $49 call $~lib/rt/pure/__release local.get $50 call $~lib/rt/pure/__release - local.get $12 - call $~lib/rt/pure/__release local.get $51 call $~lib/rt/pure/__release local.get $52 call $~lib/rt/pure/__release local.get $53 call $~lib/rt/pure/__release - local.get $17 - call $~lib/rt/pure/__release local.get $54 call $~lib/rt/pure/__release local.get $55 call $~lib/rt/pure/__release local.get $56 call $~lib/rt/pure/__release - local.get $13 - call $~lib/rt/pure/__release local.get $57 call $~lib/rt/pure/__release local.get $58 call $~lib/rt/pure/__release local.get $59 call $~lib/rt/pure/__release - local.get $19 - call $~lib/rt/pure/__release local.get $60 call $~lib/rt/pure/__release - local.get $61 - call $~lib/rt/pure/__release - local.get $62 - call $~lib/rt/pure/__release - local.get $20 - call $~lib/rt/pure/__release - local.get $63 - call $~lib/rt/pure/__release - local.get $64 - call $~lib/rt/pure/__release - local.get $65 - call $~lib/rt/pure/__release - local.get $66 - call $~lib/rt/pure/__release - local.get $67 - call $~lib/rt/pure/__release - local.get $68 - call $~lib/rt/pure/__release - local.get $69 - call $~lib/rt/pure/__release - local.get $70 - call $~lib/rt/pure/__release - local.get $71 - call $~lib/rt/pure/__release - local.get $72 - call $~lib/rt/pure/__release - local.get $73 - call $~lib/rt/pure/__release - local.get $74 - call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $75 + local.get $61 call $~lib/rt/pure/__release - local.get $11 + local.get $3 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 0 @@ -14626,7 +14576,7 @@ end i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 100 i32.lt_s @@ -14638,7 +14588,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end global.get $std/array/arr @@ -15201,20 +15151,20 @@ i32.const 4320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $1 + local.set $2 i32.const 0 - global.set $~lib/argc - local.get $1 + global.set $~argumentsLength + local.get $2 call $~lib/array/Array#sort call $~lib/rt/pure/__release - local.get $1 + local.get $2 i32.const 8 i32.const 2 i32.const 9 i32.const 4368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $19 + local.tee $18 call $std/array/isArraysEqual i32.eqz if @@ -15233,7 +15183,7 @@ call $~lib/rt/pure/__retain local.set $3 i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 call $~lib/array/Array#sort call $~lib/rt/pure/__release @@ -15244,7 +15194,7 @@ i32.const 4496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $20 + local.tee $19 call $std/array/isArraysEqual i32.eqz if @@ -15261,21 +15211,21 @@ i32.const 4576 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $8 + local.set $5 i32.const 0 - global.set $~lib/argc - local.get $8 + global.set $~argumentsLength + local.get $5 i32.const 46 call $~lib/array/Array#sort call $~lib/rt/pure/__release - local.get $8 + local.get $5 i32.const 5 i32.const 2 i32.const 3 i32.const 4624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $11 + local.tee $20 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15293,21 +15243,21 @@ i32.const 4672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $10 + local.set $7 i32.const 0 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $7 i32.const 47 call $~lib/array/Array#sort call $~lib/rt/pure/__release - local.get $10 + local.get $7 i32.const 5 i32.const 2 i32.const 7 i32.const 4720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $18 + local.tee $15 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15332,58 +15282,55 @@ i32.const 4784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $9 + local.set $8 i32.const 2 i32.const 2 i32.const 3 i32.const 4816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 - local.set $12 + local.set $9 i32.const 4 i32.const 2 i32.const 3 i32.const 4848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $22 - local.set $17 + local.set $10 i32.const 4 i32.const 2 i32.const 3 i32.const 4880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $23 local.set $0 i32.const 64 call $std/array/createReverseOrderedArray - local.set $5 + local.set $11 i32.const 128 call $std/array/createReverseOrderedArray - local.set $6 + local.set $12 i32.const 1024 call $std/array/createReverseOrderedArray - local.set $14 + local.set $13 i32.const 10000 call $std/array/createReverseOrderedArray - local.set $15 + local.set $14 i32.const 512 call $std/array/createRandomOrderedArray - local.set $13 + local.set $17 local.get $16 call $std/array/assertSortedDefault - local.get $9 + local.get $8 call $std/array/assertSortedDefault - local.get $9 + local.get $8 i32.const 1 i32.const 2 i32.const 3 i32.const 4976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $24 + local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15395,16 +15342,16 @@ call $~lib/builtins/abort unreachable end - local.get $12 + local.get $9 call $std/array/assertSortedDefault - local.get $12 + local.get $9 i32.const 2 i32.const 2 i32.const 3 i32.const 5008 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $12 + local.tee $22 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -15416,9 +15363,9 @@ call $~lib/builtins/abort unreachable end - local.get $17 + local.get $10 call $std/array/assertSortedDefault - local.get $17 + local.get $10 local.get $0 i32.const 0 call $std/array/isArraysEqual @@ -15431,9 +15378,9 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $11 call $std/array/assertSortedDefault - local.get $5 + local.get $11 local.get $0 i32.const 4 call $std/array/isArraysEqual @@ -15446,9 +15393,9 @@ call $~lib/builtins/abort unreachable end - local.get $6 + local.get $12 call $std/array/assertSortedDefault - local.get $6 + local.get $12 local.get $0 i32.const 4 call $std/array/isArraysEqual @@ -15461,9 +15408,9 @@ call $~lib/builtins/abort unreachable end - local.get $14 + local.get $13 call $std/array/assertSortedDefault - local.get $14 + local.get $13 local.get $0 i32.const 4 call $std/array/isArraysEqual @@ -15476,9 +15423,9 @@ call $~lib/builtins/abort unreachable end - local.get $15 + local.get $14 call $std/array/assertSortedDefault - local.get $15 + local.get $14 local.get $0 i32.const 4 call $std/array/isArraysEqual @@ -15491,69 +15438,69 @@ call $~lib/builtins/abort unreachable end - local.get $13 + local.get $17 call $std/array/assertSortedDefault - local.get $1 + local.get $2 call $~lib/rt/pure/__release - local.get $19 + local.get $18 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $20 + local.get $19 call $~lib/rt/pure/__release - local.get $8 + local.get $5 call $~lib/rt/pure/__release - local.get $11 + local.get $20 call $~lib/rt/pure/__release - local.get $10 + local.get $7 call $~lib/rt/pure/__release - local.get $18 + local.get $15 call $~lib/rt/pure/__release local.get $16 call $~lib/rt/pure/__release + local.get $8 + call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release - local.get $21 + local.get $10 call $~lib/rt/pure/__release - local.get $22 + local.get $0 call $~lib/rt/pure/__release - local.get $23 + local.get $11 call $~lib/rt/pure/__release - local.get $5 + local.get $12 call $~lib/rt/pure/__release - local.get $6 + local.get $13 call $~lib/rt/pure/__release local.get $14 call $~lib/rt/pure/__release - local.get $15 - call $~lib/rt/pure/__release - local.get $13 + local.get $17 call $~lib/rt/pure/__release - local.get $24 + local.get $21 call $~lib/rt/pure/__release - local.get $12 + local.get $22 call $~lib/rt/pure/__release i32.const 64 call $std/array/createRandomOrderedArray local.set $0 i32.const 257 call $std/array/createRandomOrderedArray - local.set $1 + local.set $2 local.get $0 i32.const 49 call $std/array/assertSorted local.get $0 i32.const 50 call $std/array/assertSorted - local.get $1 + local.get $2 i32.const 51 call $std/array/assertSorted - local.get $1 + local.get $2 i32.const 52 call $std/array/assertSorted local.get $0 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release call $std/array/createReverseOrderedNestedArray local.tee $0 @@ -15573,7 +15520,7 @@ i32.const 5184 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $1 + local.set $2 i32.const 7 i32.const 2 i32.const 15 @@ -15582,10 +15529,10 @@ call $~lib/rt/pure/__retain local.set $3 i32.const 1 - global.set $~lib/argc - local.get $1 + global.set $~argumentsLength + local.get $2 call $std/array/assertSorted<~lib/string/String | null> - local.get $1 + local.get $2 local.get $3 call $std/array/isArraysEqual<~lib/string/String | null> i32.eqz @@ -15600,11 +15547,11 @@ call $std/array/createRandomStringArray local.set $0 i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 56 call $std/array/assertSorted<~lib/array/Array> - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -15621,8 +15568,8 @@ local.get $0 i32.load offset=12 call $~lib/util/string/joinBooleanArray - local.tee $1 - local.get $1 + local.tee $2 + local.get $2 i32.const 5440 call $~lib/string/String.__eq i32.eqz @@ -15640,7 +15587,7 @@ i32.const 5488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $8 i32.const 5168 call $~lib/array/Array#join local.tee $9 @@ -15661,10 +15608,10 @@ i32.const 5584 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $10 i32.const 5616 call $~lib/array/Array#join - local.tee $6 + local.tee $11 i32.const 5552 call $~lib/string/String.__eq i32.eqz @@ -15682,10 +15629,10 @@ i32.const 5648 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 + local.tee $12 i32.const 5680 call $~lib/array/Array#join - local.tee $15 + local.tee $13 i32.const 5712 call $~lib/string/String.__eq i32.eqz @@ -15703,13 +15650,13 @@ i32.const 5776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $2 i32.load offset=4 - local.get $1 + local.get $2 i32.load offset=12 call $~lib/util/string/joinFloatArray local.tee $3 - local.set $16 + local.set $14 local.get $3 i32.const 7088 call $~lib/string/String.__eq @@ -15728,7 +15675,7 @@ i32.const 7216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $12 + local.tee $16 i32.const 5168 call $~lib/array/Array<~lib/string/String | null>#join local.tee $17 @@ -15748,26 +15695,25 @@ i32.const 11 i32.const 0 call $~lib/rt/__allocArray - local.tee $13 - i32.load offset=4 + call $~lib/rt/pure/__retain local.tee $3 + i32.load offset=4 + local.tee $5 i32.const 0 call $std/array/Ref#constructor - local.tee $19 + local.tee $18 call $~lib/rt/pure/__retain i32.store - local.get $3 + local.get $5 i32.const 0 i32.store offset=4 - local.get $3 + local.get $5 i32.const 0 call $std/array/Ref#constructor - local.tee $3 + local.tee $19 call $~lib/rt/pure/__retain i32.store offset=8 - local.get $13 - call $~lib/rt/pure/__retain - local.tee $13 + local.get $3 call $~lib/array/Array#join local.tee $20 i32.const 7296 @@ -15786,23 +15732,22 @@ i32.const 8 i32.const 0 call $~lib/rt/__allocArray - local.tee $11 + call $~lib/rt/pure/__retain + local.tee $5 i32.load offset=4 - local.tee $18 + local.tee $15 i32.const 0 call $std/array/Ref#constructor local.tee $21 call $~lib/rt/pure/__retain i32.store - local.get $18 + local.get $15 i32.const 0 call $std/array/Ref#constructor - local.tee $18 + local.tee $15 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $11 - call $~lib/rt/pure/__retain - local.tee $11 + local.get $5 call $~lib/array/Array#join local.tee $22 i32.const 7376 @@ -15819,39 +15764,39 @@ local.get $0 call $~lib/rt/pure/__release call $~lib/rt/pure/__release - local.get $10 + local.get $8 call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release - local.get $5 + local.get $10 call $~lib/rt/pure/__release - local.get $6 + local.get $11 call $~lib/rt/pure/__release - local.get $14 + local.get $12 call $~lib/rt/pure/__release - local.get $15 + local.get $13 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release - local.get $16 + local.get $14 call $~lib/rt/pure/__release - local.get $12 + local.get $16 call $~lib/rt/pure/__release local.get $17 call $~lib/rt/pure/__release + local.get $18 + call $~lib/rt/pure/__release local.get $19 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $13 - call $~lib/rt/pure/__release local.get $20 call $~lib/rt/pure/__release local.get $21 call $~lib/rt/pure/__release - local.get $18 + local.get $15 call $~lib/rt/pure/__release - local.get $11 + local.get $5 call $~lib/rt/pure/__release local.get $22 call $~lib/rt/pure/__release @@ -15861,33 +15806,31 @@ i32.const 7456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $0 + local.set $5 i32.const 1 i32.const 2 i32.const 3 i32.const 7472 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 + local.set $7 i32.const 2 i32.const 2 i32.const 3 i32.const 7504 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $15 - local.set $3 + local.set $8 i32.const 4 i32.const 2 i32.const 3 i32.const 7536 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 - local.set $8 - local.get $0 + local.set $9 + local.get $5 call $~lib/array/Array#toString - local.tee $12 + local.tee $16 i32.const 5168 call $~lib/string/String.__eq i32.eqz @@ -15899,6 +15842,7 @@ call $~lib/builtins/abort unreachable end + local.get $7 call $~lib/array/Array#toString local.tee $17 i32.const 7184 @@ -15912,9 +15856,9 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $8 call $~lib/array/Array#toString - local.tee $13 + local.tee $18 i32.const 7568 call $~lib/string/String.__eq i32.eqz @@ -15926,7 +15870,7 @@ call $~lib/builtins/abort unreachable end - local.get $8 + local.get $9 call $~lib/array/Array#toString local.tee $19 i32.const 7600 @@ -15946,13 +15890,13 @@ i32.const 7632 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $10 i32.load offset=4 - local.get $1 + local.get $10 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.tee $3 - local.get $3 + local.tee $0 + local.get $0 i32.const 7664 call $~lib/string/String.__eq i32.eqz @@ -15970,14 +15914,14 @@ i32.const 7696 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $11 i32.load offset=4 - local.get $3 + local.get $11 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.tee $8 - local.set $11 - local.get $8 + local.tee $0 + local.set $15 + local.get $0 i32.const 7728 call $~lib/string/String.__eq i32.eqz @@ -15995,14 +15939,14 @@ i32.const 7776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $12 i32.load offset=4 - local.get $8 + local.get $12 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.tee $10 - local.set $18 - local.get $10 + local.tee $0 + local.set $21 + local.get $0 i32.const 7824 call $~lib/string/String.__eq i32.eqz @@ -16020,14 +15964,14 @@ i32.const 7888 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $13 i32.load offset=4 - local.get $10 + local.get $13 i32.load offset=12 call $~lib/util/string/joinIntegerArray - local.tee $9 - local.set $21 - local.get $9 + local.tee $0 + local.set $22 + local.get $0 i32.const 7936 call $~lib/string/String.__eq i32.eqz @@ -16045,9 +15989,9 @@ i32.const 8048 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $22 - call $~lib/array/Array<~lib/string/String | null>#toString local.tee $23 + call $~lib/array/Array<~lib/string/String | null>#toString + local.tee $26 i32.const 8096 call $~lib/string/String.__eq i32.eqz @@ -16065,9 +16009,9 @@ i32.const 8208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $24 - call $~lib/array/Array<~lib/string/String | null>#toString local.tee $27 + call $~lib/array/Array<~lib/string/String | null>#toString + local.tee $28 i32.const 8240 call $~lib/string/String.__eq i32.eqz @@ -16084,38 +16028,37 @@ i32.const 12 i32.const 0 call $~lib/rt/__allocArray - local.tee $9 + call $~lib/rt/pure/__retain + local.tee $0 i32.load offset=4 - local.tee $5 + local.tee $2 i32.const 2 i32.const 2 i32.const 3 i32.const 8272 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $28 + local.tee $29 call $~lib/rt/pure/__retain i32.store - local.get $5 + local.get $2 i32.const 2 i32.const 2 i32.const 3 i32.const 8304 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $29 + local.tee $30 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $9 - call $~lib/rt/pure/__retain - local.tee $9 + local.get $0 i32.load offset=4 - local.get $9 + local.get $0 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> - local.tee $5 - local.set $30 - local.get $5 + local.tee $2 + local.set $31 + local.get $2 i32.const 8336 call $~lib/string/String.__eq i32.eqz @@ -16132,38 +16075,37 @@ i32.const 23 i32.const 0 call $~lib/rt/__allocArray - local.tee $5 + call $~lib/rt/pure/__retain + local.tee $2 i32.load offset=4 - local.tee $6 + local.tee $3 i32.const 2 i32.const 0 i32.const 6 i32.const 8368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $31 + local.tee $32 call $~lib/rt/pure/__retain i32.store - local.get $6 + local.get $3 i32.const 2 i32.const 0 i32.const 6 i32.const 8400 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $32 + local.tee $33 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $5 - call $~lib/rt/pure/__retain - local.tee $5 + local.get $2 i32.load offset=4 - local.get $5 + local.get $2 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array> - local.tee $6 - local.set $33 - local.get $6 + local.tee $3 + local.set $34 + local.get $3 i32.const 8336 call $~lib/string/String.__eq i32.eqz @@ -16180,14 +16122,16 @@ i32.const 25 i32.const 0 call $~lib/rt/__allocArray - local.tee $6 + call $~lib/rt/pure/__retain + local.tee $3 i32.load offset=4 i32.const 1 i32.const 2 i32.const 24 i32.const 0 call $~lib/rt/__allocArray - local.tee $26 + call $~lib/rt/pure/__retain + local.tee $14 i32.load offset=4 i32.const 1 i32.const 2 @@ -16195,22 +16139,20 @@ i32.const 8432 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $34 + local.tee $35 call $~lib/rt/pure/__retain i32.store - local.get $26 + local.get $14 call $~lib/rt/pure/__retain i32.store - local.get $6 - call $~lib/rt/pure/__retain - local.tee $6 + local.get $3 i32.load offset=4 - local.get $6 + local.get $3 i32.load offset=12 call $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>> - local.tee $25 - local.set $26 - local.get $25 + local.tee $24 + local.set $36 + local.get $24 i32.const 7184 call $~lib/string/String.__eq i32.eqz @@ -16222,42 +16164,40 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $5 call $~lib/rt/pure/__release - local.get $14 + local.get $7 call $~lib/rt/pure/__release - local.get $15 + local.get $8 call $~lib/rt/pure/__release - local.get $16 + local.get $9 call $~lib/rt/pure/__release - local.get $12 + local.get $16 call $~lib/rt/pure/__release local.get $17 call $~lib/rt/pure/__release - local.get $13 + local.get $18 call $~lib/rt/pure/__release local.get $19 call $~lib/rt/pure/__release - local.get $1 - call $~lib/rt/pure/__release + local.get $10 call $~lib/rt/pure/__release - local.get $3 call $~lib/rt/pure/__release local.get $11 call $~lib/rt/pure/__release - local.get $8 - call $~lib/rt/pure/__release - local.get $18 + local.get $15 call $~lib/rt/pure/__release - local.get $10 + local.get $12 call $~lib/rt/pure/__release local.get $21 call $~lib/rt/pure/__release + local.get $13 + call $~lib/rt/pure/__release local.get $22 call $~lib/rt/pure/__release local.get $23 call $~lib/rt/pure/__release - local.get $24 + local.get $26 call $~lib/rt/pure/__release local.get $27 call $~lib/rt/pure/__release @@ -16275,32 +16215,36 @@ call $~lib/rt/pure/__release local.get $34 call $~lib/rt/pure/__release - local.get $26 + local.get $35 + call $~lib/rt/pure/__release + local.get $14 + call $~lib/rt/pure/__release + local.get $36 call $~lib/rt/pure/__release global.get $std/array/arr call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $6 call $~lib/rt/pure/__release - local.get $7 + local.get $4 call $~lib/rt/pure/__release - local.get $35 + local.get $25 call $~lib/rt/pure/__release - local.get $9 + local.get $0 call $~lib/rt/pure/__release - local.get $5 + local.get $2 call $~lib/rt/pure/__release - local.get $6 + local.get $3 call $~lib/rt/pure/__release ) - (func $start (; 203 ;) - global.get $~lib/started + (func $~start (; 203 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:std/array ) @@ -16419,7 +16363,7 @@ i32.shl i32.add local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $0 i32.lt_u @@ -16436,7 +16380,7 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end ) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index a7044f5462..615b652d86 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -230,7 +230,7 @@ (global $std/array/arr (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $std/array/i (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/math/random_seeded (mut i32) (i32.const 0)) (global $~lib/math/random_state0_64 (mut i64) (i64.const 0)) (global $~lib/math/random_state1_64 (mut i64) (i64.const 0)) @@ -246,10 +246,11 @@ (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) (global $~lib/builtins/i64.MAX_VALUE i64 (i64.const 9223372036854775807)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 8896)) (global $~lib/heap/__heap_base i32 (i32.const 9108)) - (export "_start" (func $start)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/tlsf/removeBlock (; 6 ;) (param $0 i32) (param $1 i32) (local $2 i32) @@ -970,6 +971,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -1023,71 +1026,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1476,34 +1477,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1512,23 +1514,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1537,11 +1539,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1553,21 +1555,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1575,39 +1576,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1919,6 +1918,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -2137,13 +2137,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -2170,9 +2170,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -2262,39 +2261,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2302,13 +2301,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2349,9 +2348,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2508,13 +2506,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2589,9 +2587,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2630,13 +2627,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2711,9 +2708,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2738,13 +2734,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2819,9 +2815,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3291,6 +3286,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3337,13 +3333,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3354,30 +3350,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3394,37 +3389,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3435,15 +3428,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3460,17 +3453,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3483,16 +3475,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3504,9 +3495,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -4107,6 +4097,7 @@ (func $std/array/isArraysEqual (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -4147,15 +4138,15 @@ return end end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/array/Array#__get @@ -4165,21 +4156,20 @@ i32.ne if i32.const 0 - local.set $4 + local.set $5 local.get $0 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $5 return end local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -4250,13 +4240,13 @@ select end local.set $3 - block $break|0 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $6 + local.get $6 + if local.get $4 local.get $2 i32.const 2 @@ -4268,9 +4258,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__retain @@ -4311,6 +4300,7 @@ (func $std/array/isArraysEqual (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -4351,15 +4341,15 @@ return end end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/array/Array#__get @@ -4369,21 +4359,20 @@ i32.ne if i32.const 0 - local.set $4 + local.set $5 local.get $0 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $5 return end local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -4754,6 +4743,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 i32.load offset=12 local.set $2 @@ -4776,7 +4766,7 @@ i32.shl i32.add local.set $5 - loop $continue|0 + loop $do-continue|0 local.get $4 i32.load call $~lib/rt/pure/__release @@ -4786,7 +4776,9 @@ local.tee $4 local.get $5 i32.lt_u - br_if $continue|0 + local.set $6 + local.get $6 + br_if $do-continue|0 end else local.get $0 @@ -5007,6 +4999,7 @@ (func $std/array/isArraysEqual (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -5047,15 +5040,15 @@ return end end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/array/Array#__get @@ -5065,21 +5058,20 @@ i32.ne if i32.const 0 - local.set $4 + local.set $5 local.get $0 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $5 return end local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -5176,6 +5168,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=12 local.set $1 @@ -5193,22 +5186,22 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 + local.set $5 local.get $2 local.get $3 i32.load i32.store local.get $3 - local.get $4 + local.get $5 i32.store local.get $2 i32.const 4 @@ -5218,9 +5211,8 @@ i32.const 4 i32.sub local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end end local.get $0 @@ -5267,13 +5259,13 @@ local.get $0 i32.load offset=4 local.set $6 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if local.get $6 local.get $2 i32.const 2 @@ -5290,9 +5282,8 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 ) @@ -5337,13 +5328,13 @@ local.get $0 i32.load offset=4 local.set $6 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if local.get $6 local.get $2 i32.const 2 @@ -5360,9 +5351,8 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 ) @@ -5407,13 +5397,13 @@ local.get $0 i32.load offset=4 local.set $6 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if local.get $6 local.get $2 i32.const 3 @@ -5430,9 +5420,8 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 ) @@ -5486,13 +5475,13 @@ local.get $0 i32.load offset=4 local.set $4 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $4 local.get $2 i32.const 2 @@ -5522,9 +5511,8 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 return @@ -5570,13 +5558,13 @@ local.get $0 i32.load offset=4 local.set $4 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $4 local.get $2 i32.const 3 @@ -5606,9 +5594,8 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 return @@ -6075,28 +6062,28 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - i32.const 0 - local.set $2 + i32.const 0 + local.set $2 + local.get $0 + i32.load offset=12 + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + local.tee $4 local.get $0 i32.load offset=12 - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - local.tee $4 - local.get $0 - i32.load offset=12 - local.tee $5 - local.get $4 - local.get $5 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + local.tee $5 + local.get $4 + local.get $5 + i32.lt_s + select + i32.lt_s + local.set $4 + local.get $4 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $2 @@ -6116,9 +6103,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 ) @@ -6212,28 +6198,28 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - i32.const 0 - local.set $2 + i32.const 0 + local.set $2 + local.get $0 + i32.load offset=12 + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + local.tee $4 local.get $0 i32.load offset=12 - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - local.tee $4 - local.get $0 - i32.load offset=12 - local.tee $5 - local.get $4 - local.get $5 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + local.tee $5 + local.get $4 + local.get $5 + i32.lt_s + select + i32.lt_s + local.set $4 + local.get $4 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $2 @@ -6254,9 +6240,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 ) @@ -6337,28 +6322,28 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - i32.const 0 - local.set $2 - local.get $0 - i32.load offset=12 - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - local.tee $4 - local.get $0 - i32.load offset=12 - local.tee $5 - local.get $4 - local.get $5 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + local.get $0 + i32.load offset=12 + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + local.tee $4 + local.get $0 + i32.load offset=12 + local.tee $5 + local.get $4 + local.get $5 + i32.lt_s + select + i32.lt_s + local.set $4 + local.get $4 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $2 @@ -6378,9 +6363,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 ) @@ -6459,28 +6443,28 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - i32.const 0 - local.set $2 + i32.const 0 + local.set $2 + local.get $0 + i32.load offset=12 + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + local.tee $4 local.get $0 i32.load offset=12 - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - local.tee $4 - local.get $0 - i32.load offset=12 - local.tee $5 - local.get $4 - local.get $5 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + local.tee $5 + local.get $4 + local.get $5 + i32.lt_s + select + i32.lt_s + local.set $4 + local.get $4 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $2 @@ -6496,9 +6480,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $start:std/array~anonymous|17 (; 109 ;) (param $0 i32) (param $1 i32) (param $2 i32) @@ -6543,6 +6526,7 @@ ) (func $start:std/array~anonymous|20 (; 112 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) + (local $4 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -6550,15 +6534,15 @@ i32.const 0 i32.eq if - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - i32.const 4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + i32.const 4 + i32.lt_s + local.set $4 + local.get $4 + if local.get $2 call $~lib/array/Array#pop drop @@ -6566,19 +6550,18 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end - block $break|1 - i32.const 0 - local.set $3 - loop $loop|1 - local.get $3 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + i32.const 100 + i32.lt_s + local.set $4 + local.get $4 + if local.get $2 i32.const 100 local.get $3 @@ -6589,19 +6572,18 @@ i32.const 1 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - i32.const 0 - local.set $3 - loop $loop|2 - local.get $3 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + i32.const 100 + i32.lt_s + local.set $4 + local.get $4 + if local.get $2 call $~lib/array/Array#pop drop @@ -6609,19 +6591,18 @@ i32.const 1 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end - block $break|3 - i32.const 0 - local.set $3 - loop $loop|3 - local.get $3 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|3 + i32.const 0 + local.set $3 + loop $for-loop|3 + local.get $3 + i32.const 100 + i32.lt_s + local.set $4 + local.get $4 + if local.get $2 local.get $3 i32.const 200 @@ -6632,9 +6613,8 @@ i32.const 1 i32.add local.set $3 - br $loop|3 + br $for-loop|3 end - unreachable end end local.get $1 @@ -6690,25 +6670,25 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - local.tee $6 - local.get $0 - i32.load offset=12 - local.tee $7 - local.get $6 - local.get $7 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + local.tee $6 + local.get $0 + i32.load offset=12 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_s + select + i32.lt_s + local.set $6 + local.get $6 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $5 @@ -6732,9 +6712,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -6810,25 +6789,25 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - local.tee $6 - local.get $0 - i32.load offset=12 - local.tee $7 - local.get $6 - local.get $7 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + local.tee $6 + local.get $0 + i32.load offset=12 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_s + select + i32.lt_s + local.set $6 + local.get $6 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load offset=4 local.get $5 @@ -6840,21 +6819,20 @@ local.get $0 local.get $1 call_indirect (type $i32_i32_i32_=>_i32) - local.set $6 + local.set $7 local.get $4 local.get $5 i32.const 2 i32.shl i32.add - local.get $6 + local.get $7 i32.store local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -6917,26 +6895,26 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $2 - block $break|0 - i32.const 0 - local.set $3 + i32.const 0 + local.set $3 + local.get $0 + i32.load offset=12 + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + local.tee $5 local.get $0 i32.load offset=12 - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - local.tee $5 - local.get $0 - i32.load offset=12 - local.tee $6 - local.get $5 - local.get $6 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + local.tee $6 + local.get $5 + local.get $6 + i32.lt_s + select + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 i32.load offset=4 local.get $3 @@ -6944,17 +6922,17 @@ i32.shl i32.add i32.load - local.set $5 + local.set $6 i32.const 3 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 local.get $3 local.get $0 local.get $1 call_indirect (type $i32_i32_i32_=>_i32) if local.get $2 - local.get $5 + local.get $6 call $~lib/array/Array#push drop end @@ -6962,9 +6940,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $2 ) @@ -7047,29 +7024,29 @@ (local $7 i32) local.get $2 local.set $3 - block $break|0 - i32.const 0 - local.set $4 + i32.const 0 + local.set $4 + local.get $0 + i32.load offset=12 + local.set $5 + loop $for-loop|0 + local.get $4 + local.get $5 + local.tee $6 local.get $0 i32.load offset=12 - local.set $5 - loop $loop|0 - local.get $4 - local.get $5 - local.tee $6 - local.get $0 - i32.load offset=12 - local.tee $7 - local.get $6 - local.get $7 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 - i32.const 4 - global.set $~lib/argc - local.get $3 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_s + select + i32.lt_s + local.set $6 + local.get $6 + if + i32.const 4 + global.set $~argumentsLength + local.get $3 local.get $0 i32.load offset=4 local.get $4 @@ -7086,9 +7063,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -7131,28 +7107,28 @@ (local $7 i32) local.get $2 local.set $3 - block $break|0 - i32.const 0 - local.set $4 + i32.const 0 + local.set $4 + local.get $0 + i32.load offset=12 + local.set $5 + loop $for-loop|0 + local.get $4 + local.get $5 + local.tee $6 local.get $0 i32.load offset=12 - local.set $5 - loop $loop|0 - local.get $4 - local.get $5 - local.tee $6 - local.get $0 - i32.load offset=12 - local.tee $7 - local.get $6 - local.get $7 - i32.lt_s - select - i32.lt_s - i32.eqz - br_if $break|0 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_s + select + i32.lt_s + local.set $6 + local.get $6 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $0 i32.load offset=4 @@ -7170,9 +7146,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -7256,22 +7231,23 @@ (func $~lib/array/Array#reduceRight (; 137 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $2 local.set $3 - block $break|0 - local.get $0 - i32.load offset=12 - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $4 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $4 + i32.const 0 + i32.ge_s + local.set $5 + local.get $5 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $0 i32.load offset=4 @@ -7289,9 +7265,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -7329,22 +7304,23 @@ (func $~lib/array/Array#reduceRight (; 140 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $2 local.set $3 - block $break|0 - local.get $0 - i32.load offset=12 - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $4 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $4 + i32.const 0 + i32.ge_s + local.set $5 + local.get $5 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $0 i32.load offset=4 @@ -7362,9 +7338,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -7550,90 +7525,92 @@ ) (func $~lib/util/sort/insertionSort (; 148 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - (local $4 f32) - (local $5 i32) - (local $6 f32) + (local $4 i32) + (local $5 f32) + (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 f32) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 2 i32.shl i32.add f32.load - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 2 - i32.shl - i32.add - f32.load - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $f32_f32_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 2 i32.shl i32.add - local.get $6 - f32.store - else - br $break|1 + f32.load + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $f32_f32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + f32.store + else + br $while-break|1 + end + br $while-continue|1 end - br $continue|1 end - unreachable end local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $5 f32.store local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $~lib/util/sort/weakHeapSort (; 149 ;) (param $0 i32) (param $1 i32) (param $2 i32) @@ -7642,9 +7619,11 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 f32) + (local $8 i32) (local $9 f32) (local $10 f32) + (local $11 i32) + (local $12 f32) local.get $1 i32.const 31 i32.add @@ -7661,73 +7640,72 @@ i32.const 0 local.get $3 call $~lib/memory/memory.fill - block $break|0 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|0 - local.get $5 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 0 + i32.gt_s + local.set $6 + local.get $6 + if local.get $5 - local.set $6 - block $break|1 - loop $continue|1 - local.get $6 - i32.const 1 - i32.and - local.get $4 - local.get $6 - i32.const 6 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load - local.get $6 - i32.const 1 - i32.shr_s - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.eq - i32.eqz - br_if $break|1 - local.get $6 + local.set $7 + loop $while-continue|1 + local.get $7 + i32.const 1 + i32.and + local.get $4 + local.get $7 + i32.const 6 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $7 + i32.const 1 + i32.shr_s + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.eq + local.set $8 + local.get $8 + if + local.get $7 i32.const 1 i32.shr_s - local.set $6 - br $continue|1 + local.set $7 + br $while-continue|1 end - unreachable end - local.get $6 + local.get $7 i32.const 1 i32.shr_s - local.set $7 + local.set $8 local.get $0 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add f32.load - local.set $8 + local.set $9 local.get $0 local.get $5 i32.const 2 i32.shl i32.add f32.load - local.set $9 + local.set $10 i32.const 2 - global.set $~lib/argc - local.get $8 + global.set $~argumentsLength local.get $9 + local.get $10 local.get $2 call_indirect (type $f32_f32_=>_i32) i32.const 0 @@ -7760,38 +7738,37 @@ i32.const 2 i32.shl i32.add - local.get $8 + local.get $9 f32.store local.get $0 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 f32.store end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end - block $break|2 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|2 - local.get $5 - i32.const 2 - i32.ge_s - i32.eqz - br_if $break|2 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|2 + local.get $5 + i32.const 2 + i32.ge_s + local.set $6 + local.get $6 + if local.get $0 f32.load - local.set $9 + local.set $10 local.get $0 local.get $0 local.get $5 @@ -7805,76 +7782,75 @@ i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 f32.store i32.const 1 - local.set $7 - block $break|3 - loop $continue|3 - local.get $7 - i32.const 1 - i32.shl - local.get $4 - local.get $7 - i32.const 5 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load + local.set $8 + loop $while-continue|3 + local.get $8 + i32.const 1 + i32.shl + local.get $4 + local.get $8 + i32.const 5 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $8 + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.add + local.tee $7 + local.get $5 + i32.lt_s + local.set $11 + local.get $11 + if local.get $7 - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.add - local.tee $6 - local.get $5 - i32.lt_s - i32.eqz - br_if $break|3 - local.get $6 - local.set $7 - br $continue|3 + local.set $8 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $7 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $8 + i32.const 0 + i32.gt_s + local.set $11 + local.get $11 + if local.get $0 f32.load - local.set $9 + local.set $10 local.get $0 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add f32.load - local.set $8 + local.set $9 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength + local.get $10 local.get $9 - local.get $8 local.get $2 call_indirect (type $f32_f32_=>_i32) i32.const 0 i32.lt_s if local.get $4 - local.get $7 + local.get $8 i32.const 5 i32.shr_s i32.const 2 i32.shl i32.add local.get $4 - local.get $7 + local.get $8 i32.const 5 i32.shr_s i32.const 2 @@ -7882,50 +7858,48 @@ i32.add i32.load i32.const 1 - local.get $7 + local.get $8 i32.const 31 i32.and i32.shl i32.xor i32.store local.get $0 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 f32.store local.get $0 - local.get $8 + local.get $9 f32.store end - local.get $7 + local.get $8 i32.const 1 i32.shr_s - local.set $7 - br $continue|4 + local.set $8 + br $while-continue|4 end - unreachable end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/rt/tlsf/__free local.get $0 f32.load offset=4 - local.set $10 + local.set $12 local.get $0 local.get $0 f32.load f32.store offset=4 local.get $0 - local.get $10 + local.get $12 f32.store ) (func $~lib/array/Array#sort (; 150 ;) (param $0 i32) (param $1 i32) (result i32) @@ -7961,7 +7935,7 @@ f32.load local.set $5 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 local.get $1 @@ -8040,7 +8014,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable @@ -8057,8 +8031,9 @@ ) (func $std/array/isArraysEqual (; 153 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 f32) - (local $5 i32) + (local $4 i32) + (local $5 f32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -8099,34 +8074,34 @@ return end end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if + block $for-continue|0 local.get $0 local.get $3 call $~lib/array/Array#__get - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f32.ne if (result i32) local.get $1 local.get $3 call $~lib/array/Array#__get - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f32.ne else i32.const 0 end if - br $continue|0 + br $for-continue|0 end local.get $0 local.get $3 @@ -8137,12 +8112,12 @@ f32.ne if i32.const 0 - local.set $5 + local.set $6 local.get $0 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $6 return end end @@ -8150,9 +8125,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -8164,90 +8138,92 @@ ) (func $~lib/util/sort/insertionSort (; 154 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - (local $4 f64) - (local $5 i32) - (local $6 f64) + (local $4 i32) + (local $5 f64) + (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 f64) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 3 i32.shl i32.add f64.load - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 3 - i32.shl - i32.add - f64.load - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $f64_f64_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 3 i32.shl i32.add - local.get $6 - f64.store - else - br $break|1 + f64.load + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $f64_f64_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 3 + i32.shl + i32.add + local.get $8 + f64.store + else + br $while-break|1 + end + br $while-continue|1 end - br $continue|1 end - unreachable end local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.add i32.const 3 i32.shl i32.add - local.get $4 + local.get $5 f64.store local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $~lib/util/sort/weakHeapSort (; 155 ;) (param $0 i32) (param $1 i32) (param $2 i32) @@ -8256,9 +8232,11 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 f64) + (local $8 i32) (local $9 f64) (local $10 f64) + (local $11 i32) + (local $12 f64) local.get $1 i32.const 31 i32.add @@ -8275,73 +8253,72 @@ i32.const 0 local.get $3 call $~lib/memory/memory.fill - block $break|0 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|0 - local.get $5 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 0 + i32.gt_s + local.set $6 + local.get $6 + if local.get $5 - local.set $6 - block $break|1 - loop $continue|1 - local.get $6 - i32.const 1 - i32.and - local.get $4 - local.get $6 - i32.const 6 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load - local.get $6 - i32.const 1 - i32.shr_s - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.eq - i32.eqz - br_if $break|1 - local.get $6 + local.set $7 + loop $while-continue|1 + local.get $7 + i32.const 1 + i32.and + local.get $4 + local.get $7 + i32.const 6 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $7 + i32.const 1 + i32.shr_s + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.eq + local.set $8 + local.get $8 + if + local.get $7 i32.const 1 i32.shr_s - local.set $6 - br $continue|1 + local.set $7 + br $while-continue|1 end - unreachable end - local.get $6 + local.get $7 i32.const 1 i32.shr_s - local.set $7 + local.set $8 local.get $0 - local.get $7 + local.get $8 i32.const 3 i32.shl i32.add f64.load - local.set $8 + local.set $9 local.get $0 local.get $5 i32.const 3 i32.shl i32.add f64.load - local.set $9 + local.set $10 i32.const 2 - global.set $~lib/argc - local.get $8 + global.set $~argumentsLength local.get $9 + local.get $10 local.get $2 call_indirect (type $f64_f64_=>_i32) i32.const 0 @@ -8374,38 +8351,37 @@ i32.const 3 i32.shl i32.add - local.get $8 + local.get $9 f64.store local.get $0 - local.get $7 + local.get $8 i32.const 3 i32.shl i32.add - local.get $9 + local.get $10 f64.store end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end - block $break|2 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|2 - local.get $5 - i32.const 2 - i32.ge_s - i32.eqz - br_if $break|2 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|2 + local.get $5 + i32.const 2 + i32.ge_s + local.set $6 + local.get $6 + if local.get $0 f64.load - local.set $9 + local.set $10 local.get $0 local.get $0 local.get $5 @@ -8419,76 +8395,75 @@ i32.const 3 i32.shl i32.add - local.get $9 + local.get $10 f64.store i32.const 1 - local.set $7 - block $break|3 - loop $continue|3 - local.get $7 - i32.const 1 - i32.shl - local.get $4 - local.get $7 - i32.const 5 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load + local.set $8 + loop $while-continue|3 + local.get $8 + i32.const 1 + i32.shl + local.get $4 + local.get $8 + i32.const 5 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $8 + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.add + local.tee $7 + local.get $5 + i32.lt_s + local.set $11 + local.get $11 + if local.get $7 - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.add - local.tee $6 - local.get $5 - i32.lt_s - i32.eqz - br_if $break|3 - local.get $6 - local.set $7 - br $continue|3 + local.set $8 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $7 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $8 + i32.const 0 + i32.gt_s + local.set $11 + local.get $11 + if local.get $0 f64.load - local.set $9 + local.set $10 local.get $0 - local.get $7 + local.get $8 i32.const 3 i32.shl i32.add f64.load - local.set $8 + local.set $9 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength + local.get $10 local.get $9 - local.get $8 local.get $2 call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s if local.get $4 - local.get $7 + local.get $8 i32.const 5 i32.shr_s i32.const 2 i32.shl i32.add local.get $4 - local.get $7 + local.get $8 i32.const 5 i32.shr_s i32.const 2 @@ -8496,50 +8471,48 @@ i32.add i32.load i32.const 1 - local.get $7 + local.get $8 i32.const 31 i32.and i32.shl i32.xor i32.store local.get $0 - local.get $7 + local.get $8 i32.const 3 i32.shl i32.add - local.get $9 + local.get $10 f64.store local.get $0 - local.get $8 + local.get $9 f64.store end - local.get $7 + local.get $8 i32.const 1 i32.shr_s - local.set $7 - br $continue|4 + local.set $8 + br $while-continue|4 end - unreachable end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/rt/tlsf/__free local.get $0 f64.load offset=8 - local.set $10 + local.set $12 local.get $0 local.get $0 f64.load f64.store offset=8 local.get $0 - local.get $10 + local.get $12 f64.store ) (func $~lib/array/Array#sort (; 156 ;) (param $0 i32) (param $1 i32) (result i32) @@ -8575,7 +8548,7 @@ f64.load local.set $5 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 local.get $1 @@ -8654,7 +8627,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable @@ -8704,8 +8677,9 @@ ) (func $std/array/isArraysEqual (; 162 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) - (local $4 f64) - (local $5 i32) + (local $4 i32) + (local $5 f64) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -8746,34 +8720,34 @@ return end end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if + block $for-continue|0 local.get $0 local.get $3 call $~lib/array/Array#__get - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.ne if (result i32) local.get $1 local.get $3 call $~lib/array/Array#__get - local.tee $4 - local.get $4 + local.tee $5 + local.get $5 f64.ne else i32.const 0 end if - br $continue|0 + br $for-continue|0 end local.get $0 local.get $3 @@ -8784,12 +8758,12 @@ f64.ne if i32.const 0 - local.set $5 + local.set $6 local.get $0 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $6 return end end @@ -8797,9 +8771,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -8815,86 +8788,88 @@ (local $5 i32) (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 i32) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 2 i32.shl i32.add i32.load - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $i32_i32_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 2 i32.shl i32.add - local.get $6 - i32.store - else - br $break|1 - end - br $continue|1 - end - unreachable - end - local.get $0 - local.get $5 - i32.const 1 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $4 - i32.store - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $loop|0 - end - unreachable + i32.load + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store + else + br $while-break|1 + end + br $while-continue|1 + end + end + end + local.get $0 + local.get $6 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end end ) (func $~lib/util/sort/weakHeapSort (; 164 ;) (param $0 i32) (param $1 i32) (param $2 i32) @@ -8906,6 +8881,8 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) + (local $12 i32) local.get $1 i32.const 31 i32.add @@ -8922,73 +8899,72 @@ i32.const 0 local.get $3 call $~lib/memory/memory.fill - block $break|0 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|0 - local.get $5 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 0 + i32.gt_s + local.set $6 + local.get $6 + if local.get $5 - local.set $6 - block $break|1 - loop $continue|1 - local.get $6 - i32.const 1 - i32.and - local.get $4 - local.get $6 - i32.const 6 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load - local.get $6 - i32.const 1 - i32.shr_s - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.eq - i32.eqz - br_if $break|1 - local.get $6 + local.set $7 + loop $while-continue|1 + local.get $7 + i32.const 1 + i32.and + local.get $4 + local.get $7 + i32.const 6 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $7 + i32.const 1 + i32.shr_s + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.eq + local.set $8 + local.get $8 + if + local.get $7 i32.const 1 i32.shr_s - local.set $6 - br $continue|1 + local.set $7 + br $while-continue|1 end - unreachable end - local.get $6 + local.get $7 i32.const 1 i32.shr_s - local.set $7 + local.set $8 local.get $0 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.set $8 + local.set $9 local.get $0 local.get $5 i32.const 2 i32.shl i32.add i32.load - local.set $9 + local.set $10 i32.const 2 - global.set $~lib/argc - local.get $8 + global.set $~argumentsLength local.get $9 + local.get $10 local.get $2 call_indirect (type $i32_i32_=>_i32) i32.const 0 @@ -9021,38 +8997,37 @@ i32.const 2 i32.shl i32.add - local.get $8 + local.get $9 i32.store local.get $0 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 i32.store end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end - block $break|2 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|2 - local.get $5 - i32.const 2 - i32.ge_s - i32.eqz - br_if $break|2 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|2 + local.get $5 + i32.const 2 + i32.ge_s + local.set $6 + local.get $6 + if local.get $0 i32.load - local.set $9 + local.set $10 local.get $0 local.get $0 local.get $5 @@ -9066,76 +9041,75 @@ i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 i32.store i32.const 1 - local.set $8 - block $break|3 - loop $continue|3 - local.get $8 - i32.const 1 - i32.shl - local.get $4 - local.get $8 - i32.const 5 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load + local.set $9 + loop $while-continue|3 + local.get $9 + i32.const 1 + i32.shl + local.get $4 + local.get $9 + i32.const 5 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $9 + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.add + local.tee $8 + local.get $5 + i32.lt_s + local.set $7 + local.get $7 + if local.get $8 - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.add - local.tee $7 - local.get $5 - i32.lt_s - i32.eqz - br_if $break|3 - local.get $7 - local.set $8 - br $continue|3 + local.set $9 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $8 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $9 + i32.const 0 + i32.gt_s + local.set $7 + local.get $7 + if local.get $0 i32.load - local.set $9 + local.set $10 local.get $0 - local.get $8 + local.get $9 i32.const 2 i32.shl i32.add i32.load - local.set $6 + local.set $11 i32.const 2 - global.set $~lib/argc - local.get $9 - local.get $6 + global.set $~argumentsLength + local.get $10 + local.get $11 local.get $2 call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if local.get $4 - local.get $8 + local.get $9 i32.const 5 i32.shr_s i32.const 2 i32.shl i32.add local.get $4 - local.get $8 + local.get $9 i32.const 5 i32.shr_s i32.const 2 @@ -9143,50 +9117,48 @@ i32.add i32.load i32.const 1 - local.get $8 + local.get $9 i32.const 31 i32.and i32.shl i32.xor i32.store local.get $0 - local.get $8 + local.get $9 i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 i32.store local.get $0 - local.get $6 + local.get $11 i32.store end - local.get $8 + local.get $9 i32.const 1 i32.shr_s - local.set $8 - br $continue|4 + local.set $9 + br $while-continue|4 end - unreachable end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/rt/tlsf/__free local.get $0 i32.load offset=4 - local.set $10 + local.set $12 local.get $0 local.get $0 i32.load i32.store offset=4 local.get $0 - local.get $10 + local.get $12 i32.store ) (func $~lib/array/Array#sort (; 165 ;) (param $0 i32) (param $1 i32) (result i32) @@ -9220,7 +9192,7 @@ i32.load local.set $5 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 local.get $1 @@ -9271,7 +9243,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable @@ -9292,86 +9264,88 @@ (local $5 i32) (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 i32) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 2 i32.shl i32.add i32.load - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $i32_i32_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 2 i32.shl i32.add - local.get $6 - i32.store - else - br $break|1 + i32.load + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store + else + br $while-break|1 + end + br $while-continue|1 end - br $continue|1 end - unreachable end local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $5 i32.store local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $~lib/util/sort/weakHeapSort (; 169 ;) (param $0 i32) (param $1 i32) (param $2 i32) @@ -9383,6 +9357,8 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) + (local $12 i32) local.get $1 i32.const 31 i32.add @@ -9399,73 +9375,72 @@ i32.const 0 local.get $3 call $~lib/memory/memory.fill - block $break|0 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|0 - local.get $5 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 0 + i32.gt_s + local.set $6 + local.get $6 + if local.get $5 - local.set $6 - block $break|1 - loop $continue|1 - local.get $6 - i32.const 1 - i32.and - local.get $4 - local.get $6 - i32.const 6 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load - local.get $6 - i32.const 1 - i32.shr_s - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.eq - i32.eqz - br_if $break|1 - local.get $6 + local.set $7 + loop $while-continue|1 + local.get $7 + i32.const 1 + i32.and + local.get $4 + local.get $7 + i32.const 6 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $7 + i32.const 1 + i32.shr_s + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.eq + local.set $8 + local.get $8 + if + local.get $7 i32.const 1 i32.shr_s - local.set $6 - br $continue|1 + local.set $7 + br $while-continue|1 end - unreachable end - local.get $6 + local.get $7 i32.const 1 i32.shr_s - local.set $7 + local.set $8 local.get $0 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i32.load - local.set $8 + local.set $9 local.get $0 local.get $5 i32.const 2 i32.shl i32.add i32.load - local.set $9 + local.set $10 i32.const 2 - global.set $~lib/argc - local.get $8 + global.set $~argumentsLength local.get $9 + local.get $10 local.get $2 call_indirect (type $i32_i32_=>_i32) i32.const 0 @@ -9498,38 +9473,37 @@ i32.const 2 i32.shl i32.add - local.get $8 + local.get $9 i32.store local.get $0 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 i32.store end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end - block $break|2 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|2 - local.get $5 - i32.const 2 - i32.ge_s - i32.eqz - br_if $break|2 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|2 + local.get $5 + i32.const 2 + i32.ge_s + local.set $6 + local.get $6 + if local.get $0 i32.load - local.set $9 + local.set $10 local.get $0 local.get $0 local.get $5 @@ -9543,76 +9517,75 @@ i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 i32.store i32.const 1 - local.set $8 - block $break|3 - loop $continue|3 - local.get $8 - i32.const 1 - i32.shl - local.get $4 - local.get $8 - i32.const 5 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load + local.set $9 + loop $while-continue|3 + local.get $9 + i32.const 1 + i32.shl + local.get $4 + local.get $9 + i32.const 5 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $9 + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.add + local.tee $8 + local.get $5 + i32.lt_s + local.set $7 + local.get $7 + if local.get $8 - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.add - local.tee $7 - local.get $5 - i32.lt_s - i32.eqz - br_if $break|3 - local.get $7 - local.set $8 - br $continue|3 + local.set $9 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $8 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $9 + i32.const 0 + i32.gt_s + local.set $7 + local.get $7 + if local.get $0 i32.load - local.set $9 + local.set $10 local.get $0 - local.get $8 + local.get $9 i32.const 2 i32.shl i32.add i32.load - local.set $6 + local.set $11 i32.const 2 - global.set $~lib/argc - local.get $9 - local.get $6 + global.set $~argumentsLength + local.get $10 + local.get $11 local.get $2 call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.lt_s if local.get $4 - local.get $8 + local.get $9 i32.const 5 i32.shr_s i32.const 2 i32.shl i32.add local.get $4 - local.get $8 + local.get $9 i32.const 5 i32.shr_s i32.const 2 @@ -9620,50 +9593,48 @@ i32.add i32.load i32.const 1 - local.get $8 + local.get $9 i32.const 31 i32.and i32.shl i32.xor i32.store local.get $0 - local.get $8 + local.get $9 i32.const 2 i32.shl i32.add - local.get $9 + local.get $10 i32.store local.get $0 - local.get $6 + local.get $11 i32.store end - local.get $8 + local.get $9 i32.const 1 i32.shr_s - local.set $8 - br $continue|4 + local.set $9 + br $while-continue|4 end - unreachable end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/rt/tlsf/__free local.get $0 i32.load offset=4 - local.set $10 + local.set $12 local.get $0 local.get $0 i32.load i32.store offset=4 local.get $0 - local.get $10 + local.get $12 i32.store ) (func $~lib/array/Array#sort (; 170 ;) (param $0 i32) (param $1 i32) (result i32) @@ -9697,7 +9668,7 @@ i32.load local.set $5 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 local.get $1 @@ -9752,7 +9723,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable @@ -9770,19 +9741,20 @@ (func $std/array/createReverseOrderedArray (; 173 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) i32.const 0 local.get $0 call $~lib/array/Array#constructor local.set $1 - block $break|0 - i32.const 0 - local.set $2 - loop $loop|0 - local.get $2 - local.get $0 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + loop $for-loop|0 + local.get $2 + local.get $0 + i32.lt_s + local.set $3 + local.get $3 + if local.get $1 local.get $2 local.get $0 @@ -9795,9 +9767,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -9859,19 +9830,20 @@ (func $std/array/createRandomOrderedArray (; 175 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) i32.const 0 local.get $0 call $~lib/array/Array#constructor local.set $1 - block $break|0 - i32.const 0 - local.set $2 - loop $loop|0 - local.get $2 - local.get $0 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + loop $for-loop|0 + local.get $2 + local.get $0 + i32.lt_s + local.set $3 + local.get $3 + if local.get $1 local.get $2 call $~lib/math/NativeMath.random @@ -9884,9 +9856,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -9899,23 +9870,24 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 - block $break|0 - i32.const 1 - local.set $2 - local.get $0 - call $~lib/array/Array#get:length - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 1 + local.set $2 + local.get $0 + call $~lib/array/Array#get:length + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $2 i32.const 1 @@ -9930,19 +9902,18 @@ i32.gt_s if i32.const 0 - local.set $4 + local.set $5 local.get $0 call $~lib/rt/pure/__release - local.get $4 + local.get $5 return end local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -10105,24 +10076,25 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/array/Array<~lib/array/Array>#constructor local.set $1 - block $break|0 - i32.const 0 - local.set $2 - loop $loop|0 - local.get $2 - local.get $0 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + loop $for-loop|0 + local.get $2 + local.get $0 + i32.lt_s + local.set $3 + local.get $3 + if i32.const 0 i32.const 1 call $~lib/array/Array#constructor - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.const 0 local.get $0 i32.const 1 @@ -10132,17 +10104,16 @@ call $~lib/array/Array#__set local.get $1 local.get $2 - local.get $3 + local.get $4 call $~lib/array/Array<~lib/array/Array>#__set - local.get $3 + local.get $4 call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -10174,15 +10145,17 @@ (local $5 i32) (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 i32) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 2 @@ -10190,78 +10163,78 @@ i32.add i32.load call $~lib/rt/pure/__retain - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load - call $~lib/rt/pure/__retain - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $i32_i32_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 2 i32.shl i32.add - local.get $6 - i32.store - else - local.get $6 + i32.load + call $~lib/rt/pure/__retain + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store + else + local.get $8 + call $~lib/rt/pure/__release + br $while-break|1 + end + local.get $8 call $~lib/rt/pure/__release - br $break|1 + br $while-continue|1 end - local.get $6 - call $~lib/rt/pure/__release - br $continue|1 end - unreachable end local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $5 i32.store - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $~lib/array/Array<~lib/array/Array>#sort (; 190 ;) (param $0 i32) (param $1 i32) (result i32) @@ -10297,7 +10270,7 @@ call $~lib/rt/pure/__retain local.set $5 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 local.get $1 @@ -10387,60 +10360,60 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 - block $break|0 - i32.const 1 - local.set $2 - local.get $0 - call $~lib/array/Array<~lib/array/Array>#get:length - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 1 + local.set $2 + local.get $0 + call $~lib/array/Array<~lib/array/Array>#get:length + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $2 i32.const 1 i32.sub call $~lib/array/Array<~lib/array/Array>#__get - local.tee $4 + local.tee $5 local.get $0 local.get $2 call $~lib/array/Array<~lib/array/Array>#__get - local.tee $5 + local.tee $6 local.get $1 call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s if i32.const 0 - local.set $6 + local.set $7 local.get $0 call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 + call $~lib/rt/pure/__release + local.get $7 return end - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -10585,19 +10558,20 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/array/Array>#constructor local.set $1 - block $break|0 - i32.const 0 - local.set $2 - loop $loop|0 - local.get $2 - local.get $0 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + loop $for-loop|0 + local.get $2 + local.get $0 + i32.lt_s + local.set $3 + local.get $3 + if local.get $1 local.get $2 i32.const 0 @@ -10607,17 +10581,16 @@ local.get $2 i32.sub call $std/array/Proxy#constructor - local.tee $3 + local.tee $4 call $~lib/array/Array>#__set - local.get $3 + local.get $4 call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -10647,15 +10620,17 @@ (local $5 i32) (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 i32) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 2 @@ -10663,78 +10638,78 @@ i32.add i32.load call $~lib/rt/pure/__retain - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load - call $~lib/rt/pure/__retain - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $i32_i32_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 2 i32.shl i32.add - local.get $6 - i32.store - else - local.get $6 + i32.load + call $~lib/rt/pure/__retain + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store + else + local.get $8 + call $~lib/rt/pure/__release + br $while-break|1 + end + local.get $8 call $~lib/rt/pure/__release - br $break|1 + br $while-continue|1 end - local.get $6 - call $~lib/rt/pure/__release - br $continue|1 end - unreachable end local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $5 i32.store - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $~lib/array/Array>#sort (; 203 ;) (param $0 i32) (param $1 i32) (result i32) @@ -10770,7 +10745,7 @@ call $~lib/rt/pure/__retain local.set $5 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 local.get $1 @@ -10860,60 +10835,60 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 - block $break|0 - i32.const 1 - local.set $2 - local.get $0 - call $~lib/array/Array>#get:length - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 1 + local.set $2 + local.get $0 + call $~lib/array/Array>#get:length + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $2 i32.const 1 i32.sub call $~lib/array/Array>#__get - local.tee $4 + local.tee $5 local.get $0 local.get $2 call $~lib/array/Array>#__get - local.tee $5 + local.tee $6 local.get $1 call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s if i32.const 0 - local.set $6 + local.set $7 local.get $0 call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 + call $~lib/rt/pure/__release + local.get $7 return end - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -10952,15 +10927,17 @@ (local $5 i32) (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 i32) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 2 @@ -10968,78 +10945,78 @@ i32.add i32.load call $~lib/rt/pure/__retain - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load - call $~lib/rt/pure/__retain - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $i32_i32_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 2 i32.shl i32.add - local.get $6 - i32.store - else - local.get $6 + i32.load + call $~lib/rt/pure/__retain + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store + else + local.get $8 + call $~lib/rt/pure/__release + br $while-break|1 + end + local.get $8 call $~lib/rt/pure/__release - br $break|1 + br $while-continue|1 end - local.get $6 - call $~lib/rt/pure/__release - br $continue|1 end - unreachable end local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $5 i32.store - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $~lib/array/Array<~lib/string/String | null>#sort (; 210 ;) (param $0 i32) (param $1 i32) (result i32) @@ -11075,7 +11052,7 @@ call $~lib/rt/pure/__retain local.set $5 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 local.get $1 @@ -11153,60 +11130,60 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 - block $break|0 - i32.const 1 - local.set $2 - local.get $0 - call $~lib/array/Array<~lib/string/String | null>#get:length - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 1 + local.set $2 + local.get $0 + call $~lib/array/Array<~lib/string/String | null>#get:length + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $2 i32.const 1 i32.sub call $~lib/array/Array<~lib/string/String | null>#__get - local.tee $4 + local.tee $5 local.get $0 local.get $2 call $~lib/array/Array<~lib/string/String | null>#__get - local.tee $5 + local.tee $6 local.get $1 call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s if i32.const 0 - local.set $6 + local.set $7 local.get $0 call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 + call $~lib/rt/pure/__release + local.get $7 return end - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -11253,6 +11230,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -11287,15 +11265,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -11312,39 +11290,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 - local.get $6 - i32.load16_u local.set $8 - local.get $7 + local.get $6 + i32.load16_u + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $9 + local.get $10 return end local.get $5 @@ -11355,17 +11335,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $8 + local.get $7 ) (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 218 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -11477,7 +11456,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -11591,6 +11570,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -11631,49 +11611,48 @@ return end end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/array/Array<~lib/string/String | null>#__get - local.tee $4 + local.tee $5 local.get $1 local.get $3 call $~lib/array/Array<~lib/string/String | null>#__get - local.tee $5 + local.tee $6 call $~lib/string/String.__ne if i32.const 0 - local.set $6 + local.set $7 local.get $0 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 + call $~lib/rt/pure/__release + local.get $7 return end - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -11833,22 +11812,23 @@ (func $std/array/createRandomString (; 227 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 f64) - (local $4 i32) + (local $3 i32) + (local $4 f64) (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) i32.const 5168 local.set $1 - block $break|0 - i32.const 0 - local.set $2 - loop $loop|0 - local.get $2 - local.get $0 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + loop $for-loop|0 + local.get $2 + local.get $0 + i32.lt_s + local.set $3 + local.get $3 + if local.get $1 global.get $std/array/charset call $~lib/math/NativeMath.random @@ -11856,38 +11836,37 @@ call $~lib/string/String#get:length f64.convert_i32_s f64.mul - local.set $3 - local.get $3 + local.set $4 + local.get $4 f64.floor i32.trunc_f64_s call $~lib/string/String#charAt - local.tee $4 - call $~lib/string/String.__concat local.tee $5 + call $~lib/string/String.__concat local.tee $6 - local.get $1 local.tee $7 + local.get $1 + local.tee $8 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $7 + call $~lib/rt/pure/__retain + local.set $7 + local.get $8 call $~lib/rt/pure/__release end - local.get $6 + local.get $7 local.set $1 - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -11966,19 +11945,20 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 local.get $0 call $~lib/array/Array<~lib/string/String>#constructor local.set $1 - block $break|0 - i32.const 0 - local.set $2 - loop $loop|0 - local.get $2 - local.get $0 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + loop $for-loop|0 + local.get $2 + local.get $0 + i32.lt_s + local.set $3 + local.get $3 + if local.get $1 local.get $2 call $~lib/math/NativeMath.random @@ -11986,17 +11966,16 @@ f64.mul i32.trunc_f64_s call $std/array/createRandomString - local.tee $3 + local.tee $4 call $~lib/array/Array<~lib/string/String>#__set - local.get $3 + local.get $4 call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -12006,15 +11985,17 @@ (local $5 i32) (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 i32) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 2 @@ -12022,78 +12003,78 @@ i32.add i32.load call $~lib/rt/pure/__retain - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load - call $~lib/rt/pure/__retain - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $i32_i32_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 2 i32.shl i32.add - local.get $6 - i32.store - else - local.get $6 + i32.load + call $~lib/rt/pure/__retain + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $i32_i32_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store + else + local.get $8 + call $~lib/rt/pure/__release + br $while-break|1 + end + local.get $8 call $~lib/rt/pure/__release - br $break|1 + br $while-continue|1 end - local.get $6 - call $~lib/rt/pure/__release - br $continue|1 end - unreachable end local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $5 i32.store - local.get $4 + local.get $5 call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $~lib/array/Array<~lib/string/String>#sort (; 232 ;) (param $0 i32) (param $1 i32) (result i32) @@ -12129,7 +12110,7 @@ call $~lib/rt/pure/__retain local.set $5 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 local.get $1 @@ -12219,60 +12200,60 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 - block $break|0 - i32.const 1 - local.set $2 - local.get $0 - call $~lib/array/Array<~lib/string/String>#get:length - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 1 + local.set $2 + local.get $0 + call $~lib/array/Array<~lib/string/String>#get:length + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 local.get $2 i32.const 1 i32.sub call $~lib/array/Array<~lib/string/String>#__get - local.tee $4 + local.tee $5 local.get $0 local.get $2 call $~lib/array/Array<~lib/string/String>#__get - local.tee $5 + local.tee $6 local.get $1 call_indirect (type $i32_i32_=>_i32) i32.const 0 i32.gt_s if i32.const 0 - local.set $6 + local.set $7 local.get $0 call $~lib/rt/pure/__release - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release local.get $6 + call $~lib/rt/pure/__release + local.get $7 return end - local.get $4 - call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release + local.get $6 + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -12415,7 +12396,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -12548,6 +12529,8 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) + (local $12 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -12603,15 +12586,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|1 + local.get $4 + local.get $3 + i32.lt_s + local.set $12 + local.get $12 + if local.get $0 local.get $4 i32.add @@ -12660,9 +12643,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 local.get $3 @@ -12808,50 +12790,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 5968 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -12861,15 +12846,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -12878,30 +12862,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -12918,13 +12902,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -12934,13 +12918,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -13120,15 +13104,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 2 @@ -13164,9 +13148,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -13363,15 +13346,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 2 @@ -13407,9 +13390,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -13501,14 +13483,17 @@ (local $16 i32) (local $17 i32) (local $18 i32) - (local $19 i64) + (local $19 i32) (local $20 i64) (local $21 i64) (local $22 i64) (local $23 i64) - (local $24 i32) + (local $24 i64) (local $25 i32) (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i64) i32.const 0 local.get $4 i32.sub @@ -13546,13 +13531,13 @@ i32.const 7504 i32.load offset=4 local.set $16 - block $break|0 - loop $continue|0 - local.get $14 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $14 + i32.const 0 + i32.gt_s + local.set $17 + local.get $17 + if block $break|1 block $case10|1 block $case9|1 @@ -13566,44 +13551,44 @@ block $case1|1 block $case0|1 local.get $14 - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 10 i32.eq br_if $case0|1 - local.get $18 + local.get $19 i32.const 9 i32.eq br_if $case1|1 - local.get $18 + local.get $19 i32.const 8 i32.eq br_if $case2|1 - local.get $18 + local.get $19 i32.const 7 i32.eq br_if $case3|1 - local.get $18 + local.get $19 i32.const 6 i32.eq br_if $case4|1 - local.get $18 + local.get $19 i32.const 5 i32.eq br_if $case5|1 - local.get $18 + local.get $19 i32.const 4 i32.eq br_if $case6|1 - local.get $18 + local.get $19 i32.const 3 i32.eq br_if $case7|1 - local.get $18 + local.get $19 i32.const 2 i32.eq br_if $case8|1 - local.get $18 + local.get $19 i32.const 1 i32.eq br_if $case9|1 @@ -13612,7 +13597,7 @@ local.get $12 i32.const 1000000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000000 i32.rem_u @@ -13622,7 +13607,7 @@ local.get $12 i32.const 100000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000000 i32.rem_u @@ -13632,7 +13617,7 @@ local.get $12 i32.const 10000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000000 i32.rem_u @@ -13642,7 +13627,7 @@ local.get $12 i32.const 1000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000 i32.rem_u @@ -13652,7 +13637,7 @@ local.get $12 i32.const 100000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000 i32.rem_u @@ -13662,7 +13647,7 @@ local.get $12 i32.const 10000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000 i32.rem_u @@ -13672,7 +13657,7 @@ local.get $12 i32.const 1000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000 i32.rem_u @@ -13682,7 +13667,7 @@ local.get $12 i32.const 100 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100 i32.rem_u @@ -13692,7 +13677,7 @@ local.get $12 i32.const 10 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10 i32.rem_u @@ -13700,31 +13685,31 @@ br $break|1 end local.get $12 - local.set $17 + local.set $18 i32.const 0 local.set $12 br $break|1 end i32.const 0 - local.set $17 + local.set $18 br $break|1 end - local.get $17 + local.get $18 local.get $15 i32.or if local.get $0 local.get $15 - local.tee $18 + local.tee $19 i32.const 1 i32.add local.set $15 - local.get $18 + local.get $19 i32.const 1 i32.shl i32.add i32.const 48 - local.get $17 + local.get $18 i32.const 65535 i32.and i32.add @@ -13741,8 +13726,8 @@ i64.shl local.get $13 i64.add - local.set $19 - local.get $19 + local.set $20 + local.get $20 local.get $5 i64.le_u if @@ -13751,13 +13736,13 @@ i32.add global.set $~lib/util/number/_K local.get $0 - local.set $24 + local.set $25 local.get $15 - local.set $18 + local.set $19 local.get $5 + local.set $24 + local.get $20 local.set $23 - local.get $19 - local.set $22 local.get $16 local.get $14 i32.const 2 @@ -13767,228 +13752,230 @@ local.get $7 i64.extend_i32_s i64.shl - local.set $21 + local.set $22 local.get $10 - local.set $20 - local.get $24 - local.get $18 + local.set $21 + local.get $25 + local.get $19 i32.const 1 i32.sub i32.const 1 i32.shl i32.add - local.set $25 - local.get $25 - i32.load16_u local.set $26 - block $break|2 - loop $continue|2 + local.get $26 + i32.load16_u + local.set $27 + loop $while-continue|3 + local.get $23 + local.get $21 + i64.lt_u + if (result i32) + local.get $24 + local.get $23 + i64.sub + local.get $22 + i64.ge_u + else + i32.const 0 + end + if (result i32) + local.get $23 local.get $22 - local.get $20 + i64.add + local.get $21 i64.lt_u if (result i32) + i32.const 1 + else + local.get $21 local.get $23 - local.get $22 i64.sub - local.get $21 - i64.ge_u - else - i32.const 0 - end - if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 - i64.lt_u - if (result i32) - i32.const 1 - else - local.get $20 - local.get $22 - i64.sub - local.get $22 - local.get $21 - i64.add - local.get $20 - i64.sub - i64.gt_u - end - else - i32.const 0 + local.get $21 + i64.sub + i64.gt_u end - i32.eqz - br_if $break|2 - local.get $26 + else + i32.const 0 + end + local.set $28 + local.get $28 + if + local.get $27 i32.const 1 i32.sub - local.set $26 + local.set $27 + local.get $23 local.get $22 - local.get $21 i64.add - local.set $22 - br $continue|2 + local.set $23 + br $while-continue|3 end - unreachable end - local.get $25 local.get $26 + local.get $27 i32.store16 local.get $15 return end - br $continue|0 + br $while-continue|0 end - unreachable end - loop $continue|3 - local.get $13 - i64.const 10 - i64.mul - local.set $13 - local.get $5 - i64.const 10 - i64.mul - local.set $5 - local.get $13 - local.get $7 - i64.extend_i32_s - i64.shr_u - local.set $19 - local.get $19 - local.get $15 - i64.extend_i32_s - i64.or - i64.const 0 - i64.ne - if - local.get $0 - local.get $15 - local.tee $17 - i32.const 1 - i32.add - local.set $15 - local.get $17 - i32.const 1 - i32.shl - i32.add - i32.const 48 - local.get $19 - i32.wrap_i64 - i32.const 65535 - i32.and - i32.add - i32.store16 - end - local.get $13 - local.get $9 - i64.and - local.set $13 - local.get $14 + loop $while-continue|4 i32.const 1 - i32.sub - local.set $14 - local.get $13 - local.get $5 - i64.lt_u + local.set $17 + local.get $17 if - global.get $~lib/util/number/_K - local.get $14 - i32.add - global.set $~lib/util/number/_K - local.get $10 - local.get $16 - i32.const 0 - local.get $14 - i32.sub - i32.const 2 - i32.shl - i32.add - i64.load32_u + local.get $13 + i64.const 10 i64.mul - local.set $10 - local.get $0 - local.set $24 - local.get $15 - local.set $18 + local.set $13 local.get $5 - local.set $23 + i64.const 10 + i64.mul + local.set $5 local.get $13 - local.set $22 - local.get $8 - local.set $21 - local.get $10 - local.set $20 + local.get $7 + i64.extend_i32_s + i64.shr_u + local.set $24 local.get $24 - local.get $18 + local.get $15 + i64.extend_i32_s + i64.or + i64.const 0 + i64.ne + if + local.get $0 + local.get $15 + local.tee $27 + i32.const 1 + i32.add + local.set $15 + local.get $27 + i32.const 1 + i32.shl + i32.add + i32.const 48 + local.get $24 + i32.wrap_i64 + i32.const 65535 + i32.and + i32.add + i32.store16 + end + local.get $13 + local.get $9 + i64.and + local.set $13 + local.get $14 i32.const 1 i32.sub - i32.const 1 - i32.shl - i32.add - local.set $17 - local.get $17 - i32.load16_u - local.set $26 - block $break|4 - loop $continue|4 - local.get $22 - local.get $20 + local.set $14 + local.get $13 + local.get $5 + i64.lt_u + if + global.get $~lib/util/number/_K + local.get $14 + i32.add + global.set $~lib/util/number/_K + local.get $10 + local.get $16 + i32.const 0 + local.get $14 + i32.sub + i32.const 2 + i32.shl + i32.add + i64.load32_u + i64.mul + local.set $10 + local.get $0 + local.set $19 + local.get $15 + local.set $28 + local.get $5 + local.set $29 + local.get $13 + local.set $23 + local.get $8 + local.set $22 + local.get $10 + local.set $21 + local.get $19 + local.get $28 + i32.const 1 + i32.sub + i32.const 1 + i32.shl + i32.add + local.set $27 + local.get $27 + i32.load16_u + local.set $26 + loop $while-continue|6 + local.get $23 + local.get $21 i64.lt_u if (result i32) + local.get $29 local.get $23 - local.get $22 i64.sub - local.get $21 + local.get $22 i64.ge_u else i32.const 0 end if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.lt_u if (result i32) i32.const 1 else - local.get $20 - local.get $22 + local.get $21 + local.get $23 i64.sub + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.sub i64.gt_u end else i32.const 0 end - i32.eqz - br_if $break|4 - local.get $26 - i32.const 1 - i32.sub - local.set $26 - local.get $22 - local.get $21 - i64.add - local.set $22 - br $continue|4 + local.set $25 + local.get $25 + if + local.get $26 + i32.const 1 + i32.sub + local.set $26 + local.get $23 + local.get $22 + i64.add + local.set $23 + br $while-continue|6 + end end - unreachable + local.get $27 + local.get $26 + i32.store16 + local.get $15 + return end - local.get $17 - local.get $26 - i32.store16 - local.get $15 - return + br $while-continue|4 end - br $continue|3 end - unreachable + local.get $15 ) (func $~lib/util/number/prettify (; 258 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -14034,15 +14021,15 @@ i32.const 0 end if - block $break|0 - local.get $1 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + local.get $1 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -14054,9 +14041,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -14145,15 +14131,15 @@ i32.shl i32.or i32.store - block $break|1 - i32.const 2 - local.set $5 - loop $loop|1 - local.get $5 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 2 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $4 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 i32.const 1 @@ -14165,9 +14151,8 @@ i32.const 1 i32.add local.set $5 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $1 local.get $4 @@ -14184,30 +14169,30 @@ local.get $0 i32.const 4 i32.add - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - local.get $5 - i32.const 0 - i32.lt_s local.set $6 local.get $6 + i32.const 0 + i32.lt_s + local.set $4 + local.get $4 if i32.const 0 - local.get $5 + local.get $6 i32.sub - local.set $5 + local.set $6 end - local.get $5 + local.get $6 call $~lib/util/number/decimalCount32 i32.const 1 i32.add local.set $7 - local.get $4 - local.set $10 local.get $5 + local.set $10 + local.get $6 local.set $9 local.get $7 local.set $8 @@ -14215,10 +14200,10 @@ local.get $9 local.get $8 call $~lib/util/number/utoa32_lut - local.get $4 + local.get $5 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 local.get $7 @@ -14264,8 +14249,8 @@ local.get $8 i32.const 0 i32.lt_s - local.set $6 - local.get $6 + local.set $4 + local.get $4 if i32.const 0 local.get $8 @@ -14276,24 +14261,24 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.set $4 + local.set $5 local.get $9 local.set $11 local.get $8 - local.set $5 - local.get $4 + local.set $6 + local.get $5 local.set $10 local.get $11 - local.get $5 + local.get $6 local.get $10 call $~lib/util/number/utoa32_lut local.get $9 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 - local.get $4 + local.get $5 i32.add local.set $1 local.get $1 @@ -14926,15 +14911,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 3 @@ -14970,9 +14955,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -15043,6 +15027,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -15083,33 +15068,33 @@ local.set $5 i32.const 0 local.set $6 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - local.tee $7 - local.get $6 local.tee $8 + local.get $6 + local.tee $9 i32.ne if - local.get $7 - call $~lib/rt/pure/__retain - local.set $7 local.get $8 + call $~lib/rt/pure/__retain + local.set $8 + local.get $9 call $~lib/rt/pure/__release end - local.get $7 + local.get $8 local.set $6 local.get $6 i32.const 0 @@ -15125,17 +15110,16 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 - local.set $9 + local.set $10 local.get $2 call $~lib/string/String#get:length - local.set $10 + local.set $11 local.get $5 - local.get $10 + local.get $11 local.get $3 i32.mul i32.add @@ -15143,34 +15127,34 @@ i32.shl i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $11 - block $break|1 - i32.const 0 - local.set $4 - loop $loop|1 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|1 + local.set $12 + i32.const 0 + local.set $4 + loop $for-loop|1 + local.get $4 + local.get $3 + i32.lt_s + local.set $7 + local.get $7 + if local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - local.tee $8 + local.tee $9 local.get $6 - local.tee $7 + local.tee $8 i32.ne if - local.get $8 + local.get $9 call $~lib/rt/pure/__retain - local.set $8 - local.get $7 + local.set $9 + local.get $8 call $~lib/rt/pure/__release end - local.get $8 + local.get $9 local.set $6 local.get $6 i32.const 0 @@ -15178,46 +15162,45 @@ if local.get $6 call $~lib/string/String#get:length - local.set $8 - local.get $11 - local.get $9 + local.set $9 + local.get $12 + local.get $10 i32.const 1 i32.shl i32.add local.get $6 - local.get $8 + local.get $9 i32.const 1 i32.shl call $~lib/memory/memory.copy + local.get $10 local.get $9 - local.get $8 i32.add - local.set $9 + local.set $10 end - local.get $10 + local.get $11 if - local.get $11 - local.get $9 + local.get $12 + local.get $10 i32.const 1 i32.shl i32.add local.get $2 - local.get $10 + local.get $11 i32.const 1 i32.shl call $~lib/memory/memory.copy - local.get $9 local.get $10 + local.get $11 i32.add - local.set $9 + local.set $10 end local.get $4 i32.const 1 i32.add local.set $4 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 local.get $3 @@ -15225,25 +15208,25 @@ i32.shl i32.add i32.load - local.tee $7 + local.tee $8 local.get $6 local.tee $4 i32.ne if - local.get $7 + local.get $8 call $~lib/rt/pure/__retain - local.set $7 + local.set $8 local.get $4 call $~lib/rt/pure/__release end - local.get $7 + local.get $8 local.set $6 local.get $6 i32.const 0 i32.ne if - local.get $11 - local.get $9 + local.get $12 + local.get $10 i32.const 1 i32.shl i32.add @@ -15254,14 +15237,14 @@ i32.shl call $~lib/memory/memory.copy end - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $7 + local.set $8 local.get $2 call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $7 + local.get $8 ) (func $~lib/array/Array<~lib/string/String | null>#join (; 265 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -15299,6 +15282,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -15359,33 +15343,33 @@ local.get $2 call $~lib/string/String#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - local.tee $6 - local.get $5 local.tee $9 + local.get $5 + local.tee $10 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $10 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $5 local.get $5 i32.const 0 @@ -15394,56 +15378,55 @@ local.get $7 local.get $5 call $std/array/Ref#toString - local.tee $6 - call $~lib/string/String.__concat local.tee $9 + call $~lib/string/String.__concat local.tee $10 - local.get $7 local.tee $11 + local.get $7 + local.tee $12 i32.ne if - local.get $10 - call $~lib/rt/pure/__retain - local.set $10 local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $12 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $7 - local.get $6 - call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release end local.get $8 if local.get $7 local.get $2 call $~lib/string/String.__concat - local.tee $9 - local.tee $11 + local.tee $10 + local.tee $12 local.get $7 - local.tee $6 + local.tee $9 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $6 + local.set $12 + local.get $9 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 local.set $7 - local.get $9 + local.get $10 call $~lib/rt/pure/__release end local.get $4 i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -15451,18 +15434,18 @@ i32.shl i32.add i32.load - local.tee $10 + local.tee $11 local.get $5 local.tee $4 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 + local.set $11 local.get $4 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $5 local.get $5 i32.const 0 @@ -15471,23 +15454,23 @@ local.get $7 local.get $5 call $std/array/Ref#toString - local.tee $10 + local.tee $11 call $~lib/string/String.__concat local.tee $4 - local.tee $6 - local.get $7 local.tee $9 + local.get $7 + local.tee $6 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $6 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $7 - local.get $10 + local.get $11 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -15533,6 +15516,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -15593,33 +15577,33 @@ local.get $2 call $~lib/string/String#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - local.tee $6 - local.get $5 local.tee $9 + local.get $5 + local.tee $10 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $10 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $5 local.get $5 i32.const 0 @@ -15628,56 +15612,55 @@ local.get $7 local.get $5 call $std/array/Ref#toString - local.tee $6 - call $~lib/string/String.__concat local.tee $9 + call $~lib/string/String.__concat local.tee $10 - local.get $7 local.tee $11 + local.get $7 + local.tee $12 i32.ne if - local.get $10 - call $~lib/rt/pure/__retain - local.set $10 local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $12 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $7 - local.get $6 - call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release end local.get $8 if local.get $7 local.get $2 call $~lib/string/String.__concat - local.tee $9 - local.tee $11 + local.tee $10 + local.tee $12 local.get $7 - local.tee $6 + local.tee $9 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $6 + local.set $12 + local.get $9 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 local.set $7 - local.get $9 + local.get $10 call $~lib/rt/pure/__release end local.get $4 i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -15685,18 +15668,18 @@ i32.shl i32.add i32.load - local.tee $10 + local.tee $11 local.get $5 local.tee $4 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 + local.set $11 local.get $4 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $5 local.get $5 i32.const 0 @@ -15705,23 +15688,23 @@ local.get $7 local.get $5 call $std/array/Ref#toString - local.tee $10 + local.tee $11 call $~lib/string/String.__concat local.tee $4 - local.tee $6 - local.get $7 local.tee $9 + local.get $7 + local.tee $6 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $6 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $7 - local.get $10 + local.get $11 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -15904,15 +15887,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 0 @@ -15948,9 +15931,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -16126,15 +16108,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -16170,9 +16152,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -16313,77 +16294,78 @@ ) (func $~lib/util/number/utoa64_lut (; 283 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i64) + (local $12 i32) (local $13 i64) + (local $14 i64) i32.const 5968 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i64.const 100000000 - i64.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i64.const 100000000 + i64.ge_u + local.set $4 + local.get $4 + if local.get $1 i64.const 100000000 i64.div_u - local.set $4 + local.set $5 local.get $1 - local.get $4 + local.get $5 i64.const 100000000 i64.mul i64.sub i32.wrap_i64 - local.set $5 - local.get $4 - local.set $1 - local.get $5 - i32.const 10000 - i32.div_u local.set $6 local.get $5 - i32.const 10000 - i32.rem_u - local.set $7 + local.set $1 local.get $6 - i32.const 100 + i32.const 10000 i32.div_u - local.set $8 + local.set $7 local.get $6 - i32.const 100 + i32.const 10000 i32.rem_u - local.set $9 + local.set $8 local.get $7 i32.const 100 i32.div_u - local.set $10 + local.set $9 local.get $7 i32.const 100 i32.rem_u + local.set $10 + local.get $8 + i32.const 100 + i32.div_u local.set $11 + local.get $8 + i32.const 100 + i32.rem_u + local.set $12 local.get $3 - local.get $10 + local.get $11 i32.const 2 i32.shl i32.add i64.load32_u - local.set $12 + local.set $13 local.get $3 - local.get $11 + local.get $12 i32.const 2 i32.shl i32.add i64.load32_u - local.set $13 + local.set $14 local.get $2 i32.const 4 i32.sub @@ -16393,26 +16375,26 @@ i32.const 1 i32.shl i32.add - local.get $12 local.get $13 + local.get $14 i64.const 32 i64.shl i64.or i64.store local.get $3 - local.get $8 + local.get $9 i32.const 2 i32.shl i32.add i64.load32_u - local.set $12 + local.set $13 local.get $3 - local.get $9 + local.get $10 i32.const 2 i32.shl i32.add i64.load32_u - local.set $13 + local.set $14 local.get $2 i32.const 4 i32.sub @@ -16422,15 +16404,14 @@ i32.const 1 i32.shl i32.add - local.get $12 local.get $13 + local.get $14 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.get $1 @@ -16632,15 +16613,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 3 @@ -16676,9 +16657,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -16982,15 +16962,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 3 @@ -17026,9 +17006,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -17109,6 +17088,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -17169,33 +17149,33 @@ local.get $2 call $~lib/string/String#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - local.tee $6 - local.get $5 local.tee $9 + local.get $5 + local.tee $10 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $10 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $5 local.get $5 i32.const 0 @@ -17204,56 +17184,55 @@ local.get $7 local.get $5 call $~lib/array/Array#toString - local.tee $6 - call $~lib/string/String.__concat local.tee $9 + call $~lib/string/String.__concat local.tee $10 - local.get $7 local.tee $11 + local.get $7 + local.tee $12 i32.ne if - local.get $10 - call $~lib/rt/pure/__retain - local.set $10 local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $12 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $7 - local.get $6 - call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release end local.get $8 if local.get $7 local.get $2 call $~lib/string/String.__concat - local.tee $9 - local.tee $11 + local.tee $10 + local.tee $12 local.get $7 - local.tee $6 + local.tee $9 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $6 + local.set $12 + local.get $9 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 local.set $7 - local.get $9 + local.get $10 call $~lib/rt/pure/__release end local.get $4 i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -17261,18 +17240,18 @@ i32.shl i32.add i32.load - local.tee $10 + local.tee $11 local.get $5 local.tee $4 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 + local.set $11 local.get $4 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $5 local.get $5 i32.const 0 @@ -17281,23 +17260,23 @@ local.get $7 local.get $5 call $~lib/array/Array#toString - local.tee $10 + local.tee $11 call $~lib/string/String.__concat local.tee $4 - local.tee $6 - local.get $7 local.tee $9 + local.get $7 + local.tee $6 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $6 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $7 - local.get $10 + local.get $11 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -17448,15 +17427,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 0 @@ -17492,9 +17471,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -17570,6 +17548,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -17630,33 +17609,33 @@ local.get $2 call $~lib/string/String#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - local.tee $6 - local.get $5 local.tee $9 + local.get $5 + local.tee $10 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $10 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $5 local.get $5 i32.const 0 @@ -17665,56 +17644,55 @@ local.get $7 local.get $5 call $~lib/array/Array#toString - local.tee $6 - call $~lib/string/String.__concat local.tee $9 + call $~lib/string/String.__concat local.tee $10 - local.get $7 local.tee $11 + local.get $7 + local.tee $12 i32.ne if - local.get $10 - call $~lib/rt/pure/__retain - local.set $10 local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $12 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $7 - local.get $6 - call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release end local.get $8 if local.get $7 local.get $2 call $~lib/string/String.__concat - local.tee $9 - local.tee $11 + local.tee $10 + local.tee $12 local.get $7 - local.tee $6 + local.tee $9 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $6 + local.set $12 + local.get $9 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 local.set $7 - local.get $9 + local.get $10 call $~lib/rt/pure/__release end local.get $4 i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -17722,18 +17700,18 @@ i32.shl i32.add i32.load - local.tee $10 + local.tee $11 local.get $5 local.tee $4 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 + local.set $11 local.get $4 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $5 local.get $5 i32.const 0 @@ -17742,23 +17720,23 @@ local.get $7 local.get $5 call $~lib/array/Array#toString - local.tee $10 + local.tee $11 call $~lib/string/String.__concat local.tee $4 - local.tee $6 - local.get $7 local.tee $9 + local.get $7 + local.tee $6 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $6 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $7 - local.get $10 + local.get $11 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -17814,6 +17792,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -17874,33 +17853,33 @@ local.get $2 call $~lib/string/String#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - local.tee $6 - local.get $5 local.tee $9 + local.get $5 + local.tee $10 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $10 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $5 local.get $5 i32.const 0 @@ -17909,56 +17888,55 @@ local.get $7 local.get $5 call $~lib/array/Array#toString - local.tee $6 - call $~lib/string/String.__concat local.tee $9 + call $~lib/string/String.__concat local.tee $10 - local.get $7 local.tee $11 + local.get $7 + local.tee $12 i32.ne if - local.get $10 - call $~lib/rt/pure/__retain - local.set $10 local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $12 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $7 - local.get $6 - call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release end local.get $8 if local.get $7 local.get $2 call $~lib/string/String.__concat - local.tee $9 - local.tee $11 + local.tee $10 + local.tee $12 local.get $7 - local.tee $6 + local.tee $9 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $6 + local.set $12 + local.get $9 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 local.set $7 - local.get $9 + local.get $10 call $~lib/rt/pure/__release end local.get $4 i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -17966,18 +17944,18 @@ i32.shl i32.add i32.load - local.tee $10 + local.tee $11 local.get $5 local.tee $4 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 + local.set $11 local.get $4 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $5 local.get $5 i32.const 0 @@ -17986,23 +17964,23 @@ local.get $7 local.get $5 call $~lib/array/Array#toString - local.tee $10 + local.tee $11 call $~lib/string/String.__concat local.tee $4 - local.tee $6 - local.get $7 local.tee $9 + local.get $7 + local.tee $6 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $6 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $7 - local.get $10 + local.get $11 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -18053,6 +18031,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $2 call $~lib/rt/pure/__retain local.set $2 @@ -18113,33 +18092,33 @@ local.get $2 call $~lib/string/String#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - local.tee $6 - local.get $5 local.tee $9 + local.get $5 + local.tee $10 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $10 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $5 local.get $5 i32.const 0 @@ -18148,56 +18127,55 @@ local.get $7 local.get $5 call $~lib/array/Array<~lib/array/Array>#toString - local.tee $6 - call $~lib/string/String.__concat local.tee $9 + call $~lib/string/String.__concat local.tee $10 - local.get $7 local.tee $11 + local.get $7 + local.tee $12 i32.ne if - local.get $10 - call $~lib/rt/pure/__retain - local.set $10 local.get $11 + call $~lib/rt/pure/__retain + local.set $11 + local.get $12 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $7 - local.get $6 - call $~lib/rt/pure/__release local.get $9 call $~lib/rt/pure/__release + local.get $10 + call $~lib/rt/pure/__release end local.get $8 if local.get $7 local.get $2 call $~lib/string/String.__concat - local.tee $9 - local.tee $11 + local.tee $10 + local.tee $12 local.get $7 - local.tee $6 + local.tee $9 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $6 + local.set $12 + local.get $9 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 local.set $7 - local.get $9 + local.get $10 call $~lib/rt/pure/__release end local.get $4 i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -18205,18 +18183,18 @@ i32.shl i32.add i32.load - local.tee $10 + local.tee $11 local.get $5 local.tee $4 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 + local.set $11 local.get $4 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 local.set $5 local.get $5 i32.const 0 @@ -18225,23 +18203,23 @@ local.get $7 local.get $5 call $~lib/array/Array<~lib/array/Array>#toString - local.tee $10 + local.tee $11 call $~lib/string/String.__concat local.tee $4 - local.tee $6 - local.get $7 local.tee $9 + local.get $7 + local.tee $6 i32.ne if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 local.get $9 + call $~lib/rt/pure/__retain + local.set $9 + local.get $6 call $~lib/rt/pure/__release end - local.get $6 + local.get $9 local.set $7 - local.get $10 + local.get $11 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release @@ -18349,21 +18327,6 @@ (local $63 i32) (local $64 i32) (local $65 i32) - (local $66 i32) - (local $67 i32) - (local $68 i32) - (local $69 i32) - (local $70 i32) - (local $71 i32) - (local $72 i32) - (local $73 i32) - (local $74 i32) - (local $75 i32) - (local $76 i32) - (local $77 i32) - (local $78 i32) - (local $79 i32) - (local $80 i32) i32.const 0 i32.const 0 call $~lib/array/Array#constructor @@ -18455,23 +18418,21 @@ i32.const 496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $0 - call $~lib/rt/pure/__retain - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $1 + local.get $0 i32.const 5 i32.const 0 i32.const 6 i32.const 528 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $2 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -18483,20 +18444,20 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.const 0 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $1 + local.get $0 i32.const 5 i32.const 0 i32.const 6 i32.const 608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -18508,20 +18469,20 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $1 + local.get $0 i32.const 5 i32.const 0 i32.const 6 i32.const 640 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $5 + local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -18533,20 +18494,20 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 2 i32.const -2 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $1 + local.get $0 i32.const 5 i32.const 0 i32.const 6 i32.const 672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 + local.tee $5 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -18558,20 +18519,20 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $1 + local.get $0 i32.const 5 i32.const 0 i32.const 6 i32.const 704 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $7 + local.tee $6 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -18585,7 +18546,7 @@ end local.get $0 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -18595,24 +18556,20 @@ call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release - local.get $7 - call $~lib/rt/pure/__release i32.const 5 i32.const 2 i32.const 7 i32.const 736 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 - call $~lib/rt/pure/__retain - local.set $7 - local.get $7 + local.set $5 + local.get $5 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $7 + local.get $5 i32.const 5 i32.const 2 i32.const 7 @@ -18631,13 +18588,13 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $5 i32.const 0 i32.const 0 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $7 + local.get $5 i32.const 5 i32.const 2 i32.const 7 @@ -18656,20 +18613,20 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $5 i32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $7 + local.get $5 i32.const 5 i32.const 2 i32.const 7 i32.const 880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 + local.tee $2 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -18681,13 +18638,13 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $5 i32.const 2 i32.const -2 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $7 + local.get $5 i32.const 5 i32.const 2 i32.const 7 @@ -18706,20 +18663,20 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $5 i32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill call $~lib/rt/pure/__release - local.get $7 + local.get $5 i32.const 5 i32.const 2 i32.const 7 i32.const 976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -18731,19 +18688,17 @@ call $~lib/builtins/abort unreachable end - local.get $6 - call $~lib/rt/pure/__release - local.get $7 + local.get $5 call $~lib/rt/pure/__release local.get $4 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $1 call $~lib/rt/pure/__release global.get $std/array/arr call $~lib/array/Array#get:length @@ -18817,8 +18772,8 @@ end global.get $std/array/arr call $~lib/array/Array#pop - local.set $2 - local.get $2 + local.set $1 + local.get $1 i32.const 42 i32.eq i32.eqz @@ -19035,15 +18990,16 @@ i32.const 8 i32.const 0 call $~lib/rt/__allocArray - local.set $2 - local.get $2 + call $~lib/rt/pure/__retain + local.set $1 + local.get $1 i32.load offset=4 local.set $0 local.get $0 i32.const 0 i32.const 0 call $std/array/Ref#constructor - local.tee $1 + local.tee $2 call $~lib/rt/pure/__retain i32.store local.get $0 @@ -19053,8 +19009,7 @@ local.tee $3 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $2 - call $~lib/rt/pure/__retain + local.get $1 local.set $0 local.get $0 i32.const 0 @@ -19072,7 +19027,7 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $2 call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release @@ -19132,7 +19087,7 @@ i32.const 1072 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 call $~lib/array/Array#concat call $~lib/rt/pure/__release global.get $std/array/arr @@ -19201,10 +19156,10 @@ global.get $std/array/arr local.get $0 call $~lib/array/Array#concat - local.set $5 + local.set $6 local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 local.set $3 global.get $std/array/arr call $std/array/internalCapacity @@ -19337,10 +19292,8 @@ i32.const 1088 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 - call $~lib/rt/pure/__retain - local.set $5 - local.get $5 + local.set $2 + local.get $2 call $~lib/array/Array#get:length i32.const 0 i32.eq @@ -19353,13 +19306,13 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $2 global.get $std/array/arr call $~lib/array/Array#concat - local.set $6 + local.set $5 local.get $3 call $~lib/rt/pure/__release - local.get $6 + local.get $5 local.set $3 local.get $3 call $~lib/array/Array#get:length @@ -19374,7 +19327,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $2 call $~lib/array/Array#get:length i32.const 0 i32.eq @@ -19391,11 +19344,9 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $2 - call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $5 + local.get $2 call $~lib/rt/pure/__release i32.const 5 i32.const 2 @@ -19403,10 +19354,8 @@ i32.const 1104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $1 - call $~lib/rt/pure/__retain - local.set $5 - local.get $5 + local.set $1 + local.get $1 i32.const 0 i32.const 3 i32.const 2147483647 @@ -19436,33 +19385,24 @@ i32.const 1200 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $6 - local.tee $7 - local.get $5 - local.tee $3 - i32.ne - if - local.get $7 - call $~lib/rt/pure/__retain - local.set $7 - local.get $3 - call $~lib/rt/pure/__release - end - local.get $7 - local.set $5 - local.get $5 + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 + local.set $1 + local.get $1 i32.const 1 i32.const 3 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $7 + local.tee $4 i32.const 5 i32.const 2 i32.const 3 i32.const 1248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $4 + local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19480,33 +19420,24 @@ i32.const 1296 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 - local.tee $3 - local.get $5 - local.tee $9 - i32.ne - if - local.get $3 - call $~lib/rt/pure/__retain - local.set $3 - local.get $9 - call $~lib/rt/pure/__release - end - local.get $3 local.set $5 + local.get $1 + call $~lib/rt/pure/__release local.get $5 + local.set $1 + local.get $1 i32.const 1 i32.const 2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $3 + local.tee $5 i32.const 5 i32.const 2 i32.const 3 i32.const 1344 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 + local.tee $7 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19524,33 +19455,24 @@ i32.const 1392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $11 - local.tee $9 - local.get $5 - local.tee $12 - i32.ne - if - local.get $9 - call $~lib/rt/pure/__retain - local.set $9 - local.get $12 - call $~lib/rt/pure/__release - end - local.get $9 - local.set $5 - local.get $5 + local.set $6 + local.get $1 + call $~lib/rt/pure/__release + local.get $6 + local.set $1 + local.get $1 i32.const 2 i32.const 2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $9 + local.tee $6 i32.const 5 i32.const 2 i32.const 3 i32.const 1440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $13 + local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19568,33 +19490,24 @@ i32.const 1488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 - local.tee $12 - local.get $5 - local.tee $15 - i32.ne - if - local.get $12 - call $~lib/rt/pure/__retain - local.set $12 - local.get $15 - call $~lib/rt/pure/__release - end - local.get $12 - local.set $5 - local.get $5 + local.set $8 + local.get $1 + call $~lib/rt/pure/__release + local.get $8 + local.set $1 + local.get $1 i32.const 0 i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $12 + local.tee $8 i32.const 5 i32.const 2 i32.const 3 i32.const 1536 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 + local.tee $11 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19612,33 +19525,24 @@ i32.const 1584 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $17 - local.tee $15 - local.get $5 - local.tee $18 - i32.ne - if - local.get $15 - call $~lib/rt/pure/__retain - local.set $15 - local.get $18 - call $~lib/rt/pure/__release - end - local.get $15 - local.set $5 - local.get $5 + local.set $10 + local.get $1 + call $~lib/rt/pure/__release + local.get $10 + local.set $1 + local.get $1 i32.const 1 i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $15 + local.tee $10 i32.const 5 i32.const 2 i32.const 3 i32.const 1632 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $19 + local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19656,33 +19560,24 @@ i32.const 1680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $20 - local.tee $18 - local.get $5 - local.tee $21 - i32.ne - if - local.get $18 - call $~lib/rt/pure/__retain - local.set $18 - local.get $21 - call $~lib/rt/pure/__release - end - local.get $18 - local.set $5 - local.get $5 + local.set $12 + local.get $1 + call $~lib/rt/pure/__release + local.get $12 + local.set $1 + local.get $1 i32.const 1 i32.const 2 i32.const 4 call $~lib/array/Array#copyWithin - local.tee $18 + local.tee $12 i32.const 5 i32.const 2 i32.const 3 i32.const 1728 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $22 + local.tee $15 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19700,33 +19595,24 @@ i32.const 1776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $23 - local.tee $21 - local.get $5 - local.tee $24 - i32.ne - if - local.get $21 - call $~lib/rt/pure/__retain - local.set $21 - local.get $24 - call $~lib/rt/pure/__release - end - local.get $21 - local.set $5 - local.get $5 + local.set $14 + local.get $1 + call $~lib/rt/pure/__release + local.get $14 + local.set $1 + local.get $1 i32.const 0 i32.const -2 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $21 + local.tee $14 i32.const 5 i32.const 2 i32.const 3 i32.const 1824 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $25 + local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19744,33 +19630,24 @@ i32.const 1872 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $26 - local.tee $24 - local.get $5 - local.tee $27 - i32.ne - if - local.get $24 - call $~lib/rt/pure/__retain - local.set $24 - local.get $27 - call $~lib/rt/pure/__release - end - local.get $24 - local.set $5 - local.get $5 + local.set $16 + local.get $1 + call $~lib/rt/pure/__release + local.get $16 + local.set $1 + local.get $1 i32.const 0 i32.const -2 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $24 + local.tee $16 i32.const 5 i32.const 2 i32.const 3 i32.const 1920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $28 + local.tee $19 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19788,33 +19665,24 @@ i32.const 1968 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $29 - local.tee $27 - local.get $5 - local.tee $30 - i32.ne - if - local.get $27 - call $~lib/rt/pure/__retain - local.set $27 - local.get $30 - call $~lib/rt/pure/__release - end - local.get $27 - local.set $5 - local.get $5 + local.set $18 + local.get $1 + call $~lib/rt/pure/__release + local.get $18 + local.set $1 + local.get $1 i32.const -4 i32.const -3 i32.const -2 call $~lib/array/Array#copyWithin - local.tee $27 + local.tee $18 i32.const 5 i32.const 2 i32.const 3 i32.const 2016 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $31 + local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19832,33 +19700,24 @@ i32.const 2064 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $32 - local.tee $30 - local.get $5 - local.tee $33 - i32.ne - if - local.get $30 - call $~lib/rt/pure/__retain - local.set $30 - local.get $33 - call $~lib/rt/pure/__release - end - local.get $30 - local.set $5 - local.get $5 + local.set $20 + local.get $1 + call $~lib/rt/pure/__release + local.get $20 + local.set $1 + local.get $1 i32.const -4 i32.const -3 i32.const -1 call $~lib/array/Array#copyWithin - local.tee $30 + local.tee $20 i32.const 5 i32.const 2 i32.const 3 i32.const 2112 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $34 + local.tee $23 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19876,33 +19735,24 @@ i32.const 2160 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $35 - local.tee $33 - local.get $5 - local.tee $36 - i32.ne - if - local.get $33 - call $~lib/rt/pure/__retain - local.set $33 - local.get $36 - call $~lib/rt/pure/__release - end - local.get $33 - local.set $5 - local.get $5 + local.set $22 + local.get $1 + call $~lib/rt/pure/__release + local.get $22 + local.set $1 + local.get $1 i32.const -4 i32.const -3 i32.const 2147483647 call $~lib/array/Array#copyWithin - local.tee $33 + local.tee $22 i32.const 5 i32.const 2 i32.const 3 i32.const 2208 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $37 + local.tee $25 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -19916,77 +19766,53 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release - local.get $6 + local.get $4 call $~lib/rt/pure/__release - local.get $7 + local.get $3 call $~lib/rt/pure/__release - local.get $4 + local.get $5 call $~lib/rt/pure/__release - local.get $8 + local.get $7 call $~lib/rt/pure/__release - local.get $3 + local.get $6 call $~lib/rt/pure/__release - local.get $10 + local.get $9 + call $~lib/rt/pure/__release + local.get $8 call $~lib/rt/pure/__release local.get $11 call $~lib/rt/pure/__release - local.get $9 + local.get $10 call $~lib/rt/pure/__release local.get $13 call $~lib/rt/pure/__release - local.get $14 - call $~lib/rt/pure/__release local.get $12 call $~lib/rt/pure/__release - local.get $16 + local.get $15 + call $~lib/rt/pure/__release + local.get $14 call $~lib/rt/pure/__release local.get $17 call $~lib/rt/pure/__release - local.get $15 + local.get $16 call $~lib/rt/pure/__release local.get $19 call $~lib/rt/pure/__release - local.get $20 - call $~lib/rt/pure/__release local.get $18 call $~lib/rt/pure/__release - local.get $22 - call $~lib/rt/pure/__release - local.get $23 - call $~lib/rt/pure/__release local.get $21 call $~lib/rt/pure/__release - local.get $25 - call $~lib/rt/pure/__release - local.get $26 - call $~lib/rt/pure/__release - local.get $24 - call $~lib/rt/pure/__release - local.get $28 - call $~lib/rt/pure/__release - local.get $29 - call $~lib/rt/pure/__release - local.get $27 - call $~lib/rt/pure/__release - local.get $31 - call $~lib/rt/pure/__release - local.get $32 - call $~lib/rt/pure/__release - local.get $30 - call $~lib/rt/pure/__release - local.get $34 + local.get $20 call $~lib/rt/pure/__release - local.get $35 + local.get $23 call $~lib/rt/pure/__release - local.get $33 + local.get $22 call $~lib/rt/pure/__release - local.get $37 + local.get $25 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 42 @@ -20609,7 +20435,7 @@ i32.const 2256 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $33 + local.tee $22 f32.const nan:0x400000 i32.const 0 call $~lib/array/Array#indexOf @@ -20630,7 +20456,7 @@ i32.const 2288 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $35 + local.tee $23 f64.const nan:0x8000000000000 i32.const 0 call $~lib/array/Array#indexOf @@ -20645,16 +20471,16 @@ call $~lib/builtins/abort unreachable end - local.get $33 + local.get $22 call $~lib/rt/pure/__release - local.get $35 + local.get $23 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 44 i32.const 0 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 1 i32.eq i32.eqz @@ -20670,8 +20496,8 @@ i32.const 42 i32.const 0 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 1 i32.eq i32.eqz @@ -20687,8 +20513,8 @@ i32.const 45 i32.const 0 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 0 i32.eq i32.eqz @@ -20704,8 +20530,8 @@ i32.const 43 i32.const 100 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 0 i32.eq i32.eqz @@ -20721,8 +20547,8 @@ i32.const 43 i32.const -100 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 1 i32.eq i32.eqz @@ -20738,8 +20564,8 @@ i32.const 43 i32.const -2 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 1 i32.eq i32.eqz @@ -20755,8 +20581,8 @@ i32.const 43 i32.const -4 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 1 i32.eq i32.eqz @@ -20772,8 +20598,8 @@ i32.const 43 i32.const 0 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 1 i32.eq i32.eqz @@ -20789,8 +20615,8 @@ i32.const 43 i32.const 1 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 1 i32.eq i32.eqz @@ -20806,8 +20632,8 @@ i32.const 43 i32.const 2 call $~lib/array/Array#includes - local.set $35 - local.get $35 + local.set $23 + local.get $23 i32.const 1 i32.eq i32.eqz @@ -20825,7 +20651,7 @@ i32.const 2320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $37 + local.tee $25 f32.const nan:0x400000 i32.const 0 call $~lib/array/Array#includes @@ -20844,7 +20670,7 @@ i32.const 2352 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $34 + local.tee $20 f64.const nan:0x8000000000000 i32.const 0 call $~lib/array/Array#includes @@ -20916,9 +20742,9 @@ call $~lib/builtins/abort unreachable end - local.get $37 + local.get $25 call $~lib/rt/pure/__release - local.get $34 + local.get $20 call $~lib/rt/pure/__release i32.const 5 i32.const 2 @@ -20926,21 +20752,19 @@ i32.const 2384 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $37 - call $~lib/rt/pure/__retain - local.set $34 - local.get $34 + local.set $25 + local.get $25 i32.const 0 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $35 + local.tee $20 i32.const 5 i32.const 2 i32.const 3 i32.const 2432 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $30 + local.tee $22 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -20952,14 +20776,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 0 i32.const 2 i32.const 3 i32.const 2480 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $32 + local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -20977,32 +20801,23 @@ i32.const 2496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $31 - local.tee $36 - local.get $34 - local.tee $33 - i32.ne - if - local.get $36 - call $~lib/rt/pure/__retain - local.set $36 - local.get $33 - call $~lib/rt/pure/__release - end - local.get $36 - local.set $34 - local.get $34 + local.set $24 + local.get $25 + call $~lib/rt/pure/__release + local.get $24 + local.set $25 + local.get $25 i32.const 0 i32.const 0 call $~lib/array/Array#splice - local.tee $36 + local.tee $24 i32.const 0 i32.const 2 i32.const 3 i32.const 2544 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $27 + local.tee $23 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21014,14 +20829,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 5 i32.const 2 i32.const 3 i32.const 2560 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $29 + local.tee $19 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21039,21 +20854,12 @@ i32.const 2608 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $28 - local.tee $1 - local.get $34 - local.tee $33 - i32.ne - if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 - local.get $33 - call $~lib/rt/pure/__release - end + local.set $1 + local.get $25 + call $~lib/rt/pure/__release local.get $1 - local.set $34 - local.get $34 + local.set $25 + local.get $25 i32.const 2 i32.const 2147483647 call $~lib/array/Array#splice @@ -21064,7 +20870,7 @@ i32.const 2656 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $24 + local.tee $18 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21076,14 +20882,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 2 i32.const 2 i32.const 3 i32.const 2688 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $26 + local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21101,32 +20907,23 @@ i32.const 2720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $25 - local.tee $5 - local.get $34 - local.tee $33 - i32.ne - if - local.get $5 - call $~lib/rt/pure/__retain - local.set $5 - local.get $33 - call $~lib/rt/pure/__release - end - local.get $5 - local.set $34 - local.get $34 + local.set $2 + local.get $25 + call $~lib/rt/pure/__release + local.get $2 + local.set $25 + local.get $25 i32.const 2 i32.const 2 call $~lib/array/Array#splice - local.tee $5 + local.tee $2 i32.const 2 i32.const 2 i32.const 3 i32.const 2768 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $21 + local.tee $16 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21138,14 +20935,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 3 i32.const 2 i32.const 3 i32.const 2800 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $23 + local.tee $15 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21163,32 +20960,23 @@ i32.const 2832 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $22 - local.tee $2 - local.get $34 - local.tee $33 - i32.ne - if - local.get $2 - call $~lib/rt/pure/__retain - local.set $2 - local.get $33 - call $~lib/rt/pure/__release - end - local.get $2 - local.set $34 - local.get $34 + local.set $0 + local.get $25 + call $~lib/rt/pure/__release + local.get $0 + local.set $25 + local.get $25 i32.const 0 i32.const 1 call $~lib/array/Array#splice - local.tee $2 + local.tee $0 i32.const 1 i32.const 2 i32.const 3 i32.const 2880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $18 + local.tee $14 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21200,14 +20988,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 4 i32.const 2 i32.const 3 i32.const 2912 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $20 + local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21225,32 +21013,23 @@ i32.const 2944 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $19 - local.tee $0 - local.get $34 - local.tee $33 - i32.ne - if - local.get $0 - call $~lib/rt/pure/__retain - local.set $0 - local.get $33 - call $~lib/rt/pure/__release - end - local.get $0 - local.set $34 - local.get $34 + local.set $4 + local.get $25 + call $~lib/rt/pure/__release + local.get $4 + local.set $25 + local.get $25 i32.const -1 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $0 + local.tee $4 i32.const 1 i32.const 2 i32.const 3 i32.const 2992 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $15 + local.tee $12 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21262,14 +21041,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 4 i32.const 2 i32.const 3 i32.const 3024 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $17 + local.tee $11 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21287,32 +21066,23 @@ i32.const 3056 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $16 - local.tee $6 - local.get $34 - local.tee $33 - i32.ne - if - local.get $6 - call $~lib/rt/pure/__retain - local.set $6 - local.get $33 - call $~lib/rt/pure/__release - end - local.get $6 - local.set $34 - local.get $34 + local.set $3 + local.get $25 + call $~lib/rt/pure/__release + local.get $3 + local.set $25 + local.get $25 i32.const -2 i32.const 2147483647 call $~lib/array/Array#splice - local.tee $6 + local.tee $3 i32.const 2 i32.const 2 i32.const 3 i32.const 3104 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $12 + local.tee $10 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21324,14 +21094,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 3 i32.const 2 i32.const 3 i32.const 3136 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $14 + local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21349,32 +21119,23 @@ i32.const 3168 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $13 - local.tee $7 - local.get $34 - local.tee $33 - i32.ne - if - local.get $7 - call $~lib/rt/pure/__retain - local.set $7 - local.get $33 - call $~lib/rt/pure/__release - end - local.get $7 - local.set $34 - local.get $34 + local.set $5 + local.get $25 + call $~lib/rt/pure/__release + local.get $5 + local.set $25 + local.get $25 i32.const -2 i32.const 1 call $~lib/array/Array#splice - local.tee $7 + local.tee $5 i32.const 1 i32.const 2 i32.const 3 i32.const 3216 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $9 + local.tee $8 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21386,14 +21147,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 4 i32.const 2 i32.const 3 i32.const 3248 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $11 + local.tee $7 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21411,32 +21172,23 @@ i32.const 3280 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $10 - local.tee $4 - local.get $34 - local.tee $33 - i32.ne - if - local.get $4 - call $~lib/rt/pure/__retain - local.set $4 - local.get $33 - call $~lib/rt/pure/__release - end - local.get $4 - local.set $34 - local.get $34 + local.set $6 + local.get $25 + call $~lib/rt/pure/__release + local.get $6 + local.set $25 + local.get $25 i32.const -7 i32.const 1 call $~lib/array/Array#splice - local.tee $4 + local.tee $6 i32.const 1 i32.const 2 i32.const 3 i32.const 3328 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $3 + local.tee $27 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21448,14 +21200,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 4 i32.const 2 i32.const 3 i32.const 3360 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $28 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21473,32 +21225,23 @@ i32.const 3392 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $38 - local.tee $33 - local.get $34 - local.tee $39 - i32.ne - if - local.get $33 - call $~lib/rt/pure/__retain - local.set $33 - local.get $39 - call $~lib/rt/pure/__release - end - local.get $33 - local.set $34 - local.get $34 + local.set $26 + local.get $25 + call $~lib/rt/pure/__release + local.get $26 + local.set $25 + local.get $25 i32.const -2 i32.const -1 call $~lib/array/Array#splice - local.tee $33 + local.tee $26 i32.const 0 i32.const 2 i32.const 3 i32.const 3440 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $40 + local.tee $30 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21510,14 +21253,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 5 i32.const 2 i32.const 3 i32.const 3456 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $41 + local.tee $31 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21535,32 +21278,23 @@ i32.const 3504 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $42 - local.tee $39 - local.get $34 - local.tee $43 - i32.ne - if - local.get $39 - call $~lib/rt/pure/__retain - local.set $39 - local.get $43 - call $~lib/rt/pure/__release - end - local.get $39 - local.set $34 - local.get $34 + local.set $29 + local.get $25 + call $~lib/rt/pure/__release + local.get $29 + local.set $25 + local.get $25 i32.const 1 i32.const -2 call $~lib/array/Array#splice - local.tee $39 + local.tee $29 i32.const 0 i32.const 2 i32.const 3 i32.const 3552 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $44 + local.tee $33 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21572,14 +21306,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 5 i32.const 2 i32.const 3 i32.const 3568 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $45 + local.tee $34 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21597,32 +21331,23 @@ i32.const 3616 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $46 - local.tee $43 - local.get $34 - local.tee $47 - i32.ne - if - local.get $43 - call $~lib/rt/pure/__retain - local.set $43 - local.get $47 - call $~lib/rt/pure/__release - end - local.get $43 - local.set $34 - local.get $34 + local.set $32 + local.get $25 + call $~lib/rt/pure/__release + local.get $32 + local.set $25 + local.get $25 i32.const 4 i32.const 0 call $~lib/array/Array#splice - local.tee $43 + local.tee $32 i32.const 0 i32.const 2 i32.const 3 i32.const 3664 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $48 + local.tee $36 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21634,14 +21359,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 5 i32.const 2 i32.const 3 i32.const 3680 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $49 + local.tee $37 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21659,32 +21384,23 @@ i32.const 3728 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $50 - local.tee $47 - local.get $34 - local.tee $51 - i32.ne - if - local.get $47 - call $~lib/rt/pure/__retain - local.set $47 - local.get $51 - call $~lib/rt/pure/__release - end - local.get $47 - local.set $34 - local.get $34 + local.set $35 + local.get $25 + call $~lib/rt/pure/__release + local.get $35 + local.set $25 + local.get $25 i32.const 7 i32.const 0 call $~lib/array/Array#splice - local.tee $47 + local.tee $35 i32.const 0 i32.const 2 i32.const 3 i32.const 3776 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $52 + local.tee $39 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21696,14 +21412,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 5 i32.const 2 i32.const 3 i32.const 3792 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $53 + local.tee $40 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21721,32 +21437,23 @@ i32.const 3840 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $54 - local.tee $51 - local.get $34 - local.tee $55 - i32.ne - if - local.get $51 - call $~lib/rt/pure/__retain - local.set $51 - local.get $55 - call $~lib/rt/pure/__release - end - local.get $51 - local.set $34 - local.get $34 + local.set $38 + local.get $25 + call $~lib/rt/pure/__release + local.get $38 + local.set $25 + local.get $25 i32.const 7 i32.const 5 call $~lib/array/Array#splice - local.tee $51 + local.tee $38 i32.const 0 i32.const 2 i32.const 3 i32.const 3888 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $56 + local.tee $42 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21758,14 +21465,14 @@ call $~lib/builtins/abort unreachable end - local.get $34 + local.get $25 i32.const 5 i32.const 2 i32.const 3 i32.const 3904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $57 + local.tee $43 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -21783,15 +21490,13 @@ i32.const 3952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $58 - call $~lib/rt/pure/__retain - local.set $59 - local.get $59 + local.set $45 + local.get $45 i32.const 1 i32.const 2 call $~lib/array/Array#splice - local.set $60 - local.get $60 + local.set $46 + local.get $46 call $~lib/array/Array#get:length i32.const 0 i32.eq @@ -21804,7 +21509,7 @@ call $~lib/builtins/abort unreachable end - local.get $59 + local.get $45 call $~lib/array/Array#get:length i32.const 0 i32.eq @@ -21822,69 +21527,62 @@ i32.const 8 i32.const 0 call $~lib/rt/__allocArray - local.set $55 - local.get $55 + call $~lib/rt/pure/__retain + local.set $44 + local.get $44 i32.load offset=4 - local.set $61 - local.get $61 + local.set $41 + local.get $41 i32.const 0 i32.const 1 call $std/array/Ref#constructor - local.tee $62 + local.tee $47 call $~lib/rt/pure/__retain i32.store - local.get $61 + local.get $41 i32.const 0 i32.const 2 call $std/array/Ref#constructor - local.tee $63 + local.tee $48 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $61 + local.get $41 i32.const 0 i32.const 3 call $std/array/Ref#constructor - local.tee $64 + local.tee $49 call $~lib/rt/pure/__retain i32.store offset=8 - local.get $61 + local.get $41 i32.const 0 i32.const 4 call $std/array/Ref#constructor - local.tee $65 + local.tee $50 call $~lib/rt/pure/__retain i32.store offset=12 - local.get $61 + local.get $41 i32.const 0 i32.const 5 call $std/array/Ref#constructor - local.tee $66 + local.tee $51 call $~lib/rt/pure/__retain i32.store offset=16 - local.get $55 - local.tee $55 - local.get $59 - local.tee $61 - i32.ne - if - local.get $55 - call $~lib/rt/pure/__retain - local.set $55 - local.get $61 - call $~lib/rt/pure/__release - end - local.get $55 - local.set $59 - local.get $59 + local.get $44 + local.set $44 + local.get $45 + call $~lib/rt/pure/__release + local.get $44 + local.set $45 + local.get $45 i32.const 2 i32.const 2 call $~lib/array/Array#splice - local.set $61 - local.get $60 + local.set $41 + local.get $46 call $~lib/rt/pure/__release - local.get $61 - local.set $60 - local.get $60 + local.get $41 + local.set $46 + local.get $46 call $~lib/array/Array#get:length i32.const 2 i32.eq @@ -21897,10 +21595,10 @@ call $~lib/builtins/abort unreachable end - local.get $60 + local.get $46 i32.const 0 call $~lib/array/Array#__get - local.tee $61 + local.tee $41 i32.load i32.const 3 i32.eq @@ -21913,10 +21611,10 @@ call $~lib/builtins/abort unreachable end - local.get $60 + local.get $46 i32.const 1 call $~lib/array/Array#__get - local.tee $55 + local.tee $44 i32.load i32.const 4 i32.eq @@ -21929,7 +21627,7 @@ call $~lib/builtins/abort unreachable end - local.get $59 + local.get $45 call $~lib/array/Array#get:length i32.const 3 i32.eq @@ -21942,10 +21640,10 @@ call $~lib/builtins/abort unreachable end - local.get $59 + local.get $45 i32.const 0 call $~lib/array/Array#__get - local.tee $67 + local.tee $52 i32.load i32.const 1 i32.eq @@ -21958,10 +21656,10 @@ call $~lib/builtins/abort unreachable end - local.get $59 + local.get $45 i32.const 1 call $~lib/array/Array#__get - local.tee $68 + local.tee $53 i32.load i32.const 2 i32.eq @@ -21974,10 +21672,10 @@ call $~lib/builtins/abort unreachable end - local.get $59 + local.get $45 i32.const 2 call $~lib/array/Array#__get - local.tee $69 + local.tee $54 i32.load i32.const 5 i32.eq @@ -21995,37 +21693,37 @@ i32.const 11 i32.const 0 call $~lib/rt/__allocArray - local.set $70 - local.get $70 + call $~lib/rt/pure/__retain + local.set $55 + local.get $55 i32.load offset=4 - local.set $71 - local.get $71 + local.set $56 + local.get $56 i32.const 0 i32.const 1 call $std/array/Ref#constructor - local.tee $72 + local.tee $57 call $~lib/rt/pure/__retain i32.store - local.get $71 + local.get $56 i32.const 0 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $71 + local.get $56 i32.const 0 i32.const 2 call $std/array/Ref#constructor - local.tee $73 + local.tee $58 call $~lib/rt/pure/__retain i32.store offset=8 - local.get $70 - call $~lib/rt/pure/__retain - local.set $74 - local.get $74 + local.get $55 + local.set $59 + local.get $59 i32.const 0 i32.const 1 call $~lib/array/Array#splice - local.set $75 - local.get $75 + local.set $60 + local.get $60 call $~lib/array/Array#get:length i32.const 1 i32.eq @@ -22038,13 +21736,13 @@ call $~lib/builtins/abort unreachable end - local.get $75 + local.get $60 i32.const 0 call $~lib/array/Array#__get - local.tee $71 - local.tee $70 + local.tee $56 + local.tee $55 if (result i32) - local.get $70 + local.get $55 else unreachable end @@ -22060,7 +21758,7 @@ call $~lib/builtins/abort unreachable end - local.get $74 + local.get $59 call $~lib/array/Array#get:length i32.const 2 i32.eq @@ -22073,10 +21771,10 @@ call $~lib/builtins/abort unreachable end - local.get $74 + local.get $59 i32.const 0 call $~lib/array/Array#__get - local.tee $70 + local.tee $55 i32.const 0 i32.eq i32.eqz @@ -22088,13 +21786,13 @@ call $~lib/builtins/abort unreachable end - local.get $74 + local.get $59 i32.const 1 call $~lib/array/Array#__get - local.tee $76 - local.tee $77 + local.tee $61 + local.tee $62 if (result i32) - local.get $77 + local.get $62 else unreachable end @@ -22110,107 +21808,105 @@ call $~lib/builtins/abort unreachable end - local.get $37 - call $~lib/rt/pure/__release - local.get $34 - call $~lib/rt/pure/__release - local.get $35 - call $~lib/rt/pure/__release - local.get $30 + local.get $25 call $~lib/rt/pure/__release - local.get $32 + local.get $20 call $~lib/rt/pure/__release - local.get $31 + local.get $22 call $~lib/rt/pure/__release - local.get $36 + local.get $21 call $~lib/rt/pure/__release - local.get $27 + local.get $24 call $~lib/rt/pure/__release - local.get $29 + local.get $23 call $~lib/rt/pure/__release - local.get $28 + local.get $19 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $24 - call $~lib/rt/pure/__release - local.get $26 - call $~lib/rt/pure/__release - local.get $25 - call $~lib/rt/pure/__release - local.get $5 + local.get $18 call $~lib/rt/pure/__release - local.get $21 + local.get $17 call $~lib/rt/pure/__release - local.get $23 + local.get $2 call $~lib/rt/pure/__release - local.get $22 + local.get $16 call $~lib/rt/pure/__release - local.get $2 + local.get $15 call $~lib/rt/pure/__release - local.get $18 + local.get $0 call $~lib/rt/pure/__release - local.get $20 + local.get $14 call $~lib/rt/pure/__release - local.get $19 + local.get $13 call $~lib/rt/pure/__release - local.get $0 + local.get $4 call $~lib/rt/pure/__release - local.get $15 + local.get $12 call $~lib/rt/pure/__release - local.get $17 + local.get $11 call $~lib/rt/pure/__release - local.get $16 + local.get $3 call $~lib/rt/pure/__release - local.get $6 + local.get $10 call $~lib/rt/pure/__release - local.get $12 + local.get $9 call $~lib/rt/pure/__release - local.get $14 + local.get $5 call $~lib/rt/pure/__release - local.get $13 + local.get $8 call $~lib/rt/pure/__release local.get $7 call $~lib/rt/pure/__release - local.get $9 + local.get $6 call $~lib/rt/pure/__release - local.get $11 + local.get $27 call $~lib/rt/pure/__release - local.get $10 + local.get $28 call $~lib/rt/pure/__release - local.get $4 + local.get $26 call $~lib/rt/pure/__release - local.get $3 + local.get $30 call $~lib/rt/pure/__release - local.get $8 + local.get $31 call $~lib/rt/pure/__release - local.get $38 + local.get $29 call $~lib/rt/pure/__release local.get $33 call $~lib/rt/pure/__release - local.get $40 + local.get $34 call $~lib/rt/pure/__release - local.get $41 + local.get $32 call $~lib/rt/pure/__release - local.get $42 + local.get $36 + call $~lib/rt/pure/__release + local.get $37 + call $~lib/rt/pure/__release + local.get $35 call $~lib/rt/pure/__release local.get $39 call $~lib/rt/pure/__release - local.get $44 + local.get $40 call $~lib/rt/pure/__release - local.get $45 + local.get $38 call $~lib/rt/pure/__release - local.get $46 + local.get $42 call $~lib/rt/pure/__release local.get $43 call $~lib/rt/pure/__release + local.get $47 + call $~lib/rt/pure/__release local.get $48 call $~lib/rt/pure/__release local.get $49 call $~lib/rt/pure/__release local.get $50 call $~lib/rt/pure/__release - local.get $47 + local.get $51 + call $~lib/rt/pure/__release + local.get $41 + call $~lib/rt/pure/__release + local.get $44 call $~lib/rt/pure/__release local.get $52 call $~lib/rt/pure/__release @@ -22218,43 +21914,15 @@ call $~lib/rt/pure/__release local.get $54 call $~lib/rt/pure/__release - local.get $51 - call $~lib/rt/pure/__release - local.get $56 - call $~lib/rt/pure/__release local.get $57 call $~lib/rt/pure/__release local.get $58 call $~lib/rt/pure/__release - local.get $62 - call $~lib/rt/pure/__release - local.get $63 - call $~lib/rt/pure/__release - local.get $64 - call $~lib/rt/pure/__release - local.get $65 - call $~lib/rt/pure/__release - local.get $66 - call $~lib/rt/pure/__release - local.get $61 + local.get $56 call $~lib/rt/pure/__release local.get $55 call $~lib/rt/pure/__release - local.get $67 - call $~lib/rt/pure/__release - local.get $68 - call $~lib/rt/pure/__release - local.get $69 - call $~lib/rt/pure/__release - local.get $72 - call $~lib/rt/pure/__release - local.get $73 - call $~lib/rt/pure/__release - local.get $71 - call $~lib/rt/pure/__release - local.get $70 - call $~lib/rt/pure/__release - local.get $76 + local.get $61 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 0 @@ -22417,8 +22085,8 @@ global.get $std/array/arr i32.const 7 call $~lib/array/Array#every - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 1 i32.eq i32.eqz @@ -22433,8 +22101,8 @@ global.get $std/array/arr i32.const 8 call $~lib/array/Array#every - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.eq i32.eqz @@ -22449,8 +22117,8 @@ global.get $std/array/arr i32.const 9 call $~lib/array/Array#every - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 1 i32.eq i32.eqz @@ -22478,8 +22146,8 @@ global.get $std/array/arr i32.const 10 call $~lib/array/Array#every - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.eq i32.eqz @@ -22506,8 +22174,8 @@ global.get $std/array/arr i32.const 11 call $~lib/array/Array#every - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 1 i32.eq i32.eqz @@ -22543,8 +22211,8 @@ global.get $std/array/arr i32.const 12 call $~lib/array/Array#some - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 1 i32.eq i32.eqz @@ -22559,8 +22227,8 @@ global.get $std/array/arr i32.const 13 call $~lib/array/Array#some - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.eq i32.eqz @@ -22575,8 +22243,8 @@ global.get $std/array/arr i32.const 14 call $~lib/array/Array#some - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.eq i32.eqz @@ -22604,8 +22272,8 @@ global.get $std/array/arr i32.const 15 call $~lib/array/Array#some - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 1 i32.eq i32.eqz @@ -22632,8 +22300,8 @@ global.get $std/array/arr i32.const 16 call $~lib/array/Array#some - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.eq i32.eqz @@ -22796,25 +22464,24 @@ call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $76 - loop $loop|0 - local.get $76 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $61 + loop $for-loop|0 + local.get $61 + i32.const 100 + i32.lt_s + local.set $55 + local.get $55 + if global.get $std/array/arr call $~lib/array/Array#pop drop - local.get $76 + local.get $61 i32.const 1 i32.add - local.set $76 - br $loop|0 + local.set $61 + br $for-loop|0 end - unreachable end global.get $std/array/arr i32.const 0 @@ -22835,8 +22502,8 @@ global.get $std/array/arr i32.const 22 call $~lib/array/Array#map - local.set $76 - local.get $76 + local.set $61 + local.get $61 call $~lib/array/Array#get:length i32.const 4 i32.eq @@ -22849,7 +22516,7 @@ call $~lib/builtins/abort unreachable end - local.get $76 + local.get $61 i32.const 0 call $~lib/array/Array#__get global.get $std/array/arr @@ -22966,13 +22633,13 @@ i32.const 3 call $~lib/array/Array#push drop - local.get $76 + local.get $61 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 26 call $~lib/array/Array#filter - local.set $76 - local.get $76 + local.set $61 + local.get $61 call $~lib/array/Array#get:length i32.const 2 i32.eq @@ -23085,7 +22752,7 @@ i32.const 3 call $~lib/array/Array#push drop - local.get $76 + local.get $61 call $~lib/rt/pure/__release global.get $std/array/arr i32.const 30 @@ -23125,8 +22792,8 @@ i32.const 32 i32.const 0 call $~lib/array/Array#reduce - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.ne i32.const 1 @@ -23144,8 +22811,8 @@ i32.const 33 i32.const 0 call $~lib/array/Array#reduce - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.ne i32.const 0 @@ -23294,8 +22961,8 @@ i32.const 39 i32.const 0 call $~lib/array/Array#reduceRight - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.ne i32.const 1 @@ -23313,8 +22980,8 @@ i32.const 40 i32.const 0 call $~lib/array/Array#reduceRight - local.set $76 - local.get $76 + local.set $61 + local.get $61 i32.const 0 i32.ne i32.const 0 @@ -23442,23 +23109,21 @@ i32.const 4320 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $70 - call $~lib/rt/pure/__retain - local.set $76 + local.set $55 i32.const 0 - global.set $~lib/argc - local.get $76 + global.set $~argumentsLength + local.get $55 i32.const 0 call $~lib/array/Array#sort|trampoline call $~lib/rt/pure/__release - local.get $76 + local.get $55 i32.const 8 i32.const 2 i32.const 9 i32.const 4368 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $73 + local.tee $56 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -23476,23 +23141,21 @@ i32.const 4416 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $72 - call $~lib/rt/pure/__retain - local.set $71 + local.set $58 i32.const 0 - global.set $~lib/argc - local.get $71 + global.set $~argumentsLength + local.get $58 i32.const 0 call $~lib/array/Array#sort|trampoline call $~lib/rt/pure/__release - local.get $71 + local.get $58 i32.const 8 i32.const 3 i32.const 10 i32.const 4496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $68 + local.tee $57 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -23510,23 +23173,21 @@ i32.const 4576 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $67 - call $~lib/rt/pure/__retain - local.set $69 + local.set $54 i32.const 0 - global.set $~lib/argc - local.get $69 + global.set $~argumentsLength + local.get $54 i32.const 0 call $~lib/array/Array#sort|trampoline call $~lib/rt/pure/__release - local.get $69 + local.get $54 i32.const 5 i32.const 2 i32.const 3 i32.const 4624 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $61 + local.tee $53 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -23544,23 +23205,21 @@ i32.const 4672 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $66 - call $~lib/rt/pure/__retain - local.set $55 + local.set $52 i32.const 0 - global.set $~lib/argc - local.get $55 + global.set $~argumentsLength + local.get $52 i32.const 0 call $~lib/array/Array#sort|trampoline call $~lib/rt/pure/__release - local.get $55 + local.get $52 i32.const 5 i32.const 2 i32.const 7 i32.const 4720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $64 + local.tee $44 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -23578,72 +23237,62 @@ i32.const 4768 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $63 - call $~lib/rt/pure/__retain - local.set $65 + local.set $41 i32.const 1 i32.const 2 i32.const 3 i32.const 4784 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $58 - call $~lib/rt/pure/__retain - local.set $62 + local.set $51 i32.const 2 i32.const 2 i32.const 3 i32.const 4816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $56 - call $~lib/rt/pure/__retain - local.set $57 + local.set $50 i32.const 4 i32.const 2 i32.const 3 i32.const 4848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $54 - call $~lib/rt/pure/__retain - local.set $51 + local.set $49 i32.const 4 i32.const 2 i32.const 3 i32.const 4880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $52 - call $~lib/rt/pure/__retain - local.set $53 + local.set $48 i32.const 64 call $std/array/createReverseOrderedArray - local.set $47 + local.set $61 i32.const 128 call $std/array/createReverseOrderedArray - local.set $50 + local.set $47 i32.const 1024 call $std/array/createReverseOrderedArray - local.set $49 + local.set $43 i32.const 10000 call $std/array/createReverseOrderedArray - local.set $48 + local.set $42 i32.const 512 call $std/array/createRandomOrderedArray - local.set $43 - local.get $65 + local.set $38 + local.get $41 call $std/array/assertSortedDefault - local.get $62 + local.get $51 call $std/array/assertSortedDefault - local.get $62 + local.get $51 i32.const 1 i32.const 2 i32.const 3 i32.const 4976 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $45 + local.tee $39 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -23655,16 +23304,16 @@ call $~lib/builtins/abort unreachable end - local.get $57 + local.get $50 call $std/array/assertSortedDefault - local.get $57 + local.get $50 i32.const 2 i32.const 2 i32.const 3 i32.const 5008 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $44 + local.tee $35 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -23676,10 +23325,10 @@ call $~lib/builtins/abort unreachable end - local.get $51 + local.get $49 call $std/array/assertSortedDefault - local.get $51 - local.get $53 + local.get $49 + local.get $48 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -23691,10 +23340,10 @@ call $~lib/builtins/abort unreachable end - local.get $47 + local.get $61 call $std/array/assertSortedDefault - local.get $47 - local.get $53 + local.get $61 + local.get $48 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -23706,10 +23355,10 @@ call $~lib/builtins/abort unreachable end - local.get $50 + local.get $47 call $std/array/assertSortedDefault - local.get $50 - local.get $53 + local.get $47 + local.get $48 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -23721,10 +23370,10 @@ call $~lib/builtins/abort unreachable end - local.get $49 + local.get $43 call $std/array/assertSortedDefault - local.get $49 - local.get $53 + local.get $43 + local.get $48 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -23736,10 +23385,10 @@ call $~lib/builtins/abort unreachable end - local.get $48 + local.get $42 call $std/array/assertSortedDefault + local.get $42 local.get $48 - local.get $53 i32.const 4 call $std/array/isArraysEqual i32.eqz @@ -23751,53 +23400,27 @@ call $~lib/builtins/abort unreachable end - local.get $43 + local.get $38 call $std/array/assertSortedDefault - local.get $70 - call $~lib/rt/pure/__release - local.get $76 - call $~lib/rt/pure/__release - local.get $73 - call $~lib/rt/pure/__release - local.get $72 - call $~lib/rt/pure/__release - local.get $71 - call $~lib/rt/pure/__release - local.get $68 - call $~lib/rt/pure/__release - local.get $67 - call $~lib/rt/pure/__release - local.get $69 - call $~lib/rt/pure/__release - local.get $61 - call $~lib/rt/pure/__release - local.get $66 - call $~lib/rt/pure/__release local.get $55 call $~lib/rt/pure/__release - local.get $64 - call $~lib/rt/pure/__release - local.get $63 - call $~lib/rt/pure/__release - local.get $65 + local.get $56 call $~lib/rt/pure/__release local.get $58 call $~lib/rt/pure/__release - local.get $62 - call $~lib/rt/pure/__release - local.get $56 - call $~lib/rt/pure/__release local.get $57 call $~lib/rt/pure/__release local.get $54 call $~lib/rt/pure/__release - local.get $51 + local.get $53 call $~lib/rt/pure/__release local.get $52 call $~lib/rt/pure/__release - local.get $53 + local.get $44 call $~lib/rt/pure/__release - local.get $47 + local.get $41 + call $~lib/rt/pure/__release + local.get $51 call $~lib/rt/pure/__release local.get $50 call $~lib/rt/pure/__release @@ -23805,49 +23428,57 @@ call $~lib/rt/pure/__release local.get $48 call $~lib/rt/pure/__release + local.get $61 + call $~lib/rt/pure/__release + local.get $47 + call $~lib/rt/pure/__release local.get $43 call $~lib/rt/pure/__release - local.get $45 + local.get $42 call $~lib/rt/pure/__release - local.get $44 + local.get $38 + call $~lib/rt/pure/__release + local.get $39 + call $~lib/rt/pure/__release + local.get $35 call $~lib/rt/pure/__release i32.const 64 call $std/array/createRandomOrderedArray - local.set $44 + local.set $35 i32.const 257 call $std/array/createRandomOrderedArray - local.set $45 - local.get $44 + local.set $39 + local.get $35 i32.const 49 call $std/array/assertSorted - local.get $44 + local.get $35 i32.const 50 call $std/array/assertSorted - local.get $45 + local.get $39 i32.const 51 call $std/array/assertSorted - local.get $45 + local.get $39 i32.const 52 call $std/array/assertSorted - local.get $44 + local.get $35 call $~lib/rt/pure/__release - local.get $45 + local.get $39 call $~lib/rt/pure/__release i32.const 2 call $std/array/createReverseOrderedNestedArray - local.set $45 - local.get $45 + local.set $39 + local.get $39 i32.const 53 call $std/array/assertSorted<~lib/array/Array> - local.get $45 + local.get $39 call $~lib/rt/pure/__release i32.const 512 call $std/array/createReverseOrderedElementsArray - local.set $45 - local.get $45 + local.set $39 + local.get $39 i32.const 54 call $std/array/assertSorted> - local.get $45 + local.get $39 call $~lib/rt/pure/__release i32.const 7 i32.const 2 @@ -23855,25 +23486,21 @@ i32.const 5184 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $44 - call $~lib/rt/pure/__retain - local.set $45 + local.set $35 i32.const 7 i32.const 2 i32.const 15 i32.const 5232 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $48 - call $~lib/rt/pure/__retain - local.set $43 + local.set $38 i32.const 1 - global.set $~lib/argc - local.get $45 + global.set $~argumentsLength + local.get $35 i32.const 0 call $std/array/assertSorted<~lib/string/String | null>|trampoline - local.get $45 - local.get $43 + local.get $35 + local.get $38 i32.const 0 call $std/array/isArraysEqual<~lib/string/String | null> i32.eqz @@ -23887,21 +23514,17 @@ end i32.const 400 call $std/array/createRandomStringArray - local.set $49 + local.set $39 i32.const 1 - global.set $~lib/argc - local.get $49 + global.set $~argumentsLength + local.get $39 i32.const 0 call $std/array/assertSorted<~lib/string/String>|trampoline - local.get $44 - call $~lib/rt/pure/__release - local.get $45 - call $~lib/rt/pure/__release - local.get $48 + local.get $35 call $~lib/rt/pure/__release - local.get $43 + local.get $38 call $~lib/rt/pure/__release - local.get $49 + local.get $39 call $~lib/rt/pure/__release i32.const 2 i32.const 0 @@ -23909,10 +23532,10 @@ i32.const 5312 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $43 + local.tee $38 i32.const 5408 call $~lib/array/Array#join - local.tee $49 + local.tee $39 i32.const 5440 call $~lib/string/String.__eq i32.eqz @@ -23930,10 +23553,10 @@ i32.const 5488 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $45 + local.tee $42 i32.const 5168 call $~lib/array/Array#join - local.tee $48 + local.tee $35 i32.const 6000 call $~lib/string/String.__eq i32.eqz @@ -23951,10 +23574,10 @@ i32.const 6032 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $50 + local.tee $47 i32.const 6064 call $~lib/array/Array#join - local.tee $44 + local.tee $43 i32.const 6000 call $~lib/string/String.__eq i32.eqz @@ -23972,10 +23595,10 @@ i32.const 6096 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $53 + local.tee $48 i32.const 6128 call $~lib/array/Array#join - local.tee $47 + local.tee $61 i32.const 6160 call $~lib/string/String.__eq i32.eqz @@ -23993,10 +23616,10 @@ i32.const 6224 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $51 + local.tee $50 i32.const 6288 call $~lib/array/Array#join - local.tee $52 + local.tee $49 i32.const 7536 call $~lib/string/String.__eq i32.eqz @@ -24014,10 +23637,10 @@ i32.const 7664 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $57 + local.tee $41 i32.const 5168 call $~lib/array/Array<~lib/string/String | null>#join - local.tee $54 + local.tee $51 i32.const 7632 call $~lib/string/String.__eq i32.eqz @@ -24034,35 +23657,35 @@ i32.const 11 i32.const 0 call $~lib/rt/__allocArray - local.set $56 - local.get $56 + call $~lib/rt/pure/__retain + local.set $44 + local.get $44 i32.load offset=4 - local.set $62 - local.get $62 + local.set $52 + local.get $52 i32.const 0 i32.const 0 call $std/array/Ref#constructor - local.tee $58 + local.tee $53 call $~lib/rt/pure/__retain i32.store - local.get $62 + local.get $52 i32.const 0 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $62 + local.get $52 i32.const 0 i32.const 0 call $std/array/Ref#constructor - local.tee $65 + local.tee $54 call $~lib/rt/pure/__retain i32.store offset=8 - local.get $56 - call $~lib/rt/pure/__retain - local.set $62 - local.get $62 + local.get $44 + local.set $52 + local.get $52 i32.const 5408 call $~lib/array/Array#join - local.tee $56 + local.tee $44 i32.const 7744 call $~lib/string/String.__eq i32.eqz @@ -24079,31 +23702,31 @@ i32.const 8 i32.const 0 call $~lib/rt/__allocArray - local.set $63 - local.get $63 + call $~lib/rt/pure/__retain + local.set $57 + local.get $57 i32.load offset=4 - local.set $64 - local.get $64 + local.set $58 + local.get $58 i32.const 0 i32.const 0 call $std/array/Ref#constructor - local.tee $55 + local.tee $56 call $~lib/rt/pure/__retain i32.store - local.get $64 + local.get $58 i32.const 0 i32.const 0 call $std/array/Ref#constructor - local.tee $66 + local.tee $55 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $63 - call $~lib/rt/pure/__retain - local.set $64 - local.get $64 + local.get $57 + local.set $58 + local.get $58 i32.const 5408 call $~lib/array/Array#join - local.tee $63 + local.tee $57 i32.const 7824 call $~lib/string/String.__eq i32.eqz @@ -24115,45 +23738,45 @@ call $~lib/builtins/abort unreachable end - local.get $43 + local.get $38 call $~lib/rt/pure/__release - local.get $49 + local.get $39 call $~lib/rt/pure/__release - local.get $45 + local.get $42 + call $~lib/rt/pure/__release + local.get $35 + call $~lib/rt/pure/__release + local.get $47 + call $~lib/rt/pure/__release + local.get $43 call $~lib/rt/pure/__release local.get $48 call $~lib/rt/pure/__release - local.get $50 + local.get $61 call $~lib/rt/pure/__release - local.get $44 + local.get $50 call $~lib/rt/pure/__release - local.get $53 + local.get $49 call $~lib/rt/pure/__release - local.get $47 + local.get $41 call $~lib/rt/pure/__release local.get $51 call $~lib/rt/pure/__release - local.get $52 - call $~lib/rt/pure/__release - local.get $57 + local.get $53 call $~lib/rt/pure/__release local.get $54 call $~lib/rt/pure/__release - local.get $58 - call $~lib/rt/pure/__release - local.get $65 + local.get $52 call $~lib/rt/pure/__release - local.get $62 + local.get $44 call $~lib/rt/pure/__release local.get $56 call $~lib/rt/pure/__release local.get $55 call $~lib/rt/pure/__release - local.get $66 - call $~lib/rt/pure/__release - local.get $64 + local.get $58 call $~lib/rt/pure/__release - local.get $63 + local.get $57 call $~lib/rt/pure/__release i32.const 0 i32.const 2 @@ -24161,26 +23784,20 @@ i32.const 7904 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $64 - call $~lib/rt/pure/__retain - local.set $63 + local.set $58 i32.const 1 i32.const 2 i32.const 3 i32.const 7920 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $55 - call $~lib/rt/pure/__retain - local.set $66 + local.set $55 i32.const 2 i32.const 2 i32.const 3 i32.const 7952 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $62 - call $~lib/rt/pure/__retain local.set $56 i32.const 4 i32.const 2 @@ -24188,12 +23805,10 @@ i32.const 7984 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $58 - call $~lib/rt/pure/__retain - local.set $65 - local.get $63 + local.set $44 + local.get $58 call $~lib/array/Array#toString - local.tee $54 + local.tee $57 i32.const 5168 call $~lib/string/String.__eq i32.eqz @@ -24205,9 +23820,9 @@ call $~lib/builtins/abort unreachable end - local.get $66 + local.get $55 call $~lib/array/Array#toString - local.tee $57 + local.tee $52 i32.const 7632 call $~lib/string/String.__eq i32.eqz @@ -24221,7 +23836,7 @@ end local.get $56 call $~lib/array/Array#toString - local.tee $52 + local.tee $54 i32.const 8016 call $~lib/string/String.__eq i32.eqz @@ -24233,9 +23848,9 @@ call $~lib/builtins/abort unreachable end - local.get $65 + local.get $44 call $~lib/array/Array#toString - local.tee $51 + local.tee $53 i32.const 8048 call $~lib/string/String.__eq i32.eqz @@ -24253,9 +23868,9 @@ i32.const 8080 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $53 + local.tee $41 call $~lib/array/Array#toString - local.tee $47 + local.tee $51 i32.const 8112 call $~lib/string/String.__eq i32.eqz @@ -24275,7 +23890,7 @@ call $~lib/rt/pure/__retain local.tee $50 call $~lib/array/Array#toString - local.tee $44 + local.tee $49 i32.const 8176 call $~lib/string/String.__eq i32.eqz @@ -24293,9 +23908,9 @@ i32.const 8224 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $45 - call $~lib/array/Array#toString local.tee $48 + call $~lib/array/Array#toString + local.tee $61 i32.const 8272 call $~lib/string/String.__eq i32.eqz @@ -24313,9 +23928,9 @@ i32.const 8336 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $43 + local.tee $47 call $~lib/array/Array#toString - local.tee $49 + local.tee $43 i32.const 8384 call $~lib/string/String.__eq i32.eqz @@ -24333,12 +23948,10 @@ i32.const 8496 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $69 - call $~lib/rt/pure/__retain - local.set $61 - local.get $61 + local.set $42 + local.get $42 call $~lib/array/Array<~lib/string/String | null>#toString - local.tee $67 + local.tee $35 i32.const 8544 call $~lib/string/String.__eq i32.eqz @@ -24356,9 +23969,9 @@ i32.const 8656 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $71 + local.tee $38 call $~lib/array/Array<~lib/string/String | null>#toString - local.tee $68 + local.tee $39 i32.const 8688 call $~lib/string/String.__eq i32.eqz @@ -24375,36 +23988,36 @@ i32.const 12 i32.const 0 call $~lib/rt/__allocArray - local.set $72 - local.get $72 + call $~lib/rt/pure/__retain + local.set $40 + local.get $40 i32.load offset=4 - local.set $73 - local.get $73 + local.set $37 + local.get $37 i32.const 2 i32.const 2 i32.const 3 i32.const 8720 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $70 + local.tee $32 call $~lib/rt/pure/__retain i32.store - local.get $73 + local.get $37 i32.const 2 i32.const 2 i32.const 3 i32.const 8752 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $46 + local.tee $34 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $72 - call $~lib/rt/pure/__retain - local.set $78 - local.get $78 + local.get $40 + local.set $63 + local.get $63 call $~lib/array/Array<~lib/array/Array>#toString - local.tee $73 + local.tee $37 i32.const 8784 call $~lib/string/String.__eq i32.eqz @@ -24421,36 +24034,36 @@ i32.const 23 i32.const 0 call $~lib/rt/__allocArray - local.set $72 - local.get $72 + call $~lib/rt/pure/__retain + local.set $40 + local.get $40 i32.load offset=4 - local.set $76 - local.get $76 + local.set $36 + local.get $36 i32.const 2 i32.const 0 i32.const 6 i32.const 8816 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $42 + local.tee $29 call $~lib/rt/pure/__retain i32.store - local.get $76 + local.get $36 i32.const 2 i32.const 0 i32.const 6 i32.const 8848 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $41 + local.tee $31 call $~lib/rt/pure/__retain i32.store offset=4 - local.get $72 - call $~lib/rt/pure/__retain - local.set $79 - local.get $79 + local.get $40 + local.set $64 + local.get $64 call $~lib/array/Array<~lib/array/Array>#toString - local.tee $76 + local.tee $36 i32.const 8784 call $~lib/string/String.__eq i32.eqz @@ -24467,39 +24080,41 @@ i32.const 25 i32.const 0 call $~lib/rt/__allocArray - local.set $72 - local.get $72 + call $~lib/rt/pure/__retain + local.set $40 + local.get $40 i32.load offset=4 - local.set $39 - local.get $39 + local.set $33 + local.get $33 i32.const 1 i32.const 2 i32.const 24 i32.const 0 call $~lib/rt/__allocArray - local.set $40 - local.get $40 + call $~lib/rt/pure/__retain + local.set $30 + local.get $30 i32.load offset=4 - local.set $33 - local.get $33 + local.set $26 + local.get $26 i32.const 1 i32.const 2 i32.const 7 i32.const 8880 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.tee $8 + local.tee $27 call $~lib/rt/pure/__retain i32.store - local.get $40 + local.get $30 + local.tee $26 call $~lib/rt/pure/__retain i32.store - local.get $72 - call $~lib/rt/pure/__retain - local.set $80 - local.get $80 + local.get $40 + local.set $65 + local.get $65 call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#toString - local.tee $39 + local.tee $33 i32.const 7632 call $~lib/string/String.__eq i32.eqz @@ -24511,96 +24126,88 @@ call $~lib/builtins/abort unreachable end - local.get $64 - call $~lib/rt/pure/__release - local.get $63 + local.get $58 call $~lib/rt/pure/__release local.get $55 call $~lib/rt/pure/__release - local.get $66 - call $~lib/rt/pure/__release - local.get $62 - call $~lib/rt/pure/__release local.get $56 call $~lib/rt/pure/__release - local.get $58 - call $~lib/rt/pure/__release - local.get $65 - call $~lib/rt/pure/__release - local.get $54 + local.get $44 call $~lib/rt/pure/__release local.get $57 call $~lib/rt/pure/__release local.get $52 call $~lib/rt/pure/__release - local.get $51 + local.get $54 call $~lib/rt/pure/__release local.get $53 call $~lib/rt/pure/__release - local.get $47 + local.get $41 call $~lib/rt/pure/__release - local.get $50 + local.get $51 call $~lib/rt/pure/__release - local.get $44 + local.get $50 call $~lib/rt/pure/__release - local.get $45 + local.get $49 call $~lib/rt/pure/__release local.get $48 call $~lib/rt/pure/__release - local.get $43 + local.get $61 call $~lib/rt/pure/__release - local.get $49 + local.get $47 call $~lib/rt/pure/__release - local.get $69 + local.get $43 call $~lib/rt/pure/__release - local.get $61 + local.get $42 call $~lib/rt/pure/__release - local.get $67 + local.get $35 call $~lib/rt/pure/__release - local.get $71 + local.get $38 call $~lib/rt/pure/__release - local.get $68 + local.get $39 call $~lib/rt/pure/__release - local.get $70 + local.get $32 call $~lib/rt/pure/__release - local.get $46 + local.get $34 call $~lib/rt/pure/__release - local.get $73 + local.get $37 call $~lib/rt/pure/__release - local.get $42 + local.get $29 call $~lib/rt/pure/__release - local.get $41 + local.get $31 call $~lib/rt/pure/__release - local.get $76 + local.get $36 call $~lib/rt/pure/__release - local.get $8 + local.get $27 call $~lib/rt/pure/__release - local.get $39 + local.get $26 + call $~lib/rt/pure/__release + local.get $33 call $~lib/rt/pure/__release global.get $std/array/arr call $~lib/rt/pure/__release - local.get $59 + local.get $45 call $~lib/rt/pure/__release - local.get $60 + local.get $46 call $~lib/rt/pure/__release - local.get $74 + local.get $59 call $~lib/rt/pure/__release - local.get $75 + local.get $60 call $~lib/rt/pure/__release - local.get $78 + local.get $63 call $~lib/rt/pure/__release - local.get $79 + local.get $64 call $~lib/rt/pure/__release - local.get $80 + local.get $65 call $~lib/rt/pure/__release ) - (func $start (; 316 ;) - global.get $~lib/started + (func $~start (; 316 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:std/array ) @@ -24747,6 +24354,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -24757,19 +24365,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -24777,9 +24385,8 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array#__visit_impl (; 322 ;) (param $0 i32) (param $1 i32) @@ -24792,6 +24399,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -24802,19 +24410,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -24822,15 +24430,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 325 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -24841,19 +24449,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -24861,15 +24469,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array>#__visit_impl (; 326 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -24880,19 +24488,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -24900,15 +24508,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array<~lib/string/String | null>#__visit_impl (; 327 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -24919,19 +24527,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -24939,15 +24547,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 328 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -24958,19 +24566,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -24978,9 +24586,8 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array#__visit_impl (; 329 ;) (param $0 i32) (param $1 i32) @@ -25005,6 +24612,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -25015,19 +24623,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -25035,15 +24643,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 336 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -25054,19 +24662,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -25074,15 +24682,15 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl (; 337 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -25093,19 +24701,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -25113,9 +24721,8 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/rt/__visit_members (; 338 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index c80cb48c7a..1a6814a69d 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -30,9 +30,10 @@ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -628,7 +629,7 @@ i32.const 2256 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -642,7 +643,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -662,14 +663,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 688 @@ -981,7 +982,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1040,14 +1041,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1059,12 +1060,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1083,7 +1084,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1493,7 +1494,7 @@ local.get $2 i32.sub local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 32 i32.ge_u @@ -1524,7 +1525,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -1610,7 +1611,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1636,10 +1637,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1660,11 +1661,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1685,7 +1686,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1697,7 +1698,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1718,10 +1719,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1737,11 +1738,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1755,7 +1756,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -2405,7 +2406,7 @@ call $~lib/arraybuffer/ArrayBufferView#constructor local.set $5 i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.load local.tee $3 @@ -2425,7 +2426,7 @@ local.get $3 call $~lib/rt/pure/__release ) - (func $start (; 37 ;) + (func $~start (; 37 ;) call $start:std/arraybuffer ) (func $~lib/rt/pure/__visit (; 38 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index 56d71b1007..4557a886b9 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -34,11 +34,12 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 544)) (global $~lib/heap/__heap_base i32 (i32.const 676)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -758,6 +759,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -811,71 +814,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1264,34 +1265,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1300,23 +1302,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1325,11 +1327,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1341,21 +1343,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1363,39 +1364,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1707,6 +1706,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -1925,13 +1925,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -1958,9 +1958,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -2055,39 +2054,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2095,13 +2094,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2142,9 +2141,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2301,13 +2299,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2382,9 +2380,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2423,13 +2420,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2504,9 +2501,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2531,13 +2527,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2612,9 +2608,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3084,6 +3079,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3130,13 +3126,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3147,30 +3143,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3187,37 +3182,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3228,15 +3221,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3253,17 +3246,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3276,16 +3268,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3297,9 +3288,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3985,7 +3975,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -4357,7 +4347,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $2 i32.load @@ -4388,7 +4378,7 @@ local.get $5 call $~lib/rt/pure/__release ) - (func $start (; 51 ;) + (func $~start (; 51 ;) call $start:std/arraybuffer ) (func $~lib/array/Array#__visit_impl (; 52 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 65a684e657..df21c1f34d 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -37,9 +37,10 @@ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -635,7 +636,7 @@ i32.const 2176 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -649,7 +650,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -669,14 +670,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 608 @@ -988,7 +989,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1047,14 +1048,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1066,12 +1067,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1090,7 +1091,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1464,7 +1465,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1490,10 +1491,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1514,11 +1515,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1539,7 +1540,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1551,7 +1552,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1572,10 +1573,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1591,11 +1592,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1609,7 +1610,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -2546,7 +2547,7 @@ block $2of2 block $1of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $1of2 $1of2 $2of2 $outOfRange @@ -4085,7 +4086,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $1 i32.load call $~lib/dataview/DataView#constructor|trampoline @@ -4119,7 +4120,7 @@ local.get $2 call $~lib/rt/pure/__release ) - (func $start (; 62 ;) + (func $~start (; 62 ;) call $start:std/dataview ) (func $~lib/rt/pure/__visit (; 63 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/dataview.untouched.wat b/tests/compiler/std/dataview.untouched.wat index f4e818ce4a..aeeab0af52 100644 --- a/tests/compiler/std/dataview.untouched.wat +++ b/tests/compiler/std/dataview.untouched.wat @@ -41,11 +41,12 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 560)) (global $~lib/heap/__heap_base i32 (i32.const 604)) + (export "__argumentsLength" (global $~argumentsLength)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -765,6 +766,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -818,71 +821,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1271,34 +1272,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1307,23 +1309,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1332,11 +1334,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1348,21 +1350,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1370,39 +1371,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1714,6 +1713,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -1932,13 +1932,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -1965,9 +1965,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -2057,39 +2056,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2097,13 +2096,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2144,9 +2143,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2303,13 +2301,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2384,9 +2382,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2425,13 +2422,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2506,9 +2503,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2533,13 +2529,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2614,9 +2610,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3086,6 +3081,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3132,13 +3128,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3149,30 +3145,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3189,37 +3184,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3230,15 +3223,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3255,17 +3248,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3278,16 +3270,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3299,9 +3290,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -4487,7 +4477,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -6200,7 +6190,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $0 i32.load @@ -6243,7 +6233,7 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $start (; 67 ;) + (func $~start (; 67 ;) call $start:std/dataview ) (func $~lib/rt/pure/__visit (; 68 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index ba1a223780..3439d7507a 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -15,7 +15,7 @@ (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $std/date/date (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 3 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -206,7 +206,7 @@ unreachable end ) - (func $start (; 6 ;) + (func $~start (; 6 ;) call $start:std/date ) ) diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 1079479214..c1bc2fa6c9 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -21,7 +21,7 @@ (global $std/date/date (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 56)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 3 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -337,7 +337,7 @@ unreachable end ) - (func $start (; 10 ;) + (func $~start (; 10 ;) call $start:std/date ) ) diff --git a/tests/compiler/std/hash.optimized.wat b/tests/compiler/std/hash.optimized.wat index ffe00033f1..db2556137b 100644 --- a/tests/compiler/std/hash.optimized.wat +++ b/tests/compiler/std/hash.optimized.wat @@ -7,7 +7,7 @@ (data (i32.const 64) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00a\00b") (data (i32.const 96) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00a\00b\00c") (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/util/hash/hashStr (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -17,23 +17,22 @@ local.get $0 local.tee $2 if - block $break|0 - i32.const 0 - local.set $0 - local.get $2 - i32.const 16 - i32.sub - i32.load offset=12 - i32.const 1 - i32.shr_u - i32.const 1 - i32.shl - local.set $3 - loop $loop|0 - local.get $0 - local.get $3 - i32.ge_u - br_if $break|0 + i32.const 0 + local.set $0 + local.get $2 + i32.const 16 + i32.sub + i32.load offset=12 + i32.const 1 + i32.shr_u + i32.const 1 + i32.shl + local.set $3 + loop $for-loop|0 + local.get $0 + local.get $3 + i32.lt_u + if local.get $1 local.get $0 local.get $2 @@ -47,13 +46,12 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end - unreachable end end ) - (func $start (; 1 ;) + (func $~start (; 1 ;) i32.const 0 call $~lib/util/hash/hashStr i32.const 32 diff --git a/tests/compiler/std/hash.untouched.wat b/tests/compiler/std/hash.untouched.wat index ccb30f0335..18b53a3def 100644 --- a/tests/compiler/std/hash.untouched.wat +++ b/tests/compiler/std/hash.untouched.wat @@ -10,7 +10,7 @@ (data (i32.const 96) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00a\00b\00c\00") (table $0 1 funcref) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/__retain (; 0 ;) (param $0 i32) (result i32) local.get $0 ) @@ -29,6 +29,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -38,20 +39,20 @@ i32.const 0 i32.ne if - block $break|0 - i32.const 0 - local.set $2 - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + local.get $0 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $1 local.get $0 local.get $2 @@ -65,9 +66,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end end local.get $1 @@ -401,7 +401,7 @@ call $std/hash/check drop ) - (func $start (; 8 ;) + (func $~start (; 8 ;) call $start:std/hash ) ) diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index 156b1582eb..b2c80026da 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -54,7 +54,7 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -650,7 +650,7 @@ i32.const 2448 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -664,7 +664,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -684,14 +684,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 880 @@ -1003,7 +1003,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1062,14 +1062,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1081,12 +1081,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1105,7 +1105,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1568,7 +1568,7 @@ local.get $2 i32.sub local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 32 i32.ge_u @@ -1599,7 +1599,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -1668,7 +1668,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1694,10 +1694,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1718,11 +1718,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1743,7 +1743,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1755,7 +1755,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1776,10 +1776,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1795,11 +1795,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1813,7 +1813,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -2091,7 +2091,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -2111,15 +2111,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -2174,7 +2172,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -2218,7 +2216,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -2736,7 +2734,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -2767,7 +2765,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -2859,7 +2857,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -2890,7 +2888,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -3039,7 +3037,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -3059,15 +3057,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=4 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -3109,7 +3105,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -3153,7 +3149,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -3338,7 +3334,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -3356,15 +3352,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -3406,7 +3400,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -3450,7 +3444,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -3662,8 +3656,12 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 100 i32.lt_s if @@ -3718,14 +3716,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -3742,8 +3738,12 @@ end i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|3 local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 100 i32.lt_s if @@ -3818,14 +3818,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -3852,7 +3850,7 @@ local.set $5 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|4 local.get $0 local.get $3 i32.load offset=12 @@ -3883,24 +3881,8 @@ i32.const 20 i32.sub call $~lib/map/Map#has + i32.eqz if - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -3908,7 +3890,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $2 + call $~lib/map/Map#set + local.get $5 + local.get $7 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $4 @@ -3937,8 +3934,12 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|6 local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 50 i32.lt_s if @@ -3986,14 +3987,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|6 end end local.get $1 @@ -4010,8 +4009,12 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|8 local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 50 i32.lt_s if @@ -4061,14 +4064,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|8 end end local.get $1 @@ -4182,7 +4183,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -4226,7 +4227,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -4415,7 +4416,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -4446,7 +4447,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -4538,7 +4539,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -4582,7 +4583,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -4794,8 +4795,10 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $0 + i32.const 255 + i32.and i32.const 100 i32.lt_u if @@ -4846,14 +4849,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -4870,8 +4871,10 @@ end i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|3 local.get $0 + i32.const 255 + i32.and i32.const 100 i32.lt_u if @@ -4940,14 +4943,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -4974,7 +4975,7 @@ local.set $5 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|4 local.get $0 local.get $3 i32.load offset=12 @@ -5005,24 +5006,8 @@ i32.const 20 i32.sub call $~lib/map/Map#has + i32.eqz if - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -5030,7 +5015,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $2 + call $~lib/map/Map#set + local.get $5 + local.get $7 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $4 @@ -5059,8 +5059,10 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|6 local.get $0 + i32.const 255 + i32.and i32.const 50 i32.lt_u if @@ -5106,14 +5108,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|6 end end local.get $1 @@ -5130,8 +5130,10 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|8 local.get $0 + i32.const 255 + i32.and i32.const 50 i32.lt_u if @@ -5179,14 +5181,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|8 end end local.get $1 @@ -5279,7 +5279,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -5299,15 +5299,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -5362,7 +5360,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -5406,7 +5404,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -5649,7 +5647,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -5680,7 +5678,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -5749,7 +5747,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -5769,15 +5767,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=4 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -5819,7 +5815,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -5863,7 +5859,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -6079,8 +6075,12 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 100 i32.lt_s if @@ -6135,14 +6135,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -6159,8 +6157,12 @@ end i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|3 local.get $0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 100 i32.lt_s if @@ -6235,14 +6237,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -6269,7 +6269,7 @@ local.set $5 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|4 local.get $0 local.get $3 i32.load offset=12 @@ -6300,24 +6300,8 @@ i32.const 20 i32.sub call $~lib/map/Map#has + i32.eqz if - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -6325,7 +6309,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $2 + call $~lib/map/Map#set + local.get $5 + local.get $7 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $4 @@ -6354,8 +6353,12 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|6 local.get $0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 50 i32.lt_s if @@ -6403,14 +6406,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|6 end end local.get $1 @@ -6427,8 +6428,12 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|8 local.get $0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 50 i32.lt_s if @@ -6478,14 +6483,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|8 end end local.get $1 @@ -6599,7 +6602,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -6643,7 +6646,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -6832,7 +6835,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -6863,7 +6866,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -6957,7 +6960,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -7001,7 +7004,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -7213,8 +7216,10 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $0 + i32.const 65535 + i32.and i32.const 100 i32.lt_u if @@ -7265,14 +7270,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -7289,8 +7292,10 @@ end i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|3 local.get $0 + i32.const 65535 + i32.and i32.const 100 i32.lt_u if @@ -7359,14 +7364,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -7393,7 +7396,7 @@ local.set $5 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|4 local.get $0 local.get $3 i32.load offset=12 @@ -7424,24 +7427,8 @@ i32.const 20 i32.sub call $~lib/map/Map#has + i32.eqz if - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -7449,7 +7436,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $2 + call $~lib/map/Map#set + local.get $5 + local.get $7 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $4 @@ -7478,8 +7480,10 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|6 local.get $0 + i32.const 65535 + i32.and i32.const 50 i32.lt_u if @@ -7525,14 +7529,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|6 end end local.get $1 @@ -7549,8 +7551,10 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|8 local.get $0 + i32.const 65535 + i32.and i32.const 50 i32.lt_u if @@ -7598,14 +7602,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|8 end end local.get $1 @@ -7688,7 +7690,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -7719,7 +7721,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -7797,7 +7799,7 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 100 i32.lt_s @@ -7845,14 +7847,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -7869,7 +7869,7 @@ end i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i32.const 100 i32.lt_s @@ -7933,14 +7933,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -7967,7 +7965,7 @@ local.set $5 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $3 i32.load offset=12 @@ -7998,24 +7996,8 @@ i32.const 20 i32.sub call $~lib/map/Map#has + i32.eqz if - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -8023,7 +8005,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $2 + call $~lib/map/Map#set + local.get $5 + local.get $7 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 end end local.get $4 @@ -8052,7 +8049,7 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 i32.const 50 i32.lt_s @@ -8097,14 +8094,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -8121,7 +8116,7 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 i32.const 50 i32.lt_s @@ -8168,14 +8163,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -8269,7 +8262,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -8300,7 +8293,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -8347,7 +8340,7 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 100 i32.lt_u @@ -8395,14 +8388,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -8419,7 +8410,7 @@ end i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i32.const 100 i32.lt_u @@ -8483,14 +8474,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -8517,7 +8506,7 @@ local.set $5 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $3 i32.load offset=12 @@ -8548,24 +8537,8 @@ i32.const 20 i32.sub call $~lib/map/Map#has + i32.eqz if - local.get $4 - local.get $2 - local.get $2 - call $~lib/map/Map#set - local.get $5 - local.get $7 - i32.const 20 - i32.sub - local.tee $2 - local.get $2 - call $~lib/map/Map#set - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -8573,7 +8546,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $2 + call $~lib/map/Map#set + local.get $5 + local.get $7 + i32.const 20 + i32.sub + local.tee $2 + local.get $2 + call $~lib/map/Map#set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 end end local.get $4 @@ -8602,7 +8590,7 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 i32.const 50 i32.lt_u @@ -8647,14 +8635,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -8671,7 +8657,7 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 i32.const 50 i32.lt_u @@ -8718,14 +8704,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -8902,7 +8886,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -8920,15 +8904,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=12 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=12 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -8979,7 +8961,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -9023,7 +9005,7 @@ i32.const 16 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -9258,7 +9240,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -9289,7 +9271,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -9314,7 +9296,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -9345,7 +9327,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -9447,7 +9429,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -9465,15 +9447,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=16 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=16 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -9515,7 +9495,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -9559,7 +9539,7 @@ i32.const 24 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -9768,7 +9748,7 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 i64.const 100 i64.lt_s @@ -9818,14 +9798,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -9842,7 +9820,7 @@ end i64.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i64.const 100 i64.lt_s @@ -9909,14 +9887,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -9941,7 +9917,7 @@ local.set $5 call $~lib/map/Map#constructor local.set $6 - loop $loop|2 + loop $for-loop|2 local.get $2 local.get $4 i32.load offset=12 @@ -9973,24 +9949,8 @@ i32.sub i64.extend_i32_s call $~lib/map/Map#has + i32.eqz if - local.get $5 - local.get $0 - local.get $0 - call $~lib/map/Map#set - local.get $6 - local.get $3 - i32.const 20 - i32.sub - local.tee $3 - local.get $3 - call $~lib/map/Map#set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -9998,7 +9958,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $5 + local.get $0 + local.get $0 + call $~lib/map/Map#set + local.get $6 + local.get $3 + i32.const 20 + i32.sub + local.tee $3 + local.get $3 + call $~lib/map/Map#set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|2 end end local.get $5 @@ -10027,7 +10002,7 @@ end i64.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 i64.const 50 i64.lt_s @@ -10073,14 +10048,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -10097,7 +10070,7 @@ end i64.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 i64.const 50 i64.lt_s @@ -10145,14 +10118,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -10246,7 +10217,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -10277,7 +10248,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -10324,7 +10295,7 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 i64.const 100 i64.lt_u @@ -10374,14 +10345,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -10398,7 +10367,7 @@ end i64.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i64.const 100 i64.lt_u @@ -10465,14 +10434,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -10497,7 +10464,7 @@ local.set $5 call $~lib/map/Map#constructor local.set $6 - loop $loop|2 + loop $for-loop|2 local.get $2 local.get $4 i32.load offset=12 @@ -10529,24 +10496,8 @@ i32.sub i64.extend_i32_s call $~lib/map/Map#has + i32.eqz if - local.get $5 - local.get $0 - local.get $0 - call $~lib/map/Map#set - local.get $6 - local.get $3 - i32.const 20 - i32.sub - local.tee $3 - local.get $3 - call $~lib/map/Map#set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -10554,7 +10505,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $5 + local.get $0 + local.get $0 + call $~lib/map/Map#set + local.get $6 + local.get $3 + i32.const 20 + i32.sub + local.tee $3 + local.get $3 + call $~lib/map/Map#set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|2 end end local.get $5 @@ -10583,7 +10549,7 @@ end i64.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 i64.const 50 i64.lt_u @@ -10629,14 +10595,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -10653,7 +10617,7 @@ end i64.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 i64.const 50 i64.lt_u @@ -10701,14 +10665,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -10786,7 +10748,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -10804,15 +10766,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -10864,7 +10824,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -10909,7 +10869,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -11134,7 +11094,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -11165,7 +11125,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -11259,7 +11219,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -11304,7 +11264,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -11515,7 +11475,7 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 f32.const 100 f32.lt @@ -11565,14 +11525,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f32.const 1 - f32.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -11589,7 +11547,7 @@ end f32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 f32.const 100 f32.lt @@ -11656,14 +11614,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f32.const 1 - f32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -11688,7 +11644,7 @@ local.set $5 call $~lib/map/Map#constructor local.set $6 - loop $loop|2 + loop $for-loop|2 local.get $2 local.get $4 i32.load offset=12 @@ -11720,24 +11676,8 @@ i32.sub f32.convert_i32_s call $~lib/map/Map#has + i32.eqz if - local.get $5 - local.get $0 - local.get $0 - call $~lib/map/Map#set - local.get $6 - local.get $3 - i32.const 20 - i32.sub - local.tee $3 - local.get $3 - call $~lib/map/Map#set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -11745,7 +11685,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $5 + local.get $0 + local.get $0 + call $~lib/map/Map#set + local.get $6 + local.get $3 + i32.const 20 + i32.sub + local.tee $3 + local.get $3 + call $~lib/map/Map#set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|2 end end local.get $5 @@ -11774,7 +11729,7 @@ end f32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 f32.const 50 f32.lt @@ -11820,14 +11775,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f32.const 1 - f32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -11844,7 +11797,7 @@ end f32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 f32.const 50 f32.lt @@ -11892,14 +11845,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f32.const 1 - f32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -11977,7 +11928,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -11995,15 +11946,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=12 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=12 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -12055,7 +12004,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -12100,7 +12049,7 @@ i32.const 16 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -12325,7 +12274,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $2 i32.lt_s @@ -12356,7 +12305,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -12425,7 +12374,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -12443,15 +12392,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=16 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=16 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -12493,7 +12440,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -12538,7 +12485,7 @@ i32.const 24 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -12749,7 +12696,7 @@ (local $7 i32) call $~lib/map/Map#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 f64.const 100 f64.lt @@ -12799,14 +12746,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f64.const 1 - f64.add - local.set $0 - br $loop|0 end - unreachable + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -12823,7 +12768,7 @@ end f64.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 f64.const 100 f64.lt @@ -12890,14 +12835,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f64.const 1 - f64.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -12922,7 +12865,7 @@ local.set $5 call $~lib/map/Map#constructor local.set $6 - loop $loop|2 + loop $for-loop|2 local.get $2 local.get $4 i32.load offset=12 @@ -12954,24 +12897,8 @@ i32.sub f64.convert_i32_s call $~lib/map/Map#has + i32.eqz if - local.get $5 - local.get $0 - local.get $0 - call $~lib/map/Map#set - local.get $6 - local.get $3 - i32.const 20 - i32.sub - local.tee $3 - local.get $3 - call $~lib/map/Map#set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 32 @@ -12979,7 +12906,22 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $5 + local.get $0 + local.get $0 + call $~lib/map/Map#set + local.get $6 + local.get $3 + i32.const 20 + i32.sub + local.tee $3 + local.get $3 + call $~lib/map/Map#set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|2 end end local.get $5 @@ -13008,7 +12950,7 @@ end f64.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 f64.const 50 f64.lt @@ -13054,14 +12996,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f64.const 1 - f64.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -13078,7 +13018,7 @@ end f64.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 f64.const 50 f64.lt @@ -13126,14 +13066,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f64.const 1 - f64.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -13171,7 +13109,7 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $start (; 168 ;) + (func $~start (; 168 ;) call $std/map/testNumeric call $std/map/testNumeric call $std/map/testNumeric diff --git a/tests/compiler/std/map.untouched.wat b/tests/compiler/std/map.untouched.wat index 0e42b08349..97feb4b9f0 100644 --- a/tests/compiler/std/map.untouched.wat +++ b/tests/compiler/std/map.untouched.wat @@ -56,7 +56,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 608)) (global $~lib/heap/__heap_base i32 (i32.const 868)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -776,6 +776,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -829,71 +831,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1282,34 +1282,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1318,23 +1319,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1343,11 +1344,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1359,21 +1360,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1381,39 +1381,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1782,6 +1780,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -2000,13 +1999,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -2033,9 +2032,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -2092,39 +2090,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2132,13 +2130,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2179,9 +2177,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2338,13 +2335,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2419,9 +2416,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2460,13 +2456,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2541,9 +2537,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2568,13 +2563,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2649,9 +2644,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3121,6 +3115,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3167,13 +3162,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3184,30 +3179,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3224,37 +3218,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3265,15 +3257,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3290,17 +3282,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3313,16 +3304,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3334,9 +3324,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3642,6 +3631,7 @@ ) (func $~lib/map/Map#find (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -3653,11 +3643,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -3686,9 +3676,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -3723,6 +3712,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -3757,53 +3747,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load8_s i32.store8 + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load8_s - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -3815,26 +3805,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -3842,19 +3831,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -4405,6 +4394,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -4417,22 +4407,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -4440,12 +4430,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load8_s call $~lib/array/Array#__set end @@ -4453,9 +4443,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -4549,6 +4538,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -4561,22 +4551,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -4584,12 +4574,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=4 call $~lib/array/Array#__set end @@ -4597,9 +4587,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -4814,6 +4803,7 @@ ) (func $~lib/map/Map#find (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -4825,11 +4815,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -4858,9 +4848,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -4876,6 +4865,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -4910,53 +4900,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load8_s i32.store8 + local.get $11 local.get $10 - local.get $9 i32.load8_s offset=1 i32.store8 offset=1 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 i32.load8_s - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -4968,26 +4958,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -4995,19 +4984,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -5172,6 +5161,7 @@ ) (func $~lib/map/Map#find (; 69 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -5183,11 +5173,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -5212,9 +5202,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -5230,6 +5219,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -5264,53 +5254,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load i32.store + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $9 + local.get $10 i32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.1 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -5322,26 +5312,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -5349,19 +5338,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -5571,19 +5560,26 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 - local.get $0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $3 + local.get $3 + if + local.get $0 local.get $1 call $~lib/map/Map#has i32.eqz @@ -5642,9 +5638,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -5659,15 +5654,19 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -5746,9 +5745,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -5768,33 +5766,33 @@ local.set $1 local.get $0 call $~lib/map/Map#values - local.set $2 + local.set $4 i32.const 0 call $~lib/map/Map#constructor - local.set $3 + local.set $5 i32.const 0 call $~lib/map/Map#constructor - local.set $4 - block $break|2 - i32.const 0 - local.set $5 - loop $loop|2 - local.get $5 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + local.set $6 + i32.const 0 + local.set $7 + loop $for-loop|4 + local.get $7 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $8 + local.get $8 + if local.get $1 - local.get $5 + local.get $7 call $~lib/array/Array#__get - local.set $6 - local.get $2 - local.get $5 + local.set $9 + local.get $4 + local.get $7 call $~lib/array/Array#__get - local.set $7 + local.set $10 local.get $0 - local.get $6 + local.get $9 call $~lib/map/Map#has i32.eqz if @@ -5806,7 +5804,7 @@ unreachable end local.get $0 - local.get $7 + local.get $10 i32.const 20 i32.sub call $~lib/map/Map#has @@ -5819,27 +5817,26 @@ call $~lib/builtins/abort unreachable end - local.get $3 - local.get $6 - local.get $6 + local.get $5 + local.get $9 + local.get $9 call $~lib/map/Map#set - local.get $4 - local.get $7 + local.get $6 + local.get $10 i32.const 20 i32.sub - local.get $7 + local.get $10 i32.const 20 i32.sub call $~lib/map/Map#set - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|2 + local.set $7 + br $for-loop|4 end - unreachable end - local.get $3 + local.get $5 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -5852,7 +5849,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $6 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -5865,17 +5862,21 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $5 - loop $loop|3 - local.get $5 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 + i32.const 0 + local.set $7 + loop $for-loop|6 + local.get $7 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $10 + local.get $10 + if local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -5887,10 +5888,10 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#get i32.const 20 - local.get $5 + local.get $7 i32.const 24 i32.shl i32.const 24 @@ -5907,11 +5908,11 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#delete drop local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -5923,13 +5924,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|3 + local.set $7 + br $for-loop|6 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -5944,17 +5944,21 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $5 - loop $loop|4 - local.get $5 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|4 + i32.const 0 + local.set $7 + loop $for-loop|8 + local.get $7 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $9 + local.get $9 + if local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -5967,9 +5971,9 @@ unreachable end local.get $0 - local.get $5 + local.get $7 i32.const 10 - local.get $5 + local.get $7 i32.const 24 i32.shl i32.const 24 @@ -5977,7 +5981,7 @@ i32.add call $~lib/map/Map#set local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -5989,11 +5993,11 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#delete drop local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -6005,13 +6009,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|4 + local.set $7 + br $for-loop|8 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -6043,11 +6046,11 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $6 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -6126,6 +6129,7 @@ ) (func $~lib/map/Map#find (; 78 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -6137,11 +6141,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -6168,9 +6172,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -6203,6 +6206,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -6237,53 +6241,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load8_u i32.store8 + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load8_u - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -6295,26 +6299,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -6322,19 +6325,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -6573,6 +6576,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -6585,22 +6589,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -6608,12 +6612,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load8_u call $~lib/array/Array#__set end @@ -6621,9 +6625,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -6638,6 +6641,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -6650,22 +6654,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -6673,12 +6677,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=4 call $~lib/array/Array#__set end @@ -6686,9 +6690,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -6802,6 +6805,7 @@ ) (func $~lib/map/Map#find (; 95 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -6813,11 +6817,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -6844,9 +6848,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -6862,6 +6865,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -6896,53 +6900,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load8_u i32.store8 + local.get $11 local.get $10 - local.get $9 i32.load8_u offset=1 i32.store8 offset=1 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 i32.load8_u - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -6954,26 +6958,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -6981,19 +6984,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -7199,18 +7202,23 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 255 + i32.and + i32.const 100 + i32.lt_u + local.set $3 + local.get $3 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -7266,9 +7274,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -7283,15 +7290,17 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 + i32.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 255 + i32.and + i32.const 100 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -7364,9 +7373,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -7386,33 +7394,33 @@ local.set $1 local.get $0 call $~lib/map/Map#values - local.set $2 + local.set $4 i32.const 0 call $~lib/map/Map#constructor - local.set $3 + local.set $5 i32.const 0 call $~lib/map/Map#constructor - local.set $4 - block $break|2 - i32.const 0 - local.set $5 - loop $loop|2 - local.get $5 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + local.set $6 + i32.const 0 + local.set $7 + loop $for-loop|4 + local.get $7 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $8 + local.get $8 + if local.get $1 - local.get $5 + local.get $7 call $~lib/array/Array#__get - local.set $6 - local.get $2 - local.get $5 + local.set $9 + local.get $4 + local.get $7 call $~lib/array/Array#__get - local.set $7 + local.set $10 local.get $0 - local.get $6 + local.get $9 call $~lib/map/Map#has i32.eqz if @@ -7424,7 +7432,7 @@ unreachable end local.get $0 - local.get $7 + local.get $10 i32.const 20 i32.sub call $~lib/map/Map#has @@ -7437,27 +7445,26 @@ call $~lib/builtins/abort unreachable end - local.get $3 - local.get $6 - local.get $6 + local.get $5 + local.get $9 + local.get $9 call $~lib/map/Map#set - local.get $4 - local.get $7 + local.get $6 + local.get $10 i32.const 20 i32.sub - local.get $7 + local.get $10 i32.const 20 i32.sub call $~lib/map/Map#set - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|2 + local.set $7 + br $for-loop|4 end - unreachable end - local.get $3 + local.get $5 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -7470,7 +7477,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $6 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -7483,17 +7490,19 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $5 - loop $loop|3 - local.get $5 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 + i32.const 0 + local.set $7 + loop $for-loop|6 + local.get $7 + i32.const 255 + i32.and + i32.const 50 + i32.lt_u + local.set $10 + local.get $10 + if local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -7505,10 +7514,10 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#get i32.const 20 - local.get $5 + local.get $7 i32.const 255 i32.and i32.add @@ -7523,11 +7532,11 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#delete drop local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -7539,13 +7548,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|3 + local.set $7 + br $for-loop|6 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -7560,17 +7568,19 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $5 - loop $loop|4 - local.get $5 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|4 + i32.const 0 + local.set $7 + loop $for-loop|8 + local.get $7 + i32.const 255 + i32.and + i32.const 50 + i32.lt_u + local.set $9 + local.get $9 + if local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -7583,15 +7593,15 @@ unreachable end local.get $0 - local.get $5 + local.get $7 i32.const 10 - local.get $5 + local.get $7 i32.const 255 i32.and i32.add call $~lib/map/Map#set local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -7603,11 +7613,11 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#delete drop local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -7619,13 +7629,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|4 + local.set $7 + br $for-loop|8 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -7657,11 +7666,11 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $6 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -7762,6 +7771,7 @@ ) (func $~lib/map/Map#find (; 104 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -7773,11 +7783,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -7806,9 +7816,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -7843,6 +7852,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -7877,53 +7887,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load16_s i32.store16 + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load16_s - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -7935,26 +7945,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -7962,19 +7971,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -8217,6 +8226,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -8229,22 +8239,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -8252,12 +8262,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load16_s call $~lib/array/Array#__set end @@ -8265,9 +8275,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -8282,6 +8291,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -8294,22 +8304,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -8317,12 +8327,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=4 call $~lib/array/Array#__set end @@ -8330,9 +8340,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -8446,6 +8455,7 @@ ) (func $~lib/map/Map#find (; 121 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -8457,11 +8467,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -8490,9 +8500,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -8508,6 +8517,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -8542,53 +8552,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load16_s i32.store16 + local.get $11 local.get $10 - local.get $9 i32.load16_s offset=2 i32.store16 offset=2 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 i32.load16_s - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -8600,26 +8610,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -8627,19 +8636,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -8849,18 +8858,25 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $3 + local.get $3 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -8920,9 +8936,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -8937,15 +8952,19 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -9024,9 +9043,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -9046,33 +9064,33 @@ local.set $1 local.get $0 call $~lib/map/Map#values - local.set $2 + local.set $4 i32.const 0 call $~lib/map/Map#constructor - local.set $3 + local.set $5 i32.const 0 call $~lib/map/Map#constructor - local.set $4 - block $break|2 - i32.const 0 - local.set $5 - loop $loop|2 - local.get $5 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + local.set $6 + i32.const 0 + local.set $7 + loop $for-loop|4 + local.get $7 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $8 + local.get $8 + if local.get $1 - local.get $5 + local.get $7 call $~lib/array/Array#__get - local.set $6 - local.get $2 - local.get $5 + local.set $9 + local.get $4 + local.get $7 call $~lib/array/Array#__get - local.set $7 + local.set $10 local.get $0 - local.get $6 + local.get $9 call $~lib/map/Map#has i32.eqz if @@ -9084,7 +9102,7 @@ unreachable end local.get $0 - local.get $7 + local.get $10 i32.const 20 i32.sub call $~lib/map/Map#has @@ -9097,27 +9115,26 @@ call $~lib/builtins/abort unreachable end - local.get $3 - local.get $6 - local.get $6 + local.get $5 + local.get $9 + local.get $9 call $~lib/map/Map#set - local.get $4 - local.get $7 + local.get $6 + local.get $10 i32.const 20 i32.sub - local.get $7 + local.get $10 i32.const 20 i32.sub call $~lib/map/Map#set - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|2 + local.set $7 + br $for-loop|4 end - unreachable end - local.get $3 + local.get $5 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -9130,7 +9147,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $6 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -9143,17 +9160,21 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $5 - loop $loop|3 - local.get $5 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 + i32.const 0 + local.set $7 + loop $for-loop|6 + local.get $7 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $10 + local.get $10 + if local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -9165,10 +9186,10 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#get i32.const 20 - local.get $5 + local.get $7 i32.const 16 i32.shl i32.const 16 @@ -9185,11 +9206,11 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#delete drop local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -9201,13 +9222,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|3 + local.set $7 + br $for-loop|6 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -9222,17 +9242,21 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $5 - loop $loop|4 - local.get $5 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|4 + i32.const 0 + local.set $7 + loop $for-loop|8 + local.get $7 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $9 + local.get $9 + if local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -9245,9 +9269,9 @@ unreachable end local.get $0 - local.get $5 + local.get $7 i32.const 10 - local.get $5 + local.get $7 i32.const 16 i32.shl i32.const 16 @@ -9255,7 +9279,7 @@ i32.add call $~lib/map/Map#set local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -9267,11 +9291,11 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#delete drop local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -9283,13 +9307,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|4 + local.set $7 + br $for-loop|8 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -9321,11 +9344,11 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $6 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -9404,6 +9427,7 @@ ) (func $~lib/map/Map#find (; 129 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -9415,11 +9439,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -9446,9 +9470,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -9481,6 +9504,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -9515,53 +9539,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load16_u i32.store16 + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load16_u - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -9573,26 +9597,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -9600,19 +9623,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -9851,6 +9874,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -9863,22 +9887,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -9886,12 +9910,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load16_u call $~lib/array/Array#__set end @@ -9899,9 +9923,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -9916,6 +9939,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -9928,22 +9952,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -9951,12 +9975,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=4 call $~lib/array/Array#__set end @@ -9964,9 +9988,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -10080,6 +10103,7 @@ ) (func $~lib/map/Map#find (; 146 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -10091,11 +10115,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -10122,9 +10146,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -10140,6 +10163,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -10174,53 +10198,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load16_u i32.store16 + local.get $11 local.get $10 - local.get $9 i32.load16_u offset=2 i32.store16 offset=2 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 i32.load16_u - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -10232,26 +10256,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -10259,19 +10282,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -10477,18 +10500,23 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 65535 + i32.and + i32.const 100 + i32.lt_u + local.set $3 + local.get $3 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -10544,9 +10572,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -10561,15 +10588,17 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 + i32.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 65535 + i32.and + i32.const 100 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -10642,9 +10671,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -10664,33 +10692,33 @@ local.set $1 local.get $0 call $~lib/map/Map#values - local.set $2 + local.set $4 i32.const 0 call $~lib/map/Map#constructor - local.set $3 + local.set $5 i32.const 0 call $~lib/map/Map#constructor - local.set $4 - block $break|2 - i32.const 0 - local.set $5 - loop $loop|2 - local.get $5 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + local.set $6 + i32.const 0 + local.set $7 + loop $for-loop|4 + local.get $7 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $8 + local.get $8 + if local.get $1 - local.get $5 + local.get $7 call $~lib/array/Array#__get - local.set $6 - local.get $2 - local.get $5 + local.set $9 + local.get $4 + local.get $7 call $~lib/array/Array#__get - local.set $7 + local.set $10 local.get $0 - local.get $6 + local.get $9 call $~lib/map/Map#has i32.eqz if @@ -10702,7 +10730,7 @@ unreachable end local.get $0 - local.get $7 + local.get $10 i32.const 20 i32.sub call $~lib/map/Map#has @@ -10715,27 +10743,26 @@ call $~lib/builtins/abort unreachable end - local.get $3 - local.get $6 - local.get $6 + local.get $5 + local.get $9 + local.get $9 call $~lib/map/Map#set - local.get $4 - local.get $7 + local.get $6 + local.get $10 i32.const 20 i32.sub - local.get $7 + local.get $10 i32.const 20 i32.sub call $~lib/map/Map#set - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|2 + local.set $7 + br $for-loop|4 end - unreachable end - local.get $3 + local.get $5 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -10748,7 +10775,7 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $6 call $~lib/map/Map#get:size i32.const 100 i32.eq @@ -10761,17 +10788,19 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $5 - loop $loop|3 - local.get $5 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 + i32.const 0 + local.set $7 + loop $for-loop|6 + local.get $7 + i32.const 65535 + i32.and + i32.const 50 + i32.lt_u + local.set $10 + local.get $10 + if local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -10783,10 +10812,10 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#get i32.const 20 - local.get $5 + local.get $7 i32.const 65535 i32.and i32.add @@ -10801,11 +10830,11 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#delete drop local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -10817,13 +10846,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|3 + local.set $7 + br $for-loop|6 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -10838,17 +10866,19 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $5 - loop $loop|4 - local.get $5 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|4 + i32.const 0 + local.set $7 + loop $for-loop|8 + local.get $7 + i32.const 65535 + i32.and + i32.const 50 + i32.lt_u + local.set $9 + local.get $9 + if local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -10861,15 +10891,15 @@ unreachable end local.get $0 - local.get $5 + local.get $7 i32.const 10 - local.get $5 + local.get $7 i32.const 65535 i32.and i32.add call $~lib/map/Map#set local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -10881,11 +10911,11 @@ unreachable end local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#delete drop local.get $0 - local.get $5 + local.get $7 call $~lib/map/Map#has i32.eqz i32.eqz @@ -10897,13 +10927,12 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $7 i32.const 1 i32.add - local.set $5 - br $loop|4 + local.set $7 + br $for-loop|8 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -10935,11 +10964,11 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release - local.get $3 + local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $6 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -10994,6 +11023,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -11006,22 +11036,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -11029,12 +11059,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load call $~lib/array/Array#__set end @@ -11042,9 +11072,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -11059,6 +11088,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -11071,22 +11101,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -11094,12 +11124,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=4 call $~lib/array/Array#__set end @@ -11107,9 +11137,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -11201,18 +11230,19 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 100 + i32.lt_s + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -11264,9 +11294,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -11281,15 +11310,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -11356,9 +11385,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -11385,26 +11413,26 @@ i32.const 0 call $~lib/map/Map#constructor local.set $4 - block $break|2 - i32.const 0 - local.set $5 - loop $loop|2 - local.get $5 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $5 + loop $for-loop|2 + local.get $5 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 call $~lib/array/Array#__get - local.set $6 + local.set $7 local.get $2 local.get $5 call $~lib/array/Array#__get - local.set $7 + local.set $8 local.get $0 - local.get $6 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -11416,7 +11444,7 @@ unreachable end local.get $0 - local.get $7 + local.get $8 i32.const 20 i32.sub call $~lib/map/Map#has @@ -11430,14 +11458,14 @@ unreachable end local.get $3 - local.get $6 - local.get $6 + local.get $7 + local.get $7 call $~lib/map/Map#set local.get $4 - local.get $7 + local.get $8 i32.const 20 i32.sub - local.get $7 + local.get $8 i32.const 20 i32.sub call $~lib/map/Map#set @@ -11445,9 +11473,8 @@ i32.const 1 i32.add local.set $5 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $3 call $~lib/map/Map#get:size @@ -11475,15 +11502,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $5 - loop $loop|3 - local.get $5 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 + i32.const 0 + local.set $5 + loop $for-loop|3 + local.get $5 + i32.const 50 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 call $~lib/map/Map#has @@ -11533,9 +11560,8 @@ i32.const 1 i32.add local.set $5 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -11550,15 +11576,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $5 - loop $loop|4 - local.get $5 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|4 + i32.const 0 + local.set $5 + loop $for-loop|4 + local.get $5 + i32.const 50 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 call $~lib/map/Map#has @@ -11611,9 +11637,8 @@ i32.const 1 i32.add local.set $5 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -11728,6 +11753,7 @@ ) (func $~lib/map/Map#find (; 161 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -11739,11 +11765,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -11768,9 +11794,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -11801,6 +11826,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -11835,53 +11861,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load i32.store + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -11893,26 +11919,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -11920,19 +11945,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -12167,6 +12192,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -12179,22 +12205,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -12202,12 +12228,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load call $~lib/array/Array#__set end @@ -12215,9 +12241,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -12232,6 +12257,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -12244,22 +12270,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -12267,12 +12293,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=4 call $~lib/array/Array#__set end @@ -12280,9 +12306,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -12396,6 +12421,7 @@ ) (func $~lib/map/Map#find (; 178 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -12407,11 +12433,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -12436,9 +12462,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -12454,6 +12479,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -12485,56 +12511,56 @@ i32.const 12 i32.mul i32.add - local.set $7 - local.get $5 - local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + local.set $7 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load i32.store + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 i32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -12546,26 +12572,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -12573,19 +12598,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -12787,18 +12812,19 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 100 + i32.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -12850,9 +12876,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -12867,15 +12892,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -12942,9 +12967,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -12971,26 +12995,26 @@ i32.const 0 call $~lib/map/Map#constructor local.set $4 - block $break|2 - i32.const 0 - local.set $5 - loop $loop|2 - local.get $5 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $5 + loop $for-loop|2 + local.get $5 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 call $~lib/array/Array#__get - local.set $6 + local.set $7 local.get $2 local.get $5 call $~lib/array/Array#__get - local.set $7 + local.set $8 local.get $0 - local.get $6 + local.get $7 call $~lib/map/Map#has i32.eqz if @@ -13002,7 +13026,7 @@ unreachable end local.get $0 - local.get $7 + local.get $8 i32.const 20 i32.sub call $~lib/map/Map#has @@ -13016,14 +13040,14 @@ unreachable end local.get $3 - local.get $6 - local.get $6 + local.get $7 + local.get $7 call $~lib/map/Map#set local.get $4 - local.get $7 + local.get $8 i32.const 20 i32.sub - local.get $7 + local.get $8 i32.const 20 i32.sub call $~lib/map/Map#set @@ -13031,9 +13055,8 @@ i32.const 1 i32.add local.set $5 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $3 call $~lib/map/Map#get:size @@ -13061,15 +13084,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $5 - loop $loop|3 - local.get $5 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 + i32.const 0 + local.set $5 + loop $for-loop|3 + local.get $5 + i32.const 50 + i32.lt_u + local.set $6 + local.get $6 + if local.get $0 local.get $5 call $~lib/map/Map#has @@ -13119,9 +13142,8 @@ i32.const 1 i32.add local.set $5 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -13136,15 +13158,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $5 - loop $loop|4 - local.get $5 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|4 + i32.const 0 + local.set $5 + loop $for-loop|4 + local.get $5 + i32.const 50 + i32.lt_u + local.set $6 + local.get $6 + if local.get $0 local.get $5 call $~lib/map/Map#has @@ -13197,9 +13219,8 @@ i32.const 1 i32.add local.set $5 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -13402,6 +13423,7 @@ ) (func $~lib/map/Map#find (; 187 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -13413,11 +13435,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=12 i32.const 1 @@ -13442,9 +13464,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -13473,9 +13494,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i64) - (local $12 i32) + (local $11 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -13510,53 +13532,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=12 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i64.load i64.store + local.get $11 local.get $10 - local.get $9 i32.load offset=8 i32.store offset=8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=12 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -13568,26 +13590,25 @@ i32.const 16 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -13595,19 +13616,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -13843,6 +13864,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -13855,22 +13877,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=12 i32.const 1 i32.and @@ -13878,12 +13900,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i64.load call $~lib/array/Array#__set end @@ -13891,9 +13913,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -13908,6 +13929,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -13920,22 +13942,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=12 i32.const 1 i32.and @@ -13943,12 +13965,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=8 call $~lib/array/Array#__set end @@ -13956,9 +13978,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -14072,6 +14093,7 @@ ) (func $~lib/map/Map#find (; 204 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -14083,11 +14105,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=16 i32.const 1 @@ -14112,9 +14134,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -14128,9 +14149,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i64) - (local $12 i32) + (local $11 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -14163,55 +14185,55 @@ i32.mul i32.add local.set $7 - local.get $5 - local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + local.get $5 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=16 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i64.load i64.store + local.get $11 local.get $10 - local.get $9 i64.load offset=8 i64.store offset=8 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 i64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=16 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -14223,26 +14245,25 @@ i32.const 24 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -14250,19 +14271,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -14466,18 +14487,19 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - i64.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i64.const 100 - i64.lt_s - i32.eqz - br_if $break|0 + i64.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i64.const 100 + i64.lt_s + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -14531,9 +14553,8 @@ i64.const 1 i64.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -14548,15 +14569,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i64.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i64.const 100 - i64.lt_s - i32.eqz - br_if $break|1 + i64.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i64.const 100 + i64.lt_s + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -14626,9 +14647,8 @@ i64.const 1 i64.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -14655,16 +14675,16 @@ i32.const 0 call $~lib/map/Map#constructor local.set $5 - block $break|2 - i32.const 0 - local.set $6 - loop $loop|2 - local.get $6 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $6 + loop $for-loop|2 + local.get $6 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $7 + local.get $7 + if local.get $2 local.get $6 call $~lib/array/Array#__get @@ -14672,7 +14692,7 @@ local.get $3 local.get $6 call $~lib/array/Array#__get - local.set $7 + local.set $8 local.get $0 local.get $1 call $~lib/map/Map#has @@ -14686,7 +14706,7 @@ unreachable end local.get $0 - local.get $7 + local.get $8 i32.const 20 i32.sub i64.extend_i32_s @@ -14705,10 +14725,10 @@ local.get $1 call $~lib/map/Map#set local.get $5 - local.get $7 + local.get $8 i32.const 20 i32.sub - local.get $7 + local.get $8 i32.const 20 i32.sub call $~lib/map/Map#set @@ -14716,9 +14736,8 @@ i32.const 1 i32.add local.set $6 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/map/Map#get:size @@ -14746,15 +14765,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i64.const 0 - local.set $1 - loop $loop|3 - local.get $1 - i64.const 50 - i64.lt_s - i32.eqz - br_if $break|3 + i64.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i64.const 50 + i64.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -14805,9 +14824,8 @@ i64.const 1 i64.add local.set $1 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -14822,15 +14840,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i64.const 0 - local.set $1 - loop $loop|4 - local.get $1 - i64.const 50 - i64.lt_s - i32.eqz - br_if $break|4 + i64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + i64.const 50 + i64.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -14884,9 +14902,8 @@ i64.const 1 i64.add local.set $1 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -15001,6 +15018,7 @@ ) (func $~lib/map/Map#find (; 212 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -15012,11 +15030,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=12 i32.const 1 @@ -15041,9 +15059,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -15072,9 +15089,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i64) - (local $12 i32) + (local $11 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -15109,53 +15127,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=12 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i64.load i64.store + local.get $11 local.get $10 - local.get $9 i32.load offset=8 i32.store offset=8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=12 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -15167,26 +15185,25 @@ i32.const 16 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -15194,19 +15211,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -15442,6 +15459,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -15454,22 +15472,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=12 i32.const 1 i32.and @@ -15477,12 +15495,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i64.load call $~lib/array/Array#__set end @@ -15490,9 +15508,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -15507,6 +15524,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -15519,22 +15537,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=12 i32.const 1 i32.and @@ -15542,12 +15560,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=8 call $~lib/array/Array#__set end @@ -15555,9 +15573,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -15671,6 +15688,7 @@ ) (func $~lib/map/Map#find (; 229 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -15682,11 +15700,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=16 i32.const 1 @@ -15711,9 +15729,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -15727,9 +15744,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i64) - (local $12 i32) + (local $11 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -15764,53 +15782,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=16 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i64.load i64.store + local.get $11 local.get $10 - local.get $9 i64.load offset=8 i64.store offset=8 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 i64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=16 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -15822,26 +15840,25 @@ i32.const 24 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -15849,19 +15866,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -16065,18 +16082,19 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - i64.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i64.const 100 - i64.lt_u - i32.eqz - br_if $break|0 + i64.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i64.const 100 + i64.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -16130,9 +16148,8 @@ i64.const 1 i64.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -16147,15 +16164,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i64.const 0 - local.set $1 - loop $loop|1 - local.get $1 - i64.const 100 - i64.lt_u - i32.eqz - br_if $break|1 + i64.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i64.const 100 + i64.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -16225,9 +16242,8 @@ i64.const 1 i64.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -16254,16 +16270,16 @@ i32.const 0 call $~lib/map/Map#constructor local.set $5 - block $break|2 - i32.const 0 - local.set $6 - loop $loop|2 - local.get $6 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $6 + loop $for-loop|2 + local.get $6 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $7 + local.get $7 + if local.get $2 local.get $6 call $~lib/array/Array#__get @@ -16271,7 +16287,7 @@ local.get $3 local.get $6 call $~lib/array/Array#__get - local.set $7 + local.set $8 local.get $0 local.get $1 call $~lib/map/Map#has @@ -16285,7 +16301,7 @@ unreachable end local.get $0 - local.get $7 + local.get $8 i32.const 20 i32.sub i64.extend_i32_s @@ -16304,10 +16320,10 @@ local.get $1 call $~lib/map/Map#set local.get $5 - local.get $7 + local.get $8 i32.const 20 i32.sub - local.get $7 + local.get $8 i32.const 20 i32.sub call $~lib/map/Map#set @@ -16315,9 +16331,8 @@ i32.const 1 i32.add local.set $6 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/map/Map#get:size @@ -16345,15 +16360,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i64.const 0 - local.set $1 - loop $loop|3 - local.get $1 - i64.const 50 - i64.lt_u - i32.eqz - br_if $break|3 + i64.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i64.const 50 + i64.lt_u + local.set $6 + local.get $6 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -16404,9 +16419,8 @@ i64.const 1 i64.add local.set $1 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -16421,15 +16435,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i64.const 0 - local.set $1 - loop $loop|4 - local.get $1 - i64.const 50 - i64.lt_u - i32.eqz - br_if $break|4 + i64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + i64.const 50 + i64.lt_u + local.set $6 + local.get $6 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -16483,9 +16497,8 @@ i64.const 1 i64.add local.set $1 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -16600,6 +16613,7 @@ ) (func $~lib/map/Map#find (; 237 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -16611,11 +16625,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -16640,9 +16654,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -16672,9 +16685,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 f32) - (local $12 i32) + (local $11 i32) + (local $12 f32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -16709,54 +16723,54 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 f32.load f32.store + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 f32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 i32.reinterpret_f32 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -16768,26 +16782,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -16795,19 +16808,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -17045,6 +17058,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -17057,22 +17071,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -17080,12 +17094,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 f32.load call $~lib/array/Array#__set end @@ -17093,9 +17107,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -17110,6 +17123,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -17122,22 +17136,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 12 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -17145,12 +17159,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=4 call $~lib/array/Array#__set end @@ -17158,9 +17172,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -17274,6 +17287,7 @@ ) (func $~lib/map/Map#find (; 254 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -17285,11 +17299,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -17314,9 +17328,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -17330,9 +17343,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 f32) - (local $12 i32) + (local $11 i32) + (local $12 f32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -17367,54 +17381,54 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 f32.load f32.store + local.get $11 local.get $10 - local.get $9 f32.load offset=4 f32.store offset=4 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 f32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 i32.reinterpret_f32 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -17426,26 +17440,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -17453,19 +17466,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -17671,18 +17684,19 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - f32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - f32.const 100 - f32.lt - i32.eqz - br_if $break|0 + f32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + f32.const 100 + f32.lt + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -17736,9 +17750,8 @@ f32.const 1 f32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -17753,15 +17766,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - f32.const 0 - local.set $1 - loop $loop|1 - local.get $1 - f32.const 100 - f32.lt - i32.eqz - br_if $break|1 + f32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + f32.const 100 + f32.lt + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -17831,9 +17844,8 @@ f32.const 1 f32.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -17860,16 +17872,16 @@ i32.const 0 call $~lib/map/Map#constructor local.set $5 - block $break|2 - i32.const 0 - local.set $6 - loop $loop|2 - local.get $6 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $6 + loop $for-loop|2 + local.get $6 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $7 + local.get $7 + if local.get $2 local.get $6 call $~lib/array/Array#__get @@ -17877,7 +17889,7 @@ local.get $3 local.get $6 call $~lib/array/Array#__get - local.set $7 + local.set $8 local.get $0 local.get $1 call $~lib/map/Map#has @@ -17891,7 +17903,7 @@ unreachable end local.get $0 - local.get $7 + local.get $8 i32.const 20 i32.sub f32.convert_i32_s @@ -17910,10 +17922,10 @@ local.get $1 call $~lib/map/Map#set local.get $5 - local.get $7 + local.get $8 i32.const 20 i32.sub - local.get $7 + local.get $8 i32.const 20 i32.sub call $~lib/map/Map#set @@ -17921,9 +17933,8 @@ i32.const 1 i32.add local.set $6 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/map/Map#get:size @@ -17951,15 +17962,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - f32.const 0 - local.set $1 - loop $loop|3 - local.get $1 - f32.const 50 - f32.lt - i32.eqz - br_if $break|3 + f32.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + f32.const 50 + f32.lt + local.set $6 + local.get $6 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -18010,9 +18021,8 @@ f32.const 1 f32.add local.set $1 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -18027,15 +18037,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - f32.const 0 - local.set $1 - loop $loop|4 - local.get $1 - f32.const 50 - f32.lt - i32.eqz - br_if $break|4 + f32.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + f32.const 50 + f32.lt + local.set $6 + local.get $6 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -18089,9 +18099,8 @@ f32.const 1 f32.add local.set $1 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -18206,6 +18215,7 @@ ) (func $~lib/map/Map#find (; 262 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -18217,11 +18227,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=12 i32.const 1 @@ -18246,9 +18256,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -18278,9 +18287,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 f64) - (local $12 i32) + (local $11 i32) + (local $12 f64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -18315,54 +18325,54 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=12 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 f64.load f64.store + local.get $11 local.get $10 - local.get $9 i32.load offset=8 i32.store offset=8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 f64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 i64.reinterpret_f64 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=12 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -18374,26 +18384,25 @@ i32.const 16 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -18401,19 +18410,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -18651,6 +18660,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -18663,22 +18673,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=12 i32.const 1 i32.and @@ -18686,12 +18696,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 f64.load call $~lib/array/Array#__set end @@ -18699,9 +18709,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -18716,6 +18725,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -18728,22 +18738,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=12 i32.const 1 i32.and @@ -18751,12 +18761,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load offset=8 call $~lib/array/Array#__set end @@ -18764,9 +18774,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.get $4 @@ -18880,6 +18889,7 @@ ) (func $~lib/map/Map#find (; 279 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -18891,11 +18901,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=16 i32.const 1 @@ -18920,9 +18930,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -18936,9 +18945,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 f64) - (local $12 i32) + (local $11 i32) + (local $12 f64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -18973,54 +18983,54 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=16 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 f64.load f64.store + local.get $11 local.get $10 - local.get $9 f64.load offset=8 f64.store offset=8 block $~lib/util/hash/HASH|inlined.5 (result i32) - local.get $9 + local.get $10 f64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 i64.reinterpret_f64 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.5 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=16 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -19032,26 +19042,25 @@ i32.const 24 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -19059,19 +19068,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -19277,18 +19286,19 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/map/Map#constructor local.set $0 - block $break|0 - f64.const 0 - local.set $1 - loop $loop|0 - local.get $1 - f64.const 100 - f64.lt - i32.eqz - br_if $break|0 + f64.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + f64.const 100 + f64.lt + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -19342,9 +19352,8 @@ f64.const 1 f64.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -19359,15 +19368,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - f64.const 0 - local.set $1 - loop $loop|1 - local.get $1 - f64.const 100 - f64.lt - i32.eqz - br_if $break|1 + f64.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + f64.const 100 + f64.lt + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -19437,9 +19446,8 @@ f64.const 1 f64.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -19466,16 +19474,16 @@ i32.const 0 call $~lib/map/Map#constructor local.set $5 - block $break|2 - i32.const 0 - local.set $6 - loop $loop|2 - local.get $6 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $6 + loop $for-loop|2 + local.get $6 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $7 + local.get $7 + if local.get $2 local.get $6 call $~lib/array/Array#__get @@ -19483,7 +19491,7 @@ local.get $3 local.get $6 call $~lib/array/Array#__get - local.set $7 + local.set $8 local.get $0 local.get $1 call $~lib/map/Map#has @@ -19497,7 +19505,7 @@ unreachable end local.get $0 - local.get $7 + local.get $8 i32.const 20 i32.sub f64.convert_i32_s @@ -19516,10 +19524,10 @@ local.get $1 call $~lib/map/Map#set local.get $5 - local.get $7 + local.get $8 i32.const 20 i32.sub - local.get $7 + local.get $8 i32.const 20 i32.sub call $~lib/map/Map#set @@ -19527,9 +19535,8 @@ i32.const 1 i32.add local.set $6 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/map/Map#get:size @@ -19557,15 +19564,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - f64.const 0 - local.set $1 - loop $loop|3 - local.get $1 - f64.const 50 - f64.lt - i32.eqz - br_if $break|3 + f64.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + f64.const 50 + f64.lt + local.set $6 + local.get $6 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -19616,9 +19623,8 @@ f64.const 1 f64.add local.set $1 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -19633,15 +19639,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - f64.const 0 - local.set $1 - loop $loop|4 - local.get $1 - f64.const 50 - f64.lt - i32.eqz - br_if $break|4 + f64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + f64.const 50 + f64.lt + local.set $6 + local.get $6 + if local.get $0 local.get $1 call $~lib/map/Map#has @@ -19695,9 +19701,8 @@ f64.const 1 f64.add local.set $1 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/map/Map#get:size @@ -19750,7 +19755,7 @@ call $std/map/testNumeric call $std/map/testNumeric ) - (func $start (; 286 ;) + (func $~start (; 286 ;) call $start:std/map ) (func $~lib/rt/pure/__visit (; 287 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 3254aab283..ea23f60dc0 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -99,7 +99,7 @@ (global $~lib/math/NativeMath.sincos_sin (mut f64) (f64.const 0)) (global $~lib/math/NativeMath.sincos_cos (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/math/NativeMath.scalbn (; 32 ;) (param $0 f64) (param $1 i32) (result f64) local.get $1 i32.const 1023 @@ -6838,7 +6838,7 @@ i64.or end local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $4 local.get $5 i64.gt_s @@ -6864,7 +6864,7 @@ i64.const 1 i64.sub local.set $4 - br $continue|0 + br $while-continue|0 end end local.get $2 @@ -7052,7 +7052,7 @@ i32.shl end local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $4 local.get $5 i32.gt_s @@ -7078,7 +7078,7 @@ i32.const 1 i32.sub local.set $4 - br $continue|0 + br $while-continue|0 end end local.get $2 @@ -8812,7 +8812,7 @@ i64.or end local.set $4 - block $break|0 + block $do-break|0 local.get $3 local.get $5 i64.lt_s @@ -8822,11 +8822,11 @@ i64.const 1 i64.add i64.eq - br_if $break|0 + br_if $do-break|0 local.get $0 return end - loop $continue|1 + loop $while-continue|1 local.get $3 local.get $5 i64.gt_s @@ -8856,7 +8856,7 @@ i64.const 1 i64.sub local.set $3 - br $continue|1 + br $while-continue|1 end end local.get $2 @@ -9063,7 +9063,7 @@ local.set $6 i32.const 0 local.set $4 - block $break|0 + block $do-break|0 local.get $3 local.get $5 i32.lt_s @@ -9073,11 +9073,11 @@ i32.const 1 i32.add i32.eq - br_if $break|0 + br_if $do-break|0 local.get $0 return end - loop $continue|1 + loop $while-continue|1 local.get $3 local.get $5 i32.gt_s @@ -9107,7 +9107,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|1 + br $while-continue|1 end end local.get $2 @@ -11330,7 +11330,7 @@ (local $2 i64) i64.const 1 local.set $2 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 0 i32.gt_s @@ -11352,7 +11352,7 @@ local.get $0 i64.mul local.set $0 - br $continue|0 + br $while-continue|0 end end local.get $2 @@ -11371,7 +11371,7 @@ local.set $1 f32.const 1 local.set $2 - loop $continue|0 + loop $while-continue|0 local.get $1 if local.get $2 @@ -11391,7 +11391,7 @@ local.get $0 f32.mul local.set $0 - br $continue|0 + br $while-continue|0 end end local.get $3 @@ -11417,7 +11417,7 @@ local.set $1 f64.const 1 local.set $2 - loop $continue|0 + loop $while-continue|0 local.get $1 if local.get $2 @@ -11437,7 +11437,7 @@ local.get $0 f64.mul local.set $0 - br $continue|0 + br $while-continue|0 end end local.get $3 @@ -36290,7 +36290,7 @@ call $~lib/bindings/Math/random i64.reinterpret_f64 call $~lib/math/NativeMath.seedRandom - loop $loop|0 + loop $for-loop|0 local.get $2 f64.convert_i32_s f64.const 1e6 @@ -36307,13 +36307,8 @@ else i32.const 0 end + i32.eqz if - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 - else i32.const 0 i32.const 32 i32.const 2806 @@ -36321,7 +36316,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end call $~lib/bindings/Math/random @@ -36329,7 +36328,7 @@ call $~lib/math/NativeMath.seedRandom i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 f64.convert_i32_s f64.const 1e6 @@ -36346,13 +36345,8 @@ else i32.const 0 end + i32.eqz if - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|1 - else i32.const 0 i32.const 32 i32.const 2814 @@ -36360,7 +36354,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end f64.const -8.06684839057968 @@ -46653,7 +46651,7 @@ unreachable end ) - (func $start (; 176 ;) + (func $~start (; 176 ;) call $start:std/math ) ) diff --git a/tests/compiler/std/math.untouched.wat b/tests/compiler/std/math.untouched.wat index a804d96dab..b5957c3e41 100644 --- a/tests/compiler/std/math.untouched.wat +++ b/tests/compiler/std/math.untouched.wat @@ -154,7 +154,7 @@ (global $~lib/builtins/f64.EPSILON f64 (f64.const 2.220446049250313e-16)) (global $~lib/builtins/f32.MIN_VALUE f32 (f32.const 1.401298464324817e-45)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $std/math/eulp (; 32 ;) (param $0 f64) (result i32) (local $1 i64) (local $2 i32) @@ -9097,7 +9097,8 @@ (local $7 i64) (local $8 f64) (local $9 i64) - (local $10 i64) + (local $10 i32) + (local $11 i64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -9239,13 +9240,13 @@ i64.or local.set $3 end - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i64.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i64.gt_s + local.set $10 + local.get $10 + if local.get $2 local.get $3 i64.ge_u @@ -9272,9 +9273,8 @@ i64.const 1 i64.sub local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 local.get $3 @@ -9298,13 +9298,13 @@ i64.const 11 i64.shl i64.clz - local.set $10 + local.set $11 local.get $4 - local.get $10 + local.get $11 i64.sub local.set $4 local.get $2 - local.get $10 + local.get $11 i64.shl local.set $2 local.get $4 @@ -9378,6 +9378,7 @@ (local $8 f32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 i32.reinterpret_f32 local.set $2 @@ -9515,13 +9516,13 @@ i32.or local.set $3 end - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i32.gt_s + local.set $10 + local.get $10 + if local.get $2 local.get $3 i32.ge_u @@ -9548,9 +9549,8 @@ i32.const 1 i32.sub local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 local.get $3 @@ -9574,13 +9574,13 @@ i32.const 8 i32.shl i32.clz - local.set $10 + local.set $11 local.get $4 - local.get $10 + local.get $11 i32.sub local.set $4 local.get $2 - local.get $10 + local.get $11 i32.shl local.set $2 local.get $4 @@ -11450,8 +11450,9 @@ (local $7 f64) (local $8 i64) (local $9 i32) - (local $10 i64) - (local $11 f64) + (local $10 i32) + (local $11 i64) + (local $12 f64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -11585,93 +11586,95 @@ end i32.const 0 local.set $9 - block $break|0 - local.get $4 - local.get $5 - i64.lt_s - if + block $do-break|0 + loop $do-continue|0 local.get $4 - i64.const 1 - i64.add local.get $5 - i64.eq + i64.lt_s if - br $break|0 + local.get $4 + i64.const 1 + i64.add + local.get $5 + i64.eq + if + br $do-break|0 + end + local.get $0 + return end - local.get $0 - return - end - block $break|1 - loop $continue|1 + loop $while-continue|1 local.get $4 local.get $5 i64.gt_s - i32.eqz - br_if $break|1 - local.get $8 - local.get $3 - i64.ge_u + local.set $10 + local.get $10 if local.get $8 local.get $3 - i64.sub + i64.ge_u + if + local.get $8 + local.get $3 + i64.sub + local.set $8 + local.get $9 + i32.const 1 + i32.add + local.set $9 + end + local.get $8 + i64.const 1 + i64.shl local.set $8 local.get $9 i32.const 1 - i32.add + i32.shl local.set $9 + local.get $4 + i64.const 1 + i64.sub + local.set $4 + br $while-continue|1 end + end + local.get $8 + local.get $3 + i64.ge_u + if local.get $8 - i64.const 1 - i64.shl + local.get $3 + i64.sub local.set $8 local.get $9 i32.const 1 - i32.shl + i32.add local.set $9 + end + local.get $8 + i64.const 0 + i64.eq + if + i64.const -60 + local.set $4 + else + local.get $8 + i64.const 11 + i64.shl + i64.clz + local.set $11 local.get $4 - i64.const 1 + local.get $11 i64.sub local.set $4 - br $continue|1 + local.get $8 + local.get $11 + i64.shl + local.set $8 end - unreachable + br $do-break|0 end - local.get $8 - local.get $3 - i64.ge_u - if - local.get $8 - local.get $3 - i64.sub - local.set $8 - local.get $9 - i32.const 1 - i32.add - local.set $9 - end - local.get $8 - i64.const 0 - i64.eq - if - i64.const -60 - local.set $4 - else - local.get $8 - i64.const 11 - i64.shl - i64.clz - local.set $10 - local.get $4 - local.get $10 - i64.sub - local.set $4 - local.get $8 - local.get $10 - i64.shl - local.set $8 - end - br $break|0 + unreachable end local.get $4 i64.const 0 @@ -11708,7 +11711,7 @@ local.get $0 local.get $0 f64.add - local.set $11 + local.set $12 local.get $4 local.get $5 i64.eq @@ -11721,13 +11724,13 @@ local.get $5 i64.eq if (result i32) - local.get $11 + local.get $12 local.get $1 f64.gt if (result i32) i32.const 1 else - local.get $11 + local.get $12 local.get $1 f64.eq if (result i32) @@ -11903,93 +11906,95 @@ end i32.const 0 local.set $8 - block $break|0 - local.get $4 - local.get $5 - i32.lt_s - if + block $do-break|0 + loop $do-continue|0 local.get $4 - i32.const 1 - i32.add local.get $5 - i32.eq + i32.lt_s if - br $break|0 + local.get $4 + i32.const 1 + i32.add + local.get $5 + i32.eq + if + br $do-break|0 + end + local.get $0 + return end - local.get $0 - return - end - block $break|1 - loop $continue|1 + loop $while-continue|1 local.get $4 local.get $5 i32.gt_s - i32.eqz - br_if $break|1 - local.get $7 - local.get $3 - i32.ge_u + local.set $9 + local.get $9 if local.get $7 local.get $3 - i32.sub + i32.ge_u + if + local.get $7 + local.get $3 + i32.sub + local.set $7 + local.get $8 + i32.const 1 + i32.add + local.set $8 + end + local.get $7 + i32.const 1 + i32.shl local.set $7 local.get $8 i32.const 1 - i32.add + i32.shl local.set $8 + local.get $4 + i32.const 1 + i32.sub + local.set $4 + br $while-continue|1 end + end + local.get $7 + local.get $3 + i32.ge_u + if local.get $7 - i32.const 1 - i32.shl + local.get $3 + i32.sub local.set $7 local.get $8 i32.const 1 - i32.shl + i32.add local.set $8 + end + local.get $7 + i32.const 0 + i32.eq + if + i32.const -30 + local.set $4 + else + local.get $7 + i32.const 8 + i32.shl + i32.clz + local.set $9 local.get $4 - i32.const 1 + local.get $9 i32.sub local.set $4 - br $continue|1 + local.get $7 + local.get $9 + i32.shl + local.set $7 end - unreachable - end - local.get $7 - local.get $3 - i32.ge_u - if - local.get $7 - local.get $3 - i32.sub - local.set $7 - local.get $8 - i32.const 1 - i32.add - local.set $8 + br $do-break|0 end - local.get $7 - i32.const 0 - i32.eq - if - i32.const -30 - local.set $4 - else - local.get $7 - i32.const 8 - i32.shl - i32.clz - local.set $9 - local.get $4 - local.get $9 - i32.sub - local.set $4 - local.get $7 - local.get $9 - i32.shl - local.set $7 - end - br $break|0 + unreachable end local.get $4 i32.const 0 @@ -15924,13 +15929,13 @@ local.get $2 return end - block $break|2 - loop $continue|2 - local.get $1 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $1 + i32.const 0 + i32.gt_s + local.set $3 + local.get $3 + if local.get $1 i32.const 1 i32.and @@ -15948,15 +15953,15 @@ local.get $0 i64.mul local.set $0 - br $continue|2 + br $while-continue|2 end - unreachable end local.get $2 ) (func $~lib/math/ipow32f (; 175 ;) (param $0 f32) (param $1 i32) (result f32) (local $2 i32) (local $3 f32) + (local $4 i32) local.get $1 i32.const 31 i32.shr_s @@ -15969,11 +15974,11 @@ local.set $1 f32.const 1 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + local.set $4 + local.get $4 + if local.get $3 local.get $0 f32.const 1 @@ -15991,9 +15996,8 @@ local.get $0 f32.mul local.set $0 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 if (result f32) @@ -16007,6 +16011,7 @@ (func $~lib/math/ipow64f (; 176 ;) (param $0 f64) (param $1 i32) (result f64) (local $2 i32) (local $3 f64) + (local $4 i32) local.get $1 i32.const 31 i32.shr_s @@ -16019,11 +16024,11 @@ local.set $1 f64.const 1 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + local.set $4 + local.get $4 + if local.get $3 local.get $0 f64.const 1 @@ -16041,9 +16046,8 @@ local.get $0 f64.mul local.set $0 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 if (result f64) @@ -16056,9 +16060,10 @@ ) (func $start:std/math (; 177 ;) (local $0 i32) - (local $1 f64) - (local $2 i64) - (local $3 f32) + (local $1 i32) + (local $2 f64) + (local $3 i64) + (local $4 f32) f64.const 2.718281828459045 global.get $~lib/bindings/Math/E f64.const 0 @@ -43551,23 +43556,23 @@ call $~lib/bindings/Math/random i64.reinterpret_f64 call $~lib/math/NativeMath.seedRandom - block $break|0 - i32.const 0 - local.set $0 - loop $loop|0 - local.get $0 - f64.convert_i32_s - f64.const 1e6 - f64.lt - i32.eqz - br_if $break|0 + i32.const 0 + local.set $0 + loop $for-loop|0 + local.get $0 + f64.convert_i32_s + f64.const 1e6 + f64.lt + local.set $1 + local.get $1 + if call $~lib/math/NativeMath.random - local.set $1 - local.get $1 + local.set $2 + local.get $2 f64.const 0 f64.ge if (result i32) - local.get $1 + local.get $2 f64.const 1 f64.lt else @@ -43586,32 +43591,31 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end - unreachable end call $~lib/bindings/Math/random i64.reinterpret_f64 - local.set $2 - local.get $2 + local.set $3 + local.get $3 call $~lib/math/NativeMath.seedRandom - block $break|1 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 - f64.convert_i32_s - f64.const 1e6 - f64.lt - i32.eqz - br_if $break|1 + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + f64.convert_i32_s + f64.const 1e6 + f64.lt + local.set $1 + local.get $1 + if call $~lib/math/NativeMathf.random - local.set $3 - local.get $3 + local.set $4 + local.get $4 f32.const 0 f32.ge if (result i32) - local.get $3 + local.get $4 f32.const 1 f32.lt else @@ -43630,9 +43634,8 @@ i32.const 1 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end - unreachable end f64.const -8.06684839057968 f64.const -8 @@ -44643,14 +44646,14 @@ unreachable end f64.const 0 - local.set $1 - local.get $1 + local.set $2 + local.get $2 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $1 - local.get $1 + local.get $2 + local.get $2 f64.eq i32.and i32.const 0 @@ -44667,14 +44670,14 @@ unreachable end f64.const -0 - local.set $1 - local.get $1 + local.set $2 + local.get $2 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $1 - local.get $1 + local.get $2 + local.get $2 f64.eq i32.and i32.const 0 @@ -44691,14 +44694,14 @@ unreachable end f64.const 1 - local.set $1 - local.get $1 + local.set $2 + local.get $2 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $1 - local.get $1 + local.get $2 + local.get $2 f64.eq i32.and i32.const 0 @@ -44715,14 +44718,14 @@ unreachable end f64.const -1 - local.set $1 - local.get $1 + local.set $2 + local.get $2 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $1 - local.get $1 + local.get $2 + local.get $2 f64.eq i32.and i32.const 0 @@ -44739,14 +44742,14 @@ unreachable end f64.const nan:0x8000000000000 - local.set $1 - local.get $1 + local.set $2 + local.get $2 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $1 - local.get $1 + local.get $2 + local.get $2 f64.eq i32.and i32.const 0 @@ -44763,14 +44766,14 @@ unreachable end f64.const -nan:0x8000000000000 - local.set $1 - local.get $1 + local.set $2 + local.get $2 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $1 - local.get $1 + local.get $2 + local.get $2 f64.eq i32.and i32.const 0 @@ -44787,14 +44790,14 @@ unreachable end f64.const inf - local.set $1 - local.get $1 + local.set $2 + local.get $2 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $1 - local.get $1 + local.get $2 + local.get $2 f64.eq i32.and i32.const 0 @@ -44811,14 +44814,14 @@ unreachable end f64.const -inf - local.set $1 - local.get $1 + local.set $2 + local.get $2 i64.reinterpret_f64 i64.const 63 i64.shr_u i32.wrap_i64 - local.get $1 - local.get $1 + local.get $2 + local.get $2 f64.eq i32.and i32.const 0 @@ -44835,13 +44838,13 @@ unreachable end f32.const 0 - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $3 - local.get $3 + local.get $4 + local.get $4 f32.eq i32.and i32.const 0 @@ -44858,13 +44861,13 @@ unreachable end f32.const -0 - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $3 - local.get $3 + local.get $4 + local.get $4 f32.eq i32.and i32.const 0 @@ -44881,13 +44884,13 @@ unreachable end f32.const 1 - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $3 - local.get $3 + local.get $4 + local.get $4 f32.eq i32.and i32.const 0 @@ -44904,13 +44907,13 @@ unreachable end f32.const -1 - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $3 - local.get $3 + local.get $4 + local.get $4 f32.eq i32.and i32.const 0 @@ -44927,13 +44930,13 @@ unreachable end f32.const nan:0x400000 - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $3 - local.get $3 + local.get $4 + local.get $4 f32.eq i32.and i32.const 0 @@ -44950,13 +44953,13 @@ unreachable end f32.const -nan:0x400000 - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $3 - local.get $3 + local.get $4 + local.get $4 f32.eq i32.and i32.const 0 @@ -44973,13 +44976,13 @@ unreachable end f32.const inf - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $3 - local.get $3 + local.get $4 + local.get $4 f32.eq i32.and i32.const 0 @@ -44996,13 +44999,13 @@ unreachable end f32.const -inf - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.reinterpret_f32 i32.const 31 i32.shr_u - local.get $3 - local.get $3 + local.get $4 + local.get $4 f32.eq i32.and i32.const 0 @@ -54970,8 +54973,8 @@ f32.const nan:0x400000 i32.const 1 call $~lib/math/ipow32f - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f32.ne i32.eqz if @@ -54985,8 +54988,8 @@ f32.const nan:0x400000 i32.const -1 call $~lib/math/ipow32f - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f32.ne i32.eqz if @@ -55000,8 +55003,8 @@ f32.const nan:0x400000 i32.const 2 call $~lib/math/ipow32f - local.tee $3 - local.get $3 + local.tee $4 + local.get $4 f32.ne i32.eqz if @@ -55197,8 +55200,8 @@ f64.const nan:0x8000000000000 i32.const 1 call $~lib/math/ipow64f - local.tee $1 - local.get $1 + local.tee $2 + local.get $2 f64.ne i32.eqz if @@ -55212,8 +55215,8 @@ f64.const nan:0x8000000000000 i32.const -1 call $~lib/math/ipow64f - local.tee $1 - local.get $1 + local.tee $2 + local.get $2 f64.ne i32.eqz if @@ -55227,8 +55230,8 @@ f64.const nan:0x8000000000000 i32.const 2 call $~lib/math/ipow64f - local.tee $1 - local.get $1 + local.tee $2 + local.get $2 f64.ne i32.eqz if @@ -55394,7 +55397,7 @@ unreachable end ) - (func $start (; 178 ;) + (func $~start (; 178 ;) call $start:std/math ) ) diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index 790a9d1ac2..e62f33511e 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -13,7 +13,7 @@ (data (i32.const 16) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s") (export "memory" (memory $0)) (export "mod" (func $std/mod/mod)) - (start $start) + (start $~start) (func $~lib/math/NativeMath.mod (; 2 ;) (param $0 f64) (param $1 f64) (result f64) (local $2 i64) (local $3 i64) @@ -133,7 +133,7 @@ i64.or end local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $4 local.get $5 i64.gt_s @@ -159,7 +159,7 @@ i64.const 1 i64.sub local.set $4 - br $continue|0 + br $while-continue|0 end end local.get $2 @@ -372,7 +372,7 @@ i32.shl end local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $4 local.get $5 i32.gt_s @@ -398,7 +398,7 @@ i32.const 1 i32.sub local.set $4 - br $continue|0 + br $while-continue|0 end end local.get $2 @@ -2243,7 +2243,7 @@ unreachable end ) - (func $start (; 9 ;) + (func $~start (; 9 ;) call $start:std/mod ) ) diff --git a/tests/compiler/std/mod.untouched.wat b/tests/compiler/std/mod.untouched.wat index cdf8f7768f..4f86aaf533 100644 --- a/tests/compiler/std/mod.untouched.wat +++ b/tests/compiler/std/mod.untouched.wat @@ -15,7 +15,7 @@ (global $std/mod/js i32 (i32.const 1)) (export "memory" (memory $0)) (export "mod" (func $std/mod/mod)) - (start $start) + (start $~start) (func $~lib/math/NativeMath.mod (; 2 ;) (param $0 f64) (param $1 f64) (result f64) (local $2 i64) (local $3 i64) @@ -25,7 +25,8 @@ (local $7 i64) (local $8 f64) (local $9 i64) - (local $10 i64) + (local $10 i32) + (local $11 i64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -167,13 +168,13 @@ i64.or local.set $3 end - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i64.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i64.gt_s + local.set $10 + local.get $10 + if local.get $2 local.get $3 i64.ge_u @@ -200,9 +201,8 @@ i64.const 1 i64.sub local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 local.get $3 @@ -226,13 +226,13 @@ i64.const 11 i64.shl i64.clz - local.set $10 + local.set $11 local.get $4 - local.get $10 + local.get $11 i64.sub local.set $4 local.get $2 - local.get $10 + local.get $11 i64.shl local.set $2 local.get $4 @@ -330,6 +330,7 @@ (local $8 f32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 i32.reinterpret_f32 local.set $2 @@ -467,13 +468,13 @@ i32.or local.set $3 end - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i32.gt_s + local.set $10 + local.get $10 + if local.get $2 local.get $3 i32.ge_u @@ -500,9 +501,8 @@ i32.const 1 i32.sub local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 local.get $3 @@ -526,13 +526,13 @@ i32.const 8 i32.shl i32.clz - local.set $10 + local.set $11 local.get $4 - local.get $10 + local.get $11 i32.sub local.set $4 local.get $2 - local.get $10 + local.get $11 i32.shl local.set $2 local.get $4 @@ -2360,7 +2360,7 @@ unreachable end ) - (func $start (; 9 ;) + (func $~start (; 9 ;) call $start:std/mod ) ) diff --git a/tests/compiler/std/new.optimized.wat b/tests/compiler/std/new.optimized.wat index bd98eecb00..04f4800a66 100644 --- a/tests/compiler/std/new.optimized.wat +++ b/tests/compiler/std/new.optimized.wat @@ -7,7 +7,7 @@ (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $std/new/aClass (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -97,7 +97,7 @@ f32.store offset=4 local.get $0 ) - (func $start (; 3 ;) + (func $~start (; 3 ;) i32.const 16 global.set $~lib/rt/stub/startOffset i32.const 16 diff --git a/tests/compiler/std/new.untouched.wat b/tests/compiler/std/new.untouched.wat index 4f9792186a..d72a407ed0 100644 --- a/tests/compiler/std/new.untouched.wat +++ b/tests/compiler/std/new.untouched.wat @@ -12,7 +12,7 @@ (global $std/new/aClass (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 8)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 0 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -166,7 +166,7 @@ call $std/new/AClass#constructor global.set $std/new/aClass ) - (func $start (; 5 ;) + (func $~start (; 5 ;) call $start:std/new ) ) diff --git a/tests/compiler/std/object-literal.optimized.wat b/tests/compiler/std/object-literal.optimized.wat index 8d70e1f167..97d0bbb311 100644 --- a/tests/compiler/std/object-literal.optimized.wat +++ b/tests/compiler/std/object-literal.optimized.wat @@ -11,7 +11,7 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -123,7 +123,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $2 @@ -144,20 +144,18 @@ local.tee $1 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $1 - local.tee $3 - i32.const 1 - i32.sub - local.set $1 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $1 + local.tee $3 + i32.const 1 + i32.sub + local.set $1 + local.get $3 + if local.get $0 i32.load16_u local.tee $3 @@ -170,18 +168,16 @@ local.get $4 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $2 - i32.const 2 - i32.add - local.set $2 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $2 + i32.const 2 + i32.add + local.set $2 + br $while-continue|1 end end i32.const 0 @@ -296,7 +292,7 @@ unreachable end ) - (func $start (; 8 ;) + (func $~start (; 8 ;) call $start:std/object-literal ) ) diff --git a/tests/compiler/std/object-literal.untouched.wat b/tests/compiler/std/object-literal.untouched.wat index fb523c15c3..ff967f734b 100644 --- a/tests/compiler/std/object-literal.untouched.wat +++ b/tests/compiler/std/object-literal.untouched.wat @@ -15,7 +15,7 @@ (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 124)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -143,6 +143,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -177,15 +178,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -202,39 +203,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -245,17 +248,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 7 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -452,7 +454,7 @@ local.get $2 call $~lib/rt/stub/__release ) - (func $start (; 12 ;) + (func $~start (; 12 ;) call $start:std/object-literal ) ) diff --git a/tests/compiler/std/object.optimized.wat b/tests/compiler/std/object.optimized.wat index 716102bfdb..20edf44326 100644 --- a/tests/compiler/std/object.optimized.wat +++ b/tests/compiler/std/object.optimized.wat @@ -14,7 +14,7 @@ (data (i32.const 128) "\04\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00a\00b") (data (i32.const 164) "\01\00\00\00\01") (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/object/Object.is (; 1 ;) (param $0 f64) (param $1 f64) (result i32) local.get $0 local.get $1 @@ -94,7 +94,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -115,20 +115,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -141,18 +139,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -668,7 +664,7 @@ unreachable end ) - (func $start (; 10 ;) + (func $~start (; 10 ;) call $start:std/object ) ) diff --git a/tests/compiler/std/object.untouched.wat b/tests/compiler/std/object.untouched.wat index 283dd94889..f43f30d0b9 100644 --- a/tests/compiler/std/object.untouched.wat +++ b/tests/compiler/std/object.untouched.wat @@ -17,7 +17,7 @@ (table $0 1 funcref) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/object/Object.is (; 1 ;) (param $0 f64) (param $1 f64) (result i32) local.get $0 local.get $1 @@ -94,6 +94,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -128,15 +129,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -153,39 +154,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -196,17 +199,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 9 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -884,7 +886,7 @@ unreachable end ) - (func $start (; 14 ;) + (func $~start (; 14 ;) call $start:std/object ) ) diff --git a/tests/compiler/std/operator-overloading.optimized.wat b/tests/compiler/std/operator-overloading.optimized.wat index acaeaadd73..5ff93ba6c8 100644 --- a/tests/compiler/std/operator-overloading.optimized.wat +++ b/tests/compiler/std/operator-overloading.optimized.wat @@ -78,7 +78,7 @@ (global $std/operator-overloading/aii2 (mut i32) (i32.const 0)) (global $std/operator-overloading/aii (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -2377,7 +2377,7 @@ unreachable end ) - (func $start (; 12 ;) + (func $~start (; 12 ;) call $start:std/operator-overloading ) ) diff --git a/tests/compiler/std/operator-overloading.untouched.wat b/tests/compiler/std/operator-overloading.untouched.wat index c671a12303..baa6e99a19 100644 --- a/tests/compiler/std/operator-overloading.untouched.wat +++ b/tests/compiler/std/operator-overloading.untouched.wat @@ -92,7 +92,7 @@ (global $std/operator-overloading/aii (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 6336)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/maybeGrowMemory (; 1 ;) (param $0 i32) (local $1 i32) (local $2 i32) @@ -3042,7 +3042,7 @@ local.get $22 call $~lib/rt/stub/__release ) - (func $start (; 36 ;) + (func $~start (; 36 ;) call $start:std/operator-overloading ) ) diff --git a/tests/compiler/std/pointer.optimized.wat b/tests/compiler/std/pointer.optimized.wat index 9da7d24d7a..6d695441d9 100644 --- a/tests/compiler/std/pointer.optimized.wat +++ b/tests/compiler/std/pointer.optimized.wat @@ -13,7 +13,7 @@ (global $std/pointer/nextOne (mut i32) (i32.const 0)) (global $std/pointer/buf (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/memory/memory.fill (; 1 ;) (param $0 i32) (local $1 i32) local.get $0 @@ -81,7 +81,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -107,10 +107,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $2 i32.const 8 i32.ge_u @@ -131,11 +131,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $2 if local.get $0 @@ -156,7 +156,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|2 + br $while-continue|2 end end else @@ -168,7 +168,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $2 i32.add @@ -189,10 +189,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $2 i32.const 8 i32.ge_u @@ -208,11 +208,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $2 if local.get $0 @@ -226,7 +226,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -596,7 +596,7 @@ unreachable end ) - (func $start (; 4 ;) + (func $~start (; 4 ;) call $start:std/pointer ) ) diff --git a/tests/compiler/std/pointer.untouched.wat b/tests/compiler/std/pointer.untouched.wat index 43e646ae7c..1a02e397ba 100644 --- a/tests/compiler/std/pointer.untouched.wat +++ b/tests/compiler/std/pointer.untouched.wat @@ -16,7 +16,7 @@ (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $std/pointer/buf (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/__retain (; 1 ;) (param $0 i32) (result i32) local.get $0 ) @@ -30,6 +30,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -248,13 +249,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -281,9 +282,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -291,39 +291,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -331,13 +331,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -378,9 +378,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -537,13 +536,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -618,9 +617,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -659,13 +657,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -740,9 +738,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -767,13 +764,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -848,9 +845,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -1320,6 +1316,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -1366,13 +1363,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1383,30 +1380,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -1423,37 +1419,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -1464,15 +1458,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1489,17 +1483,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -1512,16 +1505,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -1533,9 +1525,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -2206,7 +2197,7 @@ local.get $5 call $~lib/rt/stub/__release ) - (func $start (; 7 ;) + (func $~start (; 7 ;) call $start:std/pointer ) ) diff --git a/tests/compiler/std/polyfills.untouched.wat b/tests/compiler/std/polyfills.untouched.wat index b10c556315..0267eb75e0 100644 --- a/tests/compiler/std/polyfills.untouched.wat +++ b/tests/compiler/std/polyfills.untouched.wat @@ -8,7 +8,7 @@ (data (i32.const 16) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00s\00t\00d\00/\00p\00o\00l\00y\00f\00i\00l\00l\00s\00.\00t\00s\00") (table $0 1 funcref) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/polyfills/bswap (; 1 ;) (param $0 i32) (result i32) local.get $0 return @@ -489,7 +489,7 @@ unreachable end ) - (func $start (; 18 ;) + (func $~start (; 18 ;) call $start:std/polyfills ) ) diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 1a29a34a07..96d3e110e1 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -46,7 +46,7 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -642,7 +642,7 @@ i32.const 2256 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -656,7 +656,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -676,14 +676,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 688 @@ -995,7 +995,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1054,14 +1054,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1073,12 +1073,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1097,7 +1097,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1560,7 +1560,7 @@ local.get $2 i32.sub local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 32 i32.ge_u @@ -1591,7 +1591,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -1660,7 +1660,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1686,10 +1686,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1710,11 +1710,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1735,7 +1735,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1747,7 +1747,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1768,10 +1768,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1787,11 +1787,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1805,7 +1805,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -2083,7 +2083,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -2103,15 +2103,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=4 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -2166,7 +2164,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -2206,7 +2204,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -2682,7 +2680,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -2713,7 +2711,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -2807,8 +2805,12 @@ (local $3 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 100 i32.lt_s if @@ -2829,13 +2831,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -2843,7 +2840,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -2860,8 +2861,12 @@ end i32.const 50 local.set $0 - loop $loop|1 + loop $for-loop|3 local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 100 i32.lt_s if @@ -2883,13 +2888,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -2897,7 +2897,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -2919,7 +2923,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|4 local.get $0 local.get $2 i32.load offset=12 @@ -2930,18 +2934,8 @@ local.get $0 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $3 - local.get $2 - local.get $0 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -2949,7 +2943,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $3 + local.get $2 + local.get $0 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $3 @@ -2967,8 +2970,12 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|6 local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 50 i32.lt_s if @@ -2997,14 +3004,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|6 end end local.get $1 @@ -3021,8 +3026,12 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|8 local.get $0 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s i32.const 50 i32.lt_s if @@ -3065,14 +3074,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|8 end end local.get $1 @@ -3182,7 +3189,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -3222,7 +3229,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -3383,7 +3390,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -3414,7 +3421,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -3506,8 +3513,10 @@ (local $3 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $0 + i32.const 255 + i32.and i32.const 100 i32.lt_u if @@ -3528,13 +3537,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -3542,7 +3546,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -3559,8 +3567,10 @@ end i32.const 50 local.set $0 - loop $loop|1 + loop $for-loop|3 local.get $0 + i32.const 255 + i32.and i32.const 100 i32.lt_u if @@ -3582,13 +3592,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -3596,7 +3601,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -3618,7 +3627,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|4 local.get $0 local.get $2 i32.load offset=12 @@ -3629,18 +3638,8 @@ local.get $0 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $3 - local.get $2 - local.get $0 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -3648,7 +3647,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $3 + local.get $2 + local.get $0 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $3 @@ -3666,8 +3674,10 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|6 local.get $0 + i32.const 255 + i32.and i32.const 50 i32.lt_u if @@ -3696,14 +3706,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|6 end end local.get $1 @@ -3720,8 +3728,10 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|8 local.get $0 + i32.const 255 + i32.and i32.const 50 i32.lt_u if @@ -3764,14 +3774,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|8 end end local.get $1 @@ -3860,7 +3868,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -3880,15 +3888,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=4 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -3943,7 +3949,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -3983,7 +3989,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -4184,7 +4190,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -4215,7 +4221,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -4311,8 +4317,12 @@ (local $3 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 100 i32.lt_s if @@ -4333,13 +4343,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -4347,7 +4352,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -4364,8 +4373,12 @@ end i32.const 50 local.set $0 - loop $loop|1 + loop $for-loop|3 local.get $0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 100 i32.lt_s if @@ -4387,13 +4400,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -4401,7 +4409,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -4423,7 +4435,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|4 local.get $0 local.get $2 i32.load offset=12 @@ -4434,18 +4446,8 @@ local.get $0 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $3 - local.get $2 - local.get $0 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -4453,7 +4455,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $3 + local.get $2 + local.get $0 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $3 @@ -4471,8 +4482,12 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|6 local.get $0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 50 i32.lt_s if @@ -4501,14 +4516,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|6 end end local.get $1 @@ -4525,8 +4538,12 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|8 local.get $0 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s i32.const 50 i32.lt_s if @@ -4569,14 +4586,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|8 end end local.get $1 @@ -4686,7 +4701,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -4726,7 +4741,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -4887,7 +4902,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -4918,7 +4933,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5012,8 +5027,10 @@ (local $3 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|1 local.get $0 + i32.const 65535 + i32.and i32.const 100 i32.lt_u if @@ -5034,13 +5051,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -5048,7 +5060,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -5065,8 +5081,10 @@ end i32.const 50 local.set $0 - loop $loop|1 + loop $for-loop|3 local.get $0 + i32.const 65535 + i32.and i32.const 100 i32.lt_u if @@ -5088,13 +5106,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -5102,7 +5115,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -5124,7 +5141,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|4 local.get $0 local.get $2 i32.load offset=12 @@ -5135,18 +5152,8 @@ local.get $0 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $3 - local.get $2 - local.get $0 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -5154,7 +5161,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $3 + local.get $2 + local.get $0 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $3 @@ -5172,8 +5188,10 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|6 local.get $0 + i32.const 65535 + i32.and i32.const 50 i32.lt_u if @@ -5202,14 +5220,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|6 end end local.get $1 @@ -5226,8 +5242,10 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|8 local.get $0 + i32.const 65535 + i32.and i32.const 50 i32.lt_u if @@ -5270,14 +5288,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|8 end end local.get $1 @@ -5382,7 +5398,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -5400,15 +5416,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=4 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -5459,7 +5473,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -5499,7 +5513,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -5696,7 +5710,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -5727,7 +5741,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5819,7 +5833,7 @@ (local $3 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 100 i32.lt_s @@ -5841,13 +5855,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -5855,7 +5864,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -5872,7 +5885,7 @@ end i32.const 50 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i32.const 100 i32.lt_s @@ -5895,13 +5908,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -5909,7 +5917,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -5931,7 +5943,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.load offset=12 @@ -5942,18 +5954,8 @@ local.get $0 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $3 - local.get $2 - local.get $0 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -5961,7 +5963,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $3 + local.get $2 + local.get $0 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 end end local.get $3 @@ -5979,7 +5990,7 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 i32.const 50 i32.lt_s @@ -6009,14 +6020,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -6033,7 +6042,7 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 i32.const 50 i32.lt_s @@ -6077,14 +6086,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -6174,7 +6181,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -6205,7 +6212,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -6217,7 +6224,7 @@ (local $3 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 i32.const 100 i32.lt_u @@ -6239,13 +6246,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -6253,7 +6255,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -6270,7 +6276,7 @@ end i32.const 50 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i32.const 100 i32.lt_u @@ -6293,13 +6299,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -6307,7 +6308,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -6329,7 +6334,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.load offset=12 @@ -6340,18 +6345,8 @@ local.get $0 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $3 - local.get $2 - local.get $0 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -6359,7 +6354,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $3 + local.get $2 + local.get $0 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 end end local.get $3 @@ -6377,7 +6381,7 @@ end i32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 i32.const 50 i32.lt_u @@ -6407,14 +6411,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -6431,7 +6433,7 @@ end i32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 i32.const 50 i32.lt_u @@ -6475,14 +6477,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -6655,7 +6655,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -6673,15 +6673,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -6732,7 +6730,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -6772,7 +6770,7 @@ i32.const 16 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -6969,7 +6967,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -7000,7 +6998,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -7094,7 +7092,7 @@ (local $4 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 i64.const 100 i64.lt_s @@ -7116,13 +7114,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -7130,7 +7123,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -7147,7 +7144,7 @@ end i64.const 50 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i64.const 100 i64.lt_s @@ -7170,13 +7167,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -7184,7 +7176,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -7204,7 +7200,7 @@ local.set $2 call $~lib/set/Set#constructor local.set $4 - loop $loop|2 + loop $for-loop|2 local.get $3 local.get $2 i32.load offset=12 @@ -7215,18 +7211,8 @@ local.get $3 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $4 - local.get $2 - local.get $3 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -7234,7 +7220,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $3 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|2 end end local.get $4 @@ -7252,7 +7247,7 @@ end i64.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 i64.const 50 i64.lt_s @@ -7282,14 +7277,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -7306,7 +7299,7 @@ end i64.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 i64.const 50 i64.lt_s @@ -7350,14 +7343,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -7447,7 +7438,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -7478,7 +7469,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -7491,7 +7482,7 @@ (local $4 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 i64.const 100 i64.lt_u @@ -7513,13 +7504,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -7527,7 +7513,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -7544,7 +7534,7 @@ end i64.const 50 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 i64.const 100 i64.lt_u @@ -7567,13 +7557,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -7581,7 +7566,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -7601,7 +7590,7 @@ local.set $2 call $~lib/set/Set#constructor local.set $4 - loop $loop|2 + loop $for-loop|2 local.get $3 local.get $2 i32.load offset=12 @@ -7612,18 +7601,8 @@ local.get $3 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $4 - local.get $2 - local.get $3 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -7631,7 +7610,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $3 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|2 end end local.get $4 @@ -7649,7 +7637,7 @@ end i64.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 i64.const 50 i64.lt_u @@ -7679,14 +7667,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -7703,7 +7689,7 @@ end i64.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 i64.const 50 i64.lt_u @@ -7747,14 +7733,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i64.const 1 - i64.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -7828,7 +7812,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -7846,15 +7830,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=4 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -7906,7 +7888,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -7947,7 +7929,7 @@ i32.const 8 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -8145,7 +8127,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -8176,7 +8158,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -8271,7 +8253,7 @@ (local $4 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 f32.const 100 f32.lt @@ -8293,13 +8275,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - f32.const 1 - f32.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -8307,7 +8284,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -8324,7 +8305,7 @@ end f32.const 50 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 f32.const 100 f32.lt @@ -8347,13 +8328,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - f32.const 1 - f32.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -8361,7 +8337,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -8381,7 +8361,7 @@ local.set $2 call $~lib/set/Set#constructor local.set $4 - loop $loop|2 + loop $for-loop|2 local.get $3 local.get $2 i32.load offset=12 @@ -8392,18 +8372,8 @@ local.get $3 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $4 - local.get $2 - local.get $3 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -8411,7 +8381,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $3 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|2 end end local.get $4 @@ -8429,7 +8408,7 @@ end f32.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 f32.const 50 f32.lt @@ -8459,14 +8438,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f32.const 1 - f32.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -8483,7 +8460,7 @@ end f32.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 f32.const 50 f32.lt @@ -8527,14 +8504,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f32.const 1 - f32.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -8608,7 +8583,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -8626,15 +8601,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -8686,7 +8659,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -8727,7 +8700,7 @@ i32.const 16 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -8925,7 +8898,7 @@ i32.store offset=12 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -8956,7 +8929,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -9051,7 +9024,7 @@ (local $4 i32) call $~lib/set/Set#constructor local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 f64.const 100 f64.lt @@ -9073,13 +9046,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - f64.const 1 - f64.add - local.set $0 - br $loop|0 - else i32.const 0 i32.const 416 i32.const 8 @@ -9087,7 +9055,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $for-loop|0 end end local.get $1 @@ -9104,7 +9076,7 @@ end f64.const 50 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 f64.const 100 f64.lt @@ -9127,13 +9099,8 @@ local.get $1 local.get $0 call $~lib/set/Set#has + i32.eqz if - local.get $0 - f64.const 1 - f64.add - local.set $0 - br $loop|1 - else i32.const 0 i32.const 416 i32.const 16 @@ -9141,7 +9108,11 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $for-loop|1 end end local.get $1 @@ -9161,7 +9132,7 @@ local.set $2 call $~lib/set/Set#constructor local.set $4 - loop $loop|2 + loop $for-loop|2 local.get $3 local.get $2 i32.load offset=12 @@ -9172,18 +9143,8 @@ local.get $3 call $~lib/array/Array#__get call $~lib/set/Set#has + i32.eqz if - local.get $4 - local.get $2 - local.get $3 - call $~lib/array/Array#__get - call $~lib/set/Set#add - local.get $3 - i32.const 1 - i32.add - local.set $3 - br $loop|2 - else i32.const 0 i32.const 416 i32.const 24 @@ -9191,7 +9152,16 @@ call $~lib/builtins/abort unreachable end - unreachable + local.get $4 + local.get $2 + local.get $3 + call $~lib/array/Array#__get + call $~lib/set/Set#add + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|2 end end local.get $4 @@ -9209,7 +9179,7 @@ end f64.const 0 local.set $0 - loop $loop|3 + loop $for-loop|3 local.get $0 f64.const 50 f64.lt @@ -9239,14 +9209,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f64.const 1 - f64.add - local.set $0 - br $loop|3 end - unreachable + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $for-loop|3 end end local.get $1 @@ -9263,7 +9231,7 @@ end f64.const 0 local.set $0 - loop $loop|4 + loop $for-loop|4 local.get $0 f64.const 50 f64.lt @@ -9307,14 +9275,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - f64.const 1 - f64.add - local.set $0 - br $loop|4 end - unreachable + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $for-loop|4 end end local.get $1 @@ -9348,7 +9314,7 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $start (; 124 ;) + (func $~start (; 124 ;) call $std/set/testNumeric call $std/set/testNumeric call $std/set/testNumeric diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index 2818512f08..9557c96c67 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -51,7 +51,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 496)) (global $~lib/heap/__heap_base i32 (i32.const 684)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/tlsf/removeBlock (; 5 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -771,6 +771,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -824,71 +826,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1277,34 +1277,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1313,23 +1314,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1338,11 +1339,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1354,21 +1355,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1376,39 +1376,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1777,6 +1775,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -1995,13 +1994,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -2028,9 +2027,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -2087,39 +2085,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2127,13 +2125,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2174,9 +2172,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2333,13 +2330,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2414,9 +2411,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2455,13 +2451,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2536,9 +2532,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2563,13 +2558,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2644,9 +2639,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3116,6 +3110,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3162,13 +3157,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3179,30 +3174,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3219,37 +3213,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3260,15 +3252,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3285,17 +3277,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3308,16 +3299,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3329,9 +3319,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3637,6 +3626,7 @@ ) (func $~lib/set/Set#find (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -3648,11 +3638,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -3681,9 +3671,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -3718,6 +3707,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -3752,49 +3742,49 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load8_s i32.store8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load8_s - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -3806,26 +3796,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -3833,19 +3822,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -4340,6 +4329,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -4352,22 +4342,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 8 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=4 i32.const 1 i32.and @@ -4375,12 +4365,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load8_s call $~lib/array/Array#__set end @@ -4388,9 +4378,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -4508,18 +4497,27 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $3 + local.get $3 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -4552,9 +4550,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -4569,15 +4566,19 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 50 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -4609,9 +4610,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -4631,20 +4631,20 @@ local.set $1 i32.const 0 call $~lib/set/Set#constructor - local.set $2 - block $break|2 - i32.const 0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + local.set $4 + i32.const 0 + local.set $5 + loop $for-loop|4 + local.get $5 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $1 - local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -4656,20 +4656,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $4 local.get $1 - local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|2 + local.set $5 + br $for-loop|4 end - unreachable end - local.get $2 + local.get $4 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -4683,17 +4682,21 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $3 - loop $loop|3 - local.get $3 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 + i32.const 0 + local.set $5 + loop $for-loop|6 + local.get $5 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $7 + local.get $7 + if local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz if @@ -4705,11 +4708,11 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -4721,13 +4724,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|3 + local.set $5 + br $for-loop|6 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -4742,17 +4744,21 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $3 - loop $loop|4 - local.get $3 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|4 + i32.const 0 + local.set $5 + loop $for-loop|8 + local.get $5 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $8 + local.get $8 + if local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -4765,10 +4771,10 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#add local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz if @@ -4780,11 +4786,11 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -4796,13 +4802,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|4 + local.set $5 + br $for-loop|8 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -4834,7 +4839,7 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -4913,6 +4918,7 @@ ) (func $~lib/set/Set#find (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -4924,11 +4930,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -4955,9 +4961,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -4990,6 +4995,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -5024,49 +5030,49 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load8_u i32.store8 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load8_u - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash8 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -5078,26 +5084,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -5105,19 +5110,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -5302,6 +5307,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -5314,22 +5320,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 8 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=4 i32.const 1 i32.and @@ -5337,12 +5343,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load8_u call $~lib/array/Array#__set end @@ -5350,9 +5356,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -5468,18 +5473,25 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 255 + i32.and + i32.const 100 + i32.lt_u + local.set $3 + local.get $3 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -5512,9 +5524,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -5529,15 +5540,17 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 + i32.const 50 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 255 + i32.and + i32.const 100 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -5569,9 +5582,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -5591,20 +5603,20 @@ local.set $1 i32.const 0 call $~lib/set/Set#constructor - local.set $2 - block $break|2 - i32.const 0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + local.set $4 + i32.const 0 + local.set $5 + loop $for-loop|4 + local.get $5 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $1 - local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -5616,20 +5628,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $4 local.get $1 - local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|2 + local.set $5 + br $for-loop|4 end - unreachable end - local.get $2 + local.get $4 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -5643,17 +5654,19 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $3 - loop $loop|3 - local.get $3 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 + i32.const 0 + local.set $5 + loop $for-loop|6 + local.get $5 + i32.const 255 + i32.and + i32.const 50 + i32.lt_u + local.set $7 + local.get $7 + if local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz if @@ -5665,11 +5678,11 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -5681,13 +5694,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|3 + local.set $5 + br $for-loop|6 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -5702,17 +5714,19 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $3 - loop $loop|4 - local.get $3 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|4 + i32.const 0 + local.set $5 + loop $for-loop|8 + local.get $5 + i32.const 255 + i32.and + i32.const 50 + i32.lt_u + local.set $8 + local.get $8 + if local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -5725,10 +5739,10 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#add local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz if @@ -5740,11 +5754,11 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -5756,13 +5770,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|4 + local.set $5 + br $for-loop|8 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -5794,7 +5807,7 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -5895,6 +5908,7 @@ ) (func $~lib/set/Set#find (; 73 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -5906,11 +5920,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -5939,9 +5953,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -5976,6 +5989,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -6010,49 +6024,49 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load16_s i32.store16 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load16_s - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -6064,26 +6078,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -6091,19 +6104,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -6290,6 +6303,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -6302,22 +6316,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 8 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=4 i32.const 1 i32.and @@ -6325,12 +6339,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load16_s call $~lib/array/Array#__set end @@ -6338,9 +6352,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -6458,18 +6471,27 @@ (local $1 i32) (local $2 i32) (local $3 i32) - i32.const 0 + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $3 + local.get $3 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -6502,9 +6524,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -6519,15 +6540,19 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 50 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 100 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -6559,9 +6584,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -6581,20 +6605,20 @@ local.set $1 i32.const 0 call $~lib/set/Set#constructor - local.set $2 - block $break|2 - i32.const 0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + local.set $4 + i32.const 0 + local.set $5 + loop $for-loop|4 + local.get $5 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $1 - local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -6606,20 +6630,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $4 local.get $1 - local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|2 + local.set $5 + br $for-loop|4 end - unreachable end - local.get $2 + local.get $4 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -6633,17 +6656,21 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $3 - loop $loop|3 - local.get $3 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 + i32.const 0 + local.set $5 + loop $for-loop|6 + local.get $5 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $7 + local.get $7 + if local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz if @@ -6655,11 +6682,11 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -6671,13 +6698,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|3 + local.set $5 + br $for-loop|6 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -6692,17 +6718,21 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $3 - loop $loop|4 - local.get $3 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|4 + i32.const 0 + local.set $5 + loop $for-loop|8 + local.get $5 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + i32.const 50 + i32.lt_s + local.set $8 + local.get $8 + if local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -6715,10 +6745,10 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#add local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz if @@ -6730,11 +6760,11 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -6746,13 +6776,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|4 + local.set $5 + br $for-loop|8 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -6784,7 +6813,7 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -6863,6 +6892,7 @@ ) (func $~lib/set/Set#find (; 89 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -6874,11 +6904,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -6905,9 +6935,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -6940,6 +6969,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -6974,49 +7004,49 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load16_u i32.store16 block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load16_u - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash16 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -7028,26 +7058,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -7055,19 +7084,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -7252,6 +7281,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -7264,22 +7294,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 8 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=4 i32.const 1 i32.and @@ -7287,12 +7317,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load16_u call $~lib/array/Array#__set end @@ -7300,9 +7330,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -7418,18 +7447,25 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 65535 + i32.and + i32.const 100 + i32.lt_u + local.set $3 + local.get $3 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -7462,9 +7498,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -7479,15 +7514,17 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 + i32.const 50 + local.set $1 + loop $for-loop|3 + local.get $1 + i32.const 65535 + i32.and + i32.const 100 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -7519,9 +7556,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -7541,20 +7577,20 @@ local.set $1 i32.const 0 call $~lib/set/Set#constructor - local.set $2 - block $break|2 - i32.const 0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + local.set $4 + i32.const 0 + local.set $5 + loop $for-loop|4 + local.get $5 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $1 - local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#has i32.eqz @@ -7566,20 +7602,19 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $4 local.get $1 - local.get $3 + local.get $5 call $~lib/array/Array#__get call $~lib/set/Set#add - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|2 + local.set $5 + br $for-loop|4 end - unreachable end - local.get $2 + local.get $4 call $~lib/set/Set#get:size local.get $0 call $~lib/set/Set#get:size @@ -7593,17 +7628,19 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $3 - loop $loop|3 - local.get $3 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 + i32.const 0 + local.set $5 + loop $for-loop|6 + local.get $5 + i32.const 65535 + i32.and + i32.const 50 + i32.lt_u + local.set $7 + local.get $7 + if local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz if @@ -7615,11 +7652,11 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -7631,13 +7668,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|3 + local.set $5 + br $for-loop|6 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -7652,17 +7688,19 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $3 - loop $loop|4 - local.get $3 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|4 + i32.const 0 + local.set $5 + loop $for-loop|8 + local.get $5 + i32.const 65535 + i32.and + i32.const 50 + i32.lt_u + local.set $8 + local.get $8 + if local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -7675,10 +7713,10 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#add local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz if @@ -7690,11 +7728,11 @@ unreachable end local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#delete drop local.get $0 - local.get $3 + local.get $5 call $~lib/set/Set#has i32.eqz i32.eqz @@ -7706,13 +7744,12 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $5 i32.const 1 i32.add - local.set $3 - br $loop|4 + local.set $5 + br $for-loop|8 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -7744,7 +7781,7 @@ end local.get $1 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release local.get $0 call $~lib/rt/pure/__release @@ -7865,6 +7902,7 @@ ) (func $~lib/set/Set#find (; 106 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -7876,11 +7914,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -7905,9 +7943,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -7938,6 +7975,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -7972,49 +8010,49 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load i32.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -8026,26 +8064,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -8053,19 +8090,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -8248,6 +8285,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -8260,22 +8298,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 8 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=4 i32.const 1 i32.and @@ -8283,12 +8321,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load call $~lib/array/Array#__set end @@ -8296,9 +8334,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -8412,18 +8449,19 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 100 + i32.lt_s + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -8456,9 +8494,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -8473,15 +8510,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 50 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -8513,9 +8550,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -8536,16 +8572,16 @@ i32.const 0 call $~lib/set/Set#constructor local.set $2 - block $break|2 - i32.const 0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $1 local.get $3 @@ -8569,9 +8605,8 @@ i32.const 1 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $2 call $~lib/set/Set#get:size @@ -8587,15 +8622,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $3 - loop $loop|3 - local.get $3 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 + i32.const 0 + local.set $3 + loop $for-loop|3 + local.get $3 + i32.const 50 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/set/Set#has @@ -8629,9 +8664,8 @@ i32.const 1 i32.add local.set $3 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -8646,15 +8680,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $3 - loop $loop|4 - local.get $3 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|4 + i32.const 0 + local.set $3 + loop $for-loop|4 + local.get $3 + i32.const 50 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/set/Set#has @@ -8704,9 +8738,8 @@ i32.const 1 i32.add local.set $3 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -8817,6 +8850,7 @@ ) (func $~lib/set/Set#find (; 122 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -8828,11 +8862,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -8857,9 +8891,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -8890,6 +8923,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -8924,49 +8958,49 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load i32.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=4 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -8978,26 +9012,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -9005,19 +9038,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/pure/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/pure/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -9200,6 +9233,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -9212,22 +9246,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 8 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=4 i32.const 1 i32.and @@ -9235,12 +9269,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i32.load call $~lib/array/Array#__set end @@ -9248,9 +9282,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -9364,18 +9397,19 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i32.const 100 + i32.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -9408,9 +9442,8 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -9425,15 +9458,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $loop|1 - local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 + i32.const 50 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -9465,9 +9498,8 @@ i32.const 1 i32.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -9488,16 +9520,16 @@ i32.const 0 call $~lib/set/Set#constructor local.set $2 - block $break|2 - i32.const 0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + call $~lib/array/Array#get:length + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $1 local.get $3 @@ -9521,9 +9553,8 @@ i32.const 1 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $2 call $~lib/set/Set#get:size @@ -9539,15 +9570,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $3 - loop $loop|3 - local.get $3 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 + i32.const 0 + local.set $3 + loop $for-loop|3 + local.get $3 + i32.const 50 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/set/Set#has @@ -9581,9 +9612,8 @@ i32.const 1 i32.add local.set $3 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -9598,15 +9628,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i32.const 0 - local.set $3 - loop $loop|4 - local.get $3 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|4 + i32.const 0 + local.set $3 + loop $for-loop|4 + local.get $3 + i32.const 50 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/set/Set#has @@ -9656,9 +9686,8 @@ i32.const 1 i32.add local.set $3 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -9857,6 +9886,7 @@ ) (func $~lib/set/Set#find (; 139 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -9868,11 +9898,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -9897,9 +9927,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -9928,9 +9957,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i64) - (local $12 i32) + (local $11 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -9965,49 +9995,49 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i64.load i64.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -10019,26 +10049,25 @@ i32.const 16 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -10046,19 +10075,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -10242,6 +10271,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -10254,22 +10284,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -10277,12 +10307,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i64.load call $~lib/array/Array#__set end @@ -10290,9 +10320,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -10408,18 +10437,19 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - i64.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i64.const 100 - i64.lt_s - i32.eqz - br_if $break|0 + i64.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i64.const 100 + i64.lt_s + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -10452,9 +10482,8 @@ i64.const 1 i64.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -10469,15 +10498,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i64.const 50 - local.set $1 - loop $loop|1 - local.get $1 - i64.const 100 - i64.lt_s - i32.eqz - br_if $break|1 + i64.const 50 + local.set $1 + loop $for-loop|1 + local.get $1 + i64.const 100 + i64.lt_s + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -10509,9 +10538,8 @@ i64.const 1 i64.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -10532,16 +10560,16 @@ i32.const 0 call $~lib/set/Set#constructor local.set $3 - block $break|2 - i32.const 0 - local.set $4 - loop $loop|2 - local.get $4 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $4 + loop $for-loop|2 + local.get $4 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $2 local.get $4 @@ -10565,9 +10593,8 @@ i32.const 1 i32.add local.set $4 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $3 call $~lib/set/Set#get:size @@ -10583,15 +10610,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i64.const 0 - local.set $1 - loop $loop|3 - local.get $1 - i64.const 50 - i64.lt_s - i32.eqz - br_if $break|3 + i64.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i64.const 50 + i64.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -10625,9 +10652,8 @@ i64.const 1 i64.add local.set $1 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -10642,15 +10668,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i64.const 0 - local.set $1 - loop $loop|4 - local.get $1 - i64.const 50 - i64.lt_s - i32.eqz - br_if $break|4 + i64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + i64.const 50 + i64.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -10700,9 +10726,8 @@ i64.const 1 i64.add local.set $1 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -10813,6 +10838,7 @@ ) (func $~lib/set/Set#find (; 155 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -10824,11 +10850,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -10853,9 +10879,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -10884,9 +10909,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i64) - (local $12 i32) + (local $11 i32) + (local $12 i64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -10921,49 +10947,49 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i64.load i64.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 i64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -10975,26 +11001,25 @@ i32.const 16 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -11002,19 +11027,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -11198,6 +11223,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -11210,22 +11236,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -11233,12 +11259,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 i64.load call $~lib/array/Array#__set end @@ -11246,9 +11272,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -11364,18 +11389,19 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - i64.const 0 - local.set $1 - loop $loop|0 - local.get $1 - i64.const 100 - i64.lt_u - i32.eqz - br_if $break|0 + i64.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + i64.const 100 + i64.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -11408,9 +11434,8 @@ i64.const 1 i64.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -11425,15 +11450,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - i64.const 50 - local.set $1 - loop $loop|1 - local.get $1 - i64.const 100 - i64.lt_u - i32.eqz - br_if $break|1 + i64.const 50 + local.set $1 + loop $for-loop|1 + local.get $1 + i64.const 100 + i64.lt_u + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -11465,9 +11490,8 @@ i64.const 1 i64.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -11488,16 +11512,16 @@ i32.const 0 call $~lib/set/Set#constructor local.set $3 - block $break|2 - i32.const 0 - local.set $4 - loop $loop|2 - local.get $4 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $4 + loop $for-loop|2 + local.get $4 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $2 local.get $4 @@ -11521,9 +11545,8 @@ i32.const 1 i32.add local.set $4 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $3 call $~lib/set/Set#get:size @@ -11539,15 +11562,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - i64.const 0 - local.set $1 - loop $loop|3 - local.get $1 - i64.const 50 - i64.lt_u - i32.eqz - br_if $break|3 + i64.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + i64.const 50 + i64.lt_u + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -11581,9 +11604,8 @@ i64.const 1 i64.add local.set $1 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -11598,15 +11620,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - i64.const 0 - local.set $1 - loop $loop|4 - local.get $1 - i64.const 50 - i64.lt_u - i32.eqz - br_if $break|4 + i64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + i64.const 50 + i64.lt_u + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -11656,9 +11678,8 @@ i64.const 1 i64.add local.set $1 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -11769,6 +11790,7 @@ ) (func $~lib/set/Set#find (; 171 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -11780,11 +11802,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=4 i32.const 1 @@ -11809,9 +11831,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -11841,9 +11862,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 f32) - (local $12 i32) + (local $11 i32) + (local $12 f32) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -11877,51 +11899,51 @@ i32.add local.set $7 local.get $5 - local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + local.set $8 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=4 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 f32.load f32.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 f32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 i32.reinterpret_f32 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=4 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -11933,26 +11955,25 @@ i32.const 8 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -11960,19 +11981,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -12157,6 +12178,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -12169,22 +12191,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 8 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=4 i32.const 1 i32.and @@ -12192,12 +12214,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 f32.load call $~lib/array/Array#__set end @@ -12205,9 +12227,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -12324,18 +12345,19 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - f32.const 0 - local.set $1 - loop $loop|0 - local.get $1 - f32.const 100 - f32.lt - i32.eqz - br_if $break|0 + f32.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + f32.const 100 + f32.lt + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -12368,9 +12390,8 @@ f32.const 1 f32.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -12385,15 +12406,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - f32.const 50 - local.set $1 - loop $loop|1 - local.get $1 - f32.const 100 - f32.lt - i32.eqz - br_if $break|1 + f32.const 50 + local.set $1 + loop $for-loop|1 + local.get $1 + f32.const 100 + f32.lt + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -12425,9 +12446,8 @@ f32.const 1 f32.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -12448,16 +12468,16 @@ i32.const 0 call $~lib/set/Set#constructor local.set $3 - block $break|2 - i32.const 0 - local.set $4 - loop $loop|2 - local.get $4 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $4 + loop $for-loop|2 + local.get $4 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $2 local.get $4 @@ -12481,9 +12501,8 @@ i32.const 1 i32.add local.set $4 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $3 call $~lib/set/Set#get:size @@ -12499,15 +12518,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - f32.const 0 - local.set $1 - loop $loop|3 - local.get $1 - f32.const 50 - f32.lt - i32.eqz - br_if $break|3 + f32.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + f32.const 50 + f32.lt + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -12541,9 +12560,8 @@ f32.const 1 f32.add local.set $1 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -12558,15 +12576,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - f32.const 0 - local.set $1 - loop $loop|4 - local.get $1 - f32.const 50 - f32.lt - i32.eqz - br_if $break|4 + f32.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + f32.const 50 + f32.lt + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -12616,9 +12634,8 @@ f32.const 1 f32.add local.set $1 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -12729,6 +12746,7 @@ ) (func $~lib/set/Set#find (; 187 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -12740,11 +12758,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -12769,9 +12787,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -12801,9 +12818,10 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 f64) - (local $12 i32) + (local $11 i32) + (local $12 f64) (local $13 i32) + (local $14 i32) local.get $1 i32.const 1 i32.add @@ -12838,50 +12856,50 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 f64.load f64.store block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 + local.get $10 f64.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 i64.reinterpret_f64 call $~lib/util/hash/hash64 br $~lib/util/hash/HASH|inlined.2 end local.get $1 i32.and - local.set $12 + local.set $13 local.get $3 - local.get $12 + local.get $13 i32.const 4 i32.mul i32.add - local.set $13 - local.get $10 - local.get $13 + local.set $14 + local.get $11 + local.get $14 i32.load i32.store offset=8 - local.get $13 + local.get $14 local.get $8 i32.store local.get $8 @@ -12893,26 +12911,25 @@ i32.const 16 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $13 + local.tee $14 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/pure/__retain - local.set $10 - local.get $13 + local.set $11 + local.get $14 call $~lib/rt/pure/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -12920,19 +12937,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $12 + local.tee $13 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $12 - local.get $10 + local.set $13 + local.get $11 call $~lib/rt/pure/__release end - local.get $12 + local.get $13 i32.store offset=8 local.get $0 local.get $4 @@ -13117,6 +13134,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.load offset=8 local.set $1 @@ -13129,22 +13147,22 @@ local.set $3 i32.const 0 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + local.get $2 + i32.lt_s + local.set $6 + local.get $6 + if local.get $1 local.get $5 i32.const 16 i32.mul i32.add - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.load offset=8 i32.const 1 i32.and @@ -13152,12 +13170,12 @@ if local.get $3 local.get $4 - local.tee $7 + local.tee $8 i32.const 1 i32.add local.set $4 + local.get $8 local.get $7 - local.get $6 f64.load call $~lib/array/Array#__set end @@ -13165,9 +13183,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 ) @@ -13284,18 +13301,19 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) i32.const 0 call $~lib/set/Set#constructor local.set $0 - block $break|0 - f64.const 0 - local.set $1 - loop $loop|0 - local.get $1 - f64.const 100 - f64.lt - i32.eqz - br_if $break|0 + f64.const 0 + local.set $1 + loop $for-loop|0 + local.get $1 + f64.const 100 + f64.lt + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -13328,9 +13346,8 @@ f64.const 1 f64.add local.set $1 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -13345,15 +13362,15 @@ call $~lib/builtins/abort unreachable end - block $break|1 - f64.const 50 - local.set $1 - loop $loop|1 - local.get $1 - f64.const 100 - f64.lt - i32.eqz - br_if $break|1 + f64.const 50 + local.set $1 + loop $for-loop|1 + local.get $1 + f64.const 100 + f64.lt + local.set $2 + local.get $2 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -13385,9 +13402,8 @@ f64.const 1 f64.add local.set $1 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -13408,16 +13424,16 @@ i32.const 0 call $~lib/set/Set#constructor local.set $3 - block $break|2 - i32.const 0 - local.set $4 - loop $loop|2 - local.get $4 - local.get $2 - call $~lib/array/Array#get:length - i32.lt_s - i32.eqz - br_if $break|2 + i32.const 0 + local.set $4 + loop $for-loop|2 + local.get $4 + local.get $2 + call $~lib/array/Array#get:length + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $2 local.get $4 @@ -13441,9 +13457,8 @@ i32.const 1 i32.add local.set $4 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $3 call $~lib/set/Set#get:size @@ -13459,15 +13474,15 @@ call $~lib/builtins/abort unreachable end - block $break|3 - f64.const 0 - local.set $1 - loop $loop|3 - local.get $1 - f64.const 50 - f64.lt - i32.eqz - br_if $break|3 + f64.const 0 + local.set $1 + loop $for-loop|3 + local.get $1 + f64.const 50 + f64.lt + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -13501,9 +13516,8 @@ f64.const 1 f64.add local.set $1 - br $loop|3 + br $for-loop|3 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -13518,15 +13532,15 @@ call $~lib/builtins/abort unreachable end - block $break|4 - f64.const 0 - local.set $1 - loop $loop|4 - local.get $1 - f64.const 50 - f64.lt - i32.eqz - br_if $break|4 + f64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + f64.const 50 + f64.lt + local.set $4 + local.get $4 + if local.get $0 local.get $1 call $~lib/set/Set#has @@ -13576,9 +13590,8 @@ f64.const 1 f64.add local.set $1 - br $loop|4 + br $for-loop|4 end - unreachable end local.get $0 call $~lib/set/Set#get:size @@ -13627,7 +13640,7 @@ call $std/set/testNumeric call $std/set/testNumeric ) - (func $start (; 202 ;) + (func $~start (; 202 ;) call $start:std/set ) (func $~lib/rt/pure/__visit (; 203 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index f3ceee7040..916f5a9d87 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -28,7 +28,7 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/array/Array#__get (; 1 ;) (param $0 i32) (result i32) local.get $0 i32.const 76 @@ -159,7 +159,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -185,10 +185,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -209,11 +209,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -234,7 +234,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -246,7 +246,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -267,10 +267,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -286,11 +286,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -304,7 +304,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -596,7 +596,7 @@ local.get $2 i32.sub local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 32 i32.ge_u @@ -627,7 +627,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -1025,7 +1025,7 @@ unreachable end ) - (func $start (; 16 ;) + (func $~start (; 16 ;) call $start:std/static-array ) ) diff --git a/tests/compiler/std/static-array.untouched.wat b/tests/compiler/std/static-array.untouched.wat index 3488d7cc68..18506aa88f 100644 --- a/tests/compiler/std/static-array.untouched.wat +++ b/tests/compiler/std/static-array.untouched.wat @@ -36,7 +36,7 @@ (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 544)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/array/Array#get:length (; 1 ;) (param $0 i32) (result i32) local.get $0 i32.load offset=12 @@ -181,39 +181,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -221,13 +221,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -268,9 +268,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -427,13 +426,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -508,9 +507,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -549,13 +547,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -630,9 +628,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -657,13 +654,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -738,9 +735,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -1210,6 +1206,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -1256,13 +1253,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1273,30 +1270,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -1313,37 +1309,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -1354,15 +1348,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -1379,17 +1373,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -1402,16 +1395,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -1423,9 +1415,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -1560,6 +1551,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -1778,13 +1770,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -1811,9 +1803,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -2408,7 +2399,7 @@ unreachable end ) - (func $start (; 30 ;) + (func $~start (; 30 ;) call $start:std/static-array ) ) diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index 7df6724850..72bb3817d1 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -39,7 +39,7 @@ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/pure/increment (; 5 ;) (param $0 i32) (local $1 i32) local.get $0 @@ -734,7 +734,7 @@ i32.const 22768 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -748,7 +748,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -768,14 +768,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 21200 @@ -1061,7 +1061,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1120,14 +1120,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1139,12 +1139,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1163,7 +1163,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1420,7 +1420,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1446,10 +1446,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1470,11 +1470,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1495,7 +1495,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1507,7 +1507,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1528,10 +1528,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1547,11 +1547,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1565,7 +1565,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1993,7 +1993,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -2014,20 +2014,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $0 i32.load16_u local.tee $3 @@ -2040,18 +2038,16 @@ local.get $4 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -2275,80 +2271,81 @@ local.get $1 select local.set $2 - loop $continue|0 - block $break|0 - local.get $0 - local.get $4 - i32.ge_u - br_if $break|0 - local.get $0 - i32.load16_u - local.tee $3 - i32.const 128 - i32.lt_u - if - local.get $3 - i32.eqz - i32.const 0 - local.get $1 - select - br_if $break|0 - local.get $2 - i32.const 1 - i32.add - local.set $2 - else - local.get $3 - i32.const 2048 + loop $while-continue|0 + local.get $0 + local.get $4 + i32.lt_u + if + block $while-break|0 + local.get $0 + i32.load16_u + local.tee $3 + i32.const 128 i32.lt_u if + local.get $3 + i32.eqz + i32.const 0 + local.get $1 + select + br_if $while-break|0 local.get $2 - i32.const 2 + i32.const 1 i32.add local.set $2 else - local.get $0 - i32.const 2 - i32.add - local.get $4 - i32.lt_u - i32.const 0 local.get $3 - i32.const 64512 - i32.and - i32.const 55296 - i32.eq - select + i32.const 2048 + i32.lt_u if + local.get $2 + i32.const 2 + i32.add + local.set $2 + else local.get $0 - i32.load16_u offset=2 + i32.const 2 + i32.add + local.get $4 + i32.lt_u + i32.const 0 + local.get $3 i32.const 64512 i32.and - i32.const 56320 + i32.const 55296 i32.eq + select if local.get $0 - i32.const 4 - i32.add - local.set $0 - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 + i32.load16_u offset=2 + i32.const 64512 + i32.and + i32.const 56320 + i32.eq + if + local.get $0 + i32.const 4 + i32.add + local.set $0 + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $while-continue|0 + end end + local.get $2 + i32.const 3 + i32.add + local.set $2 end - local.get $2 - i32.const 3 - i32.add - local.set $2 end + local.get $0 + i32.const 2 + i32.add + local.set $0 + br $while-continue|0 end - local.get $0 - i32.const 2 - i32.add - local.set $0 - br $continue|0 end end local.get $2 @@ -2554,164 +2551,165 @@ call $~lib/rt/tlsf/__alloc local.tee $5 local.set $2 - loop $continue|0 - block $break|0 - local.get $0 - local.get $4 - i32.ge_u - br_if $break|0 - local.get $0 - i32.load16_u - local.tee $3 - i32.const 128 - i32.lt_u - if - local.get $3 - i32.eqz - i32.const 0 - local.get $1 - select - br_if $break|0 - local.get $2 - local.get $3 - i32.store8 - local.get $2 - i32.const 1 - i32.add - local.set $2 - else - local.get $3 - i32.const 2048 + loop $while-continue|0 + local.get $0 + local.get $4 + i32.lt_u + if + block $while-break|0 + local.get $0 + i32.load16_u + local.tee $3 + i32.const 128 i32.lt_u if - local.get $2 local.get $3 - i32.const 6 - i32.shr_u - i32.const 192 - i32.or - i32.store8 + i32.eqz + i32.const 0 + local.get $1 + select + br_if $while-break|0 local.get $2 local.get $3 - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=1 + i32.store8 local.get $2 - i32.const 2 + i32.const 1 i32.add local.set $2 else - local.get $0 - i32.const 2 - i32.add - local.get $4 - i32.lt_u - i32.const 0 local.get $3 - i32.const 64512 - i32.and - i32.const 55296 - i32.eq - select + i32.const 2048 + i32.lt_u if + local.get $2 + local.get $3 + i32.const 6 + i32.shr_u + i32.const 192 + i32.or + i32.store8 + local.get $2 + local.get $3 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=1 + local.get $2 + i32.const 2 + i32.add + local.set $2 + else local.get $0 - i32.load16_u offset=2 - local.tee $6 + i32.const 2 + i32.add + local.get $4 + i32.lt_u + i32.const 0 + local.get $3 i32.const 64512 i32.and - i32.const 56320 + i32.const 55296 i32.eq + select if - local.get $2 - local.get $3 - i32.const 1023 - i32.and - i32.const 10 - i32.shl - i32.const 65536 - i32.add - local.get $6 - i32.const 1023 - i32.and - i32.or - local.tee $3 - i32.const 18 - i32.shr_u - i32.const 240 - i32.or - i32.store8 - local.get $2 - local.get $3 - i32.const 12 - i32.shr_u - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=1 - local.get $2 - local.get $3 - i32.const 6 - i32.shr_u - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=2 - local.get $2 - local.get $3 - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=3 local.get $0 - i32.const 4 - i32.add - local.set $0 - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 + i32.load16_u offset=2 + local.tee $6 + i32.const 64512 + i32.and + i32.const 56320 + i32.eq + if + local.get $2 + local.get $3 + i32.const 1023 + i32.and + i32.const 10 + i32.shl + i32.const 65536 + i32.add + local.get $6 + i32.const 1023 + i32.and + i32.or + local.tee $3 + i32.const 18 + i32.shr_u + i32.const 240 + i32.or + i32.store8 + local.get $2 + local.get $3 + i32.const 12 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=1 + local.get $2 + local.get $3 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=2 + local.get $2 + local.get $3 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=3 + local.get $0 + i32.const 4 + i32.add + local.set $0 + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $while-continue|0 + end end + local.get $2 + local.get $3 + i32.const 12 + i32.shr_u + i32.const 224 + i32.or + i32.store8 + local.get $2 + local.get $3 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=1 + local.get $2 + local.get $3 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=2 + local.get $2 + i32.const 3 + i32.add + local.set $2 end - local.get $2 - local.get $3 - i32.const 12 - i32.shr_u - i32.const 224 - i32.or - i32.store8 - local.get $2 - local.get $3 - i32.const 6 - i32.shr_u - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=1 - local.get $2 - local.get $3 - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=2 - local.get $2 - i32.const 3 - i32.add - local.set $2 end + local.get $0 + i32.const 2 + i32.add + local.set $0 + br $while-continue|0 end - local.get $0 - i32.const 2 - i32.add - local.set $0 - br $continue|0 end end local.get $1 @@ -3074,68 +3072,31 @@ call $~lib/rt/tlsf/__alloc local.tee $6 local.set $3 - loop $continue|0 - block $break|0 - local.get $0 - local.get $5 - i32.ge_u - br_if $break|0 - local.get $0 - local.tee $1 - i32.const 1 - i32.add - local.set $0 - local.get $1 - i32.load8_u - local.tee $4 - i32.const 128 - i32.lt_u - if - local.get $4 - i32.eqz - i32.const 0 - local.get $2 - select - br_if $break|0 - local.get $3 - local.get $4 - i32.store16 - local.get $3 - i32.const 2 + loop $while-continue|0 + local.get $0 + local.get $5 + i32.lt_u + if + block $while-break|0 + local.get $0 + local.tee $1 + i32.const 1 i32.add - local.set $3 - else - local.get $4 - i32.const 224 + local.set $0 + local.get $1 + i32.load8_u + local.tee $4 + i32.const 128 i32.lt_u - i32.const 0 - local.get $4 - i32.const 191 - i32.gt_u - select if - local.get $5 - local.get $0 - i32.sub - i32.const 1 - i32.lt_u - br_if $break|0 - local.get $0 - local.tee $1 - i32.const 1 - i32.add - local.set $0 + local.get $4 + i32.eqz + i32.const 0 + local.get $2 + select + br_if $while-break|0 local.get $3 - local.get $1 - i32.load8_u - i32.const 63 - i32.and local.get $4 - i32.const 31 - i32.and - i32.const 6 - i32.shl - i32.or i32.store16 local.get $3 i32.const 2 @@ -3143,105 +3104,143 @@ local.set $3 else local.get $4 - i32.const 365 + i32.const 224 i32.lt_u i32.const 0 local.get $4 - i32.const 239 + i32.const 191 i32.gt_u select - if (result i32) + if local.get $5 local.get $0 i32.sub - i32.const 3 + i32.const 1 i32.lt_u - br_if $break|0 - local.get $3 - local.get $0 - i32.load8_u offset=2 - i32.const 63 - i32.and - local.get $4 - i32.const 7 - i32.and - i32.const 18 - i32.shl - local.get $0 - i32.load8_u - i32.const 63 - i32.and - i32.const 12 - i32.shl - i32.or + br_if $while-break|0 local.get $0 - i32.load8_u offset=1 - i32.const 63 - i32.and - i32.const 6 - i32.shl - i32.or - i32.or - i32.const 65536 - i32.sub local.tee $1 - i32.const 10 - i32.shr_u - i32.const 55296 - i32.or - i32.store16 - local.get $3 - local.get $1 - i32.const 1023 - i32.and - i32.const 56320 - i32.or - i32.store16 offset=2 - local.get $3 - i32.const 4 - i32.add - local.set $3 - local.get $0 - i32.const 3 + i32.const 1 i32.add - else - local.get $5 - local.get $0 - i32.sub - i32.const 2 - i32.lt_u - br_if $break|0 + local.set $0 local.get $3 - local.get $0 - i32.load8_u offset=1 + local.get $1 + i32.load8_u i32.const 63 i32.and local.get $4 - i32.const 15 - i32.and - i32.const 12 - i32.shl - local.get $0 - i32.load8_u - i32.const 63 + i32.const 31 i32.and i32.const 6 i32.shl i32.or - i32.or i32.store16 local.get $3 i32.const 2 i32.add local.set $3 - local.get $0 - i32.const 2 - i32.add + else + local.get $4 + i32.const 365 + i32.lt_u + i32.const 0 + local.get $4 + i32.const 239 + i32.gt_u + select + if (result i32) + local.get $5 + local.get $0 + i32.sub + i32.const 3 + i32.lt_u + br_if $while-break|0 + local.get $3 + local.get $0 + i32.load8_u offset=2 + i32.const 63 + i32.and + local.get $4 + i32.const 7 + i32.and + i32.const 18 + i32.shl + local.get $0 + i32.load8_u + i32.const 63 + i32.and + i32.const 12 + i32.shl + i32.or + local.get $0 + i32.load8_u offset=1 + i32.const 63 + i32.and + i32.const 6 + i32.shl + i32.or + i32.or + i32.const 65536 + i32.sub + local.tee $1 + i32.const 10 + i32.shr_u + i32.const 55296 + i32.or + i32.store16 + local.get $3 + local.get $1 + i32.const 1023 + i32.and + i32.const 56320 + i32.or + i32.store16 offset=2 + local.get $3 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 3 + i32.add + else + local.get $5 + local.get $0 + i32.sub + i32.const 2 + i32.lt_u + br_if $while-break|0 + local.get $3 + local.get $0 + i32.load8_u offset=1 + i32.const 63 + i32.and + local.get $4 + i32.const 15 + i32.and + i32.const 12 + i32.shl + local.get $0 + i32.load8_u + i32.const 63 + i32.and + i32.const 6 + i32.shl + i32.or + i32.or + i32.store16 + local.get $3 + i32.const 2 + i32.add + local.set $3 + local.get $0 + i32.const 2 + i32.add + end + local.set $0 end - local.set $0 end + br $while-continue|0 end - br $continue|0 end end local.get $6 @@ -3641,7 +3640,7 @@ local.get $3 call $~lib/rt/pure/__release ) - (func $start (; 53 ;) + (func $~start (; 53 ;) i32.const 28 i32.load i32.const 12 diff --git a/tests/compiler/std/string-encoding.untouched.wat b/tests/compiler/std/string-encoding.untouched.wat index 8d2002473c..22582ba2e4 100644 --- a/tests/compiler/std/string-encoding.untouched.wat +++ b/tests/compiler/std/string-encoding.untouched.wat @@ -46,7 +46,7 @@ (global $~lib/rt/__rtti_base i32 (i32.const 21168)) (global $~lib/heap/__heap_base i32 (i32.const 21196)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/pure/increment (; 5 ;) (param $0 i32) (local $1 i32) local.get $0 @@ -877,6 +877,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -930,71 +932,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1354,34 +1354,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1390,23 +1391,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1415,11 +1416,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1431,21 +1432,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1453,39 +1453,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1794,39 +1792,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1834,13 +1832,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1881,9 +1879,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2040,13 +2037,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2121,9 +2118,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2162,13 +2158,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2243,9 +2239,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2270,13 +2265,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2351,9 +2346,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2823,6 +2817,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2869,13 +2864,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2886,30 +2881,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2926,37 +2920,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2967,15 +2959,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2992,17 +2984,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3015,16 +3006,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3036,9 +3026,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3551,6 +3540,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -3585,15 +3575,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -3610,39 +3600,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $9 + local.get $10 return end local.get $5 @@ -3653,17 +3645,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 40 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -3917,6 +3908,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -3936,45 +3928,33 @@ i32.const 0 end local.set $4 - block $break|0 - loop $continue|0 + block $while-break|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_u - i32.eqz - br_if $break|0 - local.get $2 - i32.load16_u local.set $5 local.get $5 - i32.const 128 - i32.lt_u if - local.get $1 - if (result i32) - local.get $5 - i32.eqz - else - i32.const 0 - end - if - br $break|0 - end - local.get $4 - i32.const 1 - i32.add - local.set $4 local.get $2 - i32.const 2 - i32.add - local.set $2 - else - local.get $5 - i32.const 2048 + i32.load16_u + local.set $6 + local.get $6 + i32.const 128 i32.lt_u if + local.get $1 + if (result i32) + local.get $6 + i32.eqz + else + i32.const 0 + end + if + br $while-break|0 + end local.get $4 - i32.const 2 + i32.const 1 i32.add local.set $4 local.get $2 @@ -3982,52 +3962,65 @@ i32.add local.set $2 else - local.get $5 - i32.const 64512 - i32.and - i32.const 55296 - i32.eq - if (result i32) + local.get $6 + i32.const 2048 + i32.lt_u + if + local.get $4 + i32.const 2 + i32.add + local.set $4 local.get $2 i32.const 2 i32.add - local.get $3 - i32.lt_u + local.set $2 else - i32.const 0 - end - if - local.get $2 - i32.load16_u offset=2 + local.get $6 i32.const 64512 i32.and - i32.const 56320 + i32.const 55296 i32.eq - if + if (result i32) local.get $2 - i32.const 4 - i32.add - local.set $2 - local.get $4 - i32.const 4 + i32.const 2 i32.add - local.set $4 - br $continue|0 + local.get $3 + i32.lt_u + else + i32.const 0 + end + if + local.get $2 + i32.load16_u offset=2 + i32.const 64512 + i32.and + i32.const 56320 + i32.eq + if + local.get $2 + i32.const 4 + i32.add + local.set $2 + local.get $4 + i32.const 4 + i32.add + local.set $4 + br $while-continue|0 + end end + local.get $2 + i32.const 2 + i32.add + local.set $2 + local.get $4 + i32.const 3 + i32.add + local.set $4 end - local.get $2 - i32.const 2 - i32.add - local.set $2 - local.get $4 - i32.const 3 - i32.add - local.set $4 end + br $while-continue|0 end - br $continue|0 end - unreachable end local.get $4 local.set $5 @@ -4245,6 +4238,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -4265,62 +4259,36 @@ local.set $4 local.get $4 local.set $5 - block $break|0 - loop $continue|0 + block $while-break|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_u - i32.eqz - br_if $break|0 - local.get $2 - i32.load16_u local.set $6 local.get $6 - i32.const 128 - i32.lt_u if - local.get $1 - if (result i32) - local.get $6 - i32.eqz - else - i32.const 0 - end - if - br $break|0 - end - local.get $5 - local.get $6 - i32.store8 - local.get $5 - i32.const 1 - i32.add - local.set $5 local.get $2 - i32.const 2 - i32.add - local.set $2 - else - local.get $6 - i32.const 2048 + i32.load16_u + local.set $7 + local.get $7 + i32.const 128 i32.lt_u if + local.get $1 + if (result i32) + local.get $7 + i32.eqz + else + i32.const 0 + end + if + br $while-break|0 + end local.get $5 - local.get $6 - i32.const 6 - i32.shr_u - i32.const 192 - i32.or + local.get $7 i32.store8 local.get $5 - local.get $6 - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=1 - local.get $5 - i32.const 2 + i32.const 1 i32.add local.set $5 local.get $2 @@ -4328,121 +4296,148 @@ i32.add local.set $2 else - local.get $6 - i32.const 64512 - i32.and - i32.const 55296 - i32.eq - if (result i32) + local.get $7 + i32.const 2048 + i32.lt_u + if + local.get $5 + local.get $7 + i32.const 6 + i32.shr_u + i32.const 192 + i32.or + i32.store8 + local.get $5 + local.get $7 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=1 + local.get $5 + i32.const 2 + i32.add + local.set $5 local.get $2 i32.const 2 i32.add - local.get $3 - i32.lt_u + local.set $2 else - i32.const 0 - end - if - local.get $2 - i32.load16_u offset=2 - local.set $7 local.get $7 i32.const 64512 i32.and - i32.const 56320 + i32.const 55296 i32.eq - if - i32.const 65536 - local.get $6 - i32.const 1023 - i32.and - i32.const 10 - i32.shl - i32.add - local.get $7 - i32.const 1023 - i32.and - i32.or - local.set $6 - local.get $5 - local.get $6 - i32.const 18 - i32.shr_u - i32.const 240 - i32.or - i32.store8 - local.get $5 - local.get $6 - i32.const 12 - i32.shr_u - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=1 - local.get $5 - local.get $6 - i32.const 6 - i32.shr_u - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=2 - local.get $5 - local.get $6 - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=3 + if (result i32) local.get $2 - i32.const 4 - i32.add - local.set $2 - local.get $5 - i32.const 4 + i32.const 2 i32.add - local.set $5 - br $continue|0 + local.get $3 + i32.lt_u + else + i32.const 0 end - end - local.get $5 - local.get $6 - i32.const 12 - i32.shr_u - i32.const 224 - i32.or - i32.store8 - local.get $5 - local.get $6 - i32.const 6 - i32.shr_u - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=1 - local.get $5 - local.get $6 - i32.const 63 - i32.and - i32.const 128 - i32.or - i32.store8 offset=2 - local.get $2 - i32.const 2 - i32.add - local.set $2 - local.get $5 - i32.const 3 - i32.add - local.set $5 + if + local.get $2 + i32.load16_u offset=2 + local.set $8 + local.get $8 + i32.const 64512 + i32.and + i32.const 56320 + i32.eq + if + i32.const 65536 + local.get $7 + i32.const 1023 + i32.and + i32.const 10 + i32.shl + i32.add + local.get $8 + i32.const 1023 + i32.and + i32.or + local.set $7 + local.get $5 + local.get $7 + i32.const 18 + i32.shr_u + i32.const 240 + i32.or + i32.store8 + local.get $5 + local.get $7 + i32.const 12 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=1 + local.get $5 + local.get $7 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=2 + local.get $5 + local.get $7 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=3 + local.get $2 + i32.const 4 + i32.add + local.set $2 + local.get $5 + i32.const 4 + i32.add + local.set $5 + br $while-continue|0 + end + end + local.get $5 + local.get $7 + i32.const 12 + i32.shr_u + i32.const 224 + i32.or + i32.store8 + local.get $5 + local.get $7 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=1 + local.get $5 + local.get $7 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=2 + local.get $2 + i32.const 2 + i32.add + local.set $2 + local.get $5 + i32.const 3 + i32.add + local.set $5 + end end + br $while-continue|0 end - br $continue|0 end - unreachable end local.get $1 if @@ -4820,6 +4815,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 local.set $3 local.get $0 @@ -4846,90 +4842,50 @@ local.set $5 local.get $5 local.set $6 - block $break|0 - loop $continue|0 + block $while-break|0 + loop $while-continue|0 local.get $3 local.get $4 i32.lt_u - i32.eqz - br_if $break|0 - local.get $3 - local.tee $7 - i32.const 1 - i32.add - local.set $3 - local.get $7 - i32.load8_u local.set $7 local.get $7 - i32.const 128 - i32.lt_u if - local.get $2 - if (result i32) - local.get $7 - i32.eqz - else - i32.const 0 - end - if - br $break|0 - end - local.get $6 - local.get $7 - i32.store16 - local.get $6 - i32.const 2 + local.get $3 + local.tee $8 + i32.const 1 i32.add - local.set $6 - else - local.get $7 - i32.const 191 - i32.gt_u - if (result i32) - local.get $7 - i32.const 224 - i32.lt_u - else - i32.const 0 - end + local.set $3 + local.get $8 + i32.load8_u + local.set $8 + local.get $8 + i32.const 128 + i32.lt_u if - local.get $4 - local.get $3 - i32.sub - i32.const 1 - i32.lt_u + local.get $2 + if (result i32) + local.get $8 + i32.eqz + else + i32.const 0 + end if - br $break|0 + br $while-break|0 end local.get $6 - local.get $7 - i32.const 31 - i32.and - i32.const 6 - i32.shl - local.get $3 - local.tee $8 - i32.const 1 - i32.add - local.set $3 local.get $8 - i32.load8_u - i32.const 63 - i32.and - i32.or i32.store16 local.get $6 i32.const 2 i32.add local.set $6 else - local.get $7 - i32.const 239 + local.get $8 + i32.const 191 i32.gt_u if (result i32) - local.get $7 - i32.const 365 + local.get $8 + i32.const 224 i32.lt_u else i32.const 0 @@ -4938,102 +4894,143 @@ local.get $4 local.get $3 i32.sub - i32.const 3 + i32.const 1 i32.lt_u if - br $break|0 + br $while-break|0 end - local.get $7 - i32.const 7 - i32.and - i32.const 18 - i32.shl - local.get $3 - i32.load8_u - i32.const 63 - i32.and - i32.const 12 - i32.shl - i32.or - local.get $3 - i32.load8_u offset=1 - i32.const 63 + local.get $6 + local.get $8 + i32.const 31 i32.and i32.const 6 i32.shl - i32.or local.get $3 - i32.load8_u offset=2 - i32.const 63 - i32.and - i32.or - i32.const 65536 - i32.sub - local.set $7 - local.get $3 - i32.const 3 + local.tee $9 + i32.const 1 i32.add local.set $3 - local.get $6 - i32.const 55296 - local.get $7 - i32.const 10 - i32.shr_u - i32.or - i32.store16 - local.get $6 - i32.const 56320 - local.get $7 - i32.const 1023 - i32.and - i32.or - i32.store16 offset=2 - local.get $6 - i32.const 4 - i32.add - local.set $6 - else - local.get $4 - local.get $3 - i32.sub - i32.const 2 - i32.lt_u - if - br $break|0 - end - local.get $6 - local.get $7 - i32.const 15 - i32.and - i32.const 12 - i32.shl - local.get $3 + local.get $9 i32.load8_u i32.const 63 i32.and - i32.const 6 - i32.shl - i32.or - local.get $3 - i32.load8_u offset=1 - i32.const 63 - i32.and i32.or i32.store16 - local.get $3 - i32.const 2 - i32.add - local.set $3 local.get $6 i32.const 2 i32.add local.set $6 + else + local.get $8 + i32.const 239 + i32.gt_u + if (result i32) + local.get $8 + i32.const 365 + i32.lt_u + else + i32.const 0 + end + if + local.get $4 + local.get $3 + i32.sub + i32.const 3 + i32.lt_u + if + br $while-break|0 + end + local.get $8 + i32.const 7 + i32.and + i32.const 18 + i32.shl + local.get $3 + i32.load8_u + i32.const 63 + i32.and + i32.const 12 + i32.shl + i32.or + local.get $3 + i32.load8_u offset=1 + i32.const 63 + i32.and + i32.const 6 + i32.shl + i32.or + local.get $3 + i32.load8_u offset=2 + i32.const 63 + i32.and + i32.or + i32.const 65536 + i32.sub + local.set $8 + local.get $3 + i32.const 3 + i32.add + local.set $3 + local.get $6 + i32.const 55296 + local.get $8 + i32.const 10 + i32.shr_u + i32.or + i32.store16 + local.get $6 + i32.const 56320 + local.get $8 + i32.const 1023 + i32.and + i32.or + i32.store16 offset=2 + local.get $6 + i32.const 4 + i32.add + local.set $6 + else + local.get $4 + local.get $3 + i32.sub + i32.const 2 + i32.lt_u + if + br $while-break|0 + end + local.get $6 + local.get $8 + i32.const 15 + i32.and + i32.const 12 + i32.shl + local.get $3 + i32.load8_u + i32.const 63 + i32.and + i32.const 6 + i32.shl + i32.or + local.get $3 + i32.load8_u offset=1 + i32.const 63 + i32.and + i32.or + i32.store16 + local.get $3 + i32.const 2 + i32.add + local.set $3 + local.get $6 + i32.const 2 + i32.add + local.set $6 + end end end + br $while-continue|0 end - br $continue|0 end - unreachable end local.get $5 local.get $6 @@ -5483,7 +5480,7 @@ i32.const 13808 call $std/string-encoding/testLarge ) - (func $start (; 57 ;) + (func $~start (; 57 ;) call $start:std/string-encoding ) (func $~lib/rt/pure/__visit (; 58 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index c6adfaa020..9df5106f8f 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -500,7 +500,7 @@ (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/util/string/__fixmulShift (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0)) @@ -508,8 +508,9 @@ (global $~lib/util/number/_K (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "getString" (func $std/string/getString)) (func $~lib/rt/pure/increment (; 8 ;) (param $0 i32) @@ -1206,7 +1207,7 @@ i32.const 29280 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -1220,7 +1221,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -1240,14 +1241,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 27712 @@ -1533,7 +1534,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1592,14 +1593,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1611,12 +1612,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1635,7 +1636,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1892,7 +1893,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1918,10 +1919,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1942,11 +1943,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1967,7 +1968,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1979,7 +1980,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -2000,10 +2001,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -2019,11 +2020,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -2037,7 +2038,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -2264,7 +2265,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $1 i64.load local.get $2 @@ -2285,20 +2286,18 @@ local.tee $3 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $3 - local.tee $0 - i32.const 1 - i32.sub - local.set $3 - local.get $0 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + local.tee $0 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + if local.get $1 i32.load16_u local.tee $0 @@ -2311,18 +2310,16 @@ local.get $4 i32.sub return - else - local.get $1 - i32.const 2 - i32.add - local.set $1 - local.get $2 - i32.const 2 - i32.add - local.set $2 - br $continue|1 end - unreachable + local.get $1 + i32.const 2 + i32.add + local.set $1 + local.get $2 + i32.const 2 + i32.add + local.set $2 + br $while-continue|1 end end i32.const 0 @@ -2400,7 +2397,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -2576,7 +2573,7 @@ local.get $4 i32.sub local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.le_s @@ -2586,17 +2583,16 @@ local.get $1 local.get $4 call $~lib/util/string/compareImpl + i32.eqz if - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 - else local.get $2 return end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const -1 @@ -2607,7 +2603,7 @@ local.get $3 i32.mul local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $4 local.get $3 i32.lt_u @@ -2622,7 +2618,7 @@ local.get $4 i32.add local.set $4 - br $continue|0 + br $while-continue|0 end end ) @@ -2825,7 +2821,7 @@ i32.lt_s select local.set $2 - loop $loop|0 + loop $for-loop|0 local.get $2 i32.const 0 i32.ge_s @@ -2835,17 +2831,16 @@ local.get $1 local.get $4 call $~lib/util/string/compareImpl + i32.eqz if - local.get $2 - i32.const 1 - i32.sub - local.set $2 - br $loop|0 - else local.get $2 return end - unreachable + local.get $2 + i32.const 1 + i32.sub + local.set $2 + br $for-loop|0 end end i32.const -1 @@ -2961,7 +2956,7 @@ i32.const 1 i32.shl local.set $2 - loop $continue|0 + loop $while-continue|0 local.get $1 local.get $2 i32.lt_u @@ -2979,7 +2974,7 @@ i32.const 2 i32.add local.set $1 - br $continue|0 + br $while-continue|0 end end local.get $1 @@ -3019,7 +3014,7 @@ i32.shl local.tee $2 local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 if (result i32) local.get $0 @@ -3037,7 +3032,7 @@ i32.const 2 i32.sub local.set $1 - br $continue|0 + br $while-continue|0 end end local.get $1 @@ -3074,7 +3069,7 @@ i32.const 1 i32.shl local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 if (result i32) local.get $0 @@ -3092,10 +3087,10 @@ i32.const 2 i32.sub local.set $1 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $2 local.get $1 i32.lt_u @@ -3117,7 +3112,7 @@ i32.const 2 i32.sub local.set $1 - br $continue|1 + br $while-continue|1 end end local.get $1 @@ -3170,7 +3165,7 @@ local.set $1 f64.const 1 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $1 call $~lib/util/string/isSpace if @@ -3184,7 +3179,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $1 @@ -3302,66 +3297,66 @@ i32.const 10 end local.set $4 - loop $continue|2 - block $break|2 + loop $while-continue|2 + block $while-break|2 local.get $2 local.tee $1 i32.const 1 i32.sub local.set $2 local.get $1 - i32.eqz - br_if $break|2 - local.get $0 - i32.load16_u - local.tee $1 - i32.const 48 - i32.sub - i32.const 10 - i32.lt_u - if (result i32) - local.get $1 + if + local.get $0 + i32.load16_u + local.tee $1 i32.const 48 i32.sub - else - local.get $1 - i32.const 65 - i32.sub - i32.const 25 - i32.le_u + i32.const 10 + i32.lt_u if (result i32) local.get $1 - i32.const 55 + i32.const 48 i32.sub else local.get $1 - i32.const 97 + i32.const 65 i32.sub i32.const 25 - i32.gt_u - br_if $break|2 - local.get $1 - i32.const 87 - i32.sub + i32.le_u + if (result i32) + local.get $1 + i32.const 55 + i32.sub + else + local.get $1 + i32.const 97 + i32.sub + i32.const 25 + i32.gt_u + br_if $while-break|2 + local.get $1 + i32.const 87 + i32.sub + end end + local.tee $1 + local.get $4 + i32.ge_u + br_if $while-break|2 + local.get $5 + local.get $4 + f64.convert_i32_s + f64.mul + local.get $1 + f64.convert_i32_u + f64.add + local.set $5 + local.get $0 + i32.const 2 + i32.add + local.set $0 + br $while-continue|2 end - local.tee $1 - local.get $4 - i32.ge_u - br_if $break|2 - local.get $5 - local.get $4 - f64.convert_i32_s - f64.mul - local.get $1 - f64.convert_i32_u - f64.add - local.set $5 - local.get $0 - i32.const 2 - i32.add - local.set $0 - br $continue|2 end end local.get $3 @@ -3390,7 +3385,7 @@ local.set $0 i32.const 1 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $0 call $~lib/util/string/isSpace if @@ -3404,7 +3399,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $0 @@ -3522,64 +3517,64 @@ i32.const 10 end local.set $4 - loop $continue|2 - block $break|2 + loop $while-continue|2 + block $while-break|2 local.get $2 local.tee $0 i32.const 1 i32.sub local.set $2 local.get $0 - i32.eqz - br_if $break|2 - local.get $1 - i32.load16_u - local.tee $0 - i32.const 48 - i32.sub - i32.const 10 - i32.lt_u - if (result i32) - local.get $0 + if + local.get $1 + i32.load16_u + local.tee $0 i32.const 48 i32.sub - else - local.get $0 - i32.const 65 - i32.sub - i32.const 25 - i32.le_u + i32.const 10 + i32.lt_u if (result i32) local.get $0 - i32.const 55 + i32.const 48 i32.sub else local.get $0 - i32.const 97 + i32.const 65 i32.sub i32.const 25 - i32.gt_u - br_if $break|2 - local.get $0 - i32.const 87 - i32.sub + i32.le_u + if (result i32) + local.get $0 + i32.const 55 + i32.sub + else + local.get $0 + i32.const 97 + i32.sub + i32.const 25 + i32.gt_u + br_if $while-break|2 + local.get $0 + i32.const 87 + i32.sub + end end + local.tee $0 + local.get $4 + i32.ge_u + br_if $while-break|2 + local.get $0 + local.get $4 + local.get $5 + i32.mul + i32.add + local.set $5 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|2 end - local.tee $0 - local.get $4 - i32.ge_u - br_if $break|2 - local.get $0 - local.get $4 - local.get $5 - i32.mul - i32.add - local.set $5 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|2 end end local.get $3 @@ -3608,7 +3603,7 @@ local.set $0 i64.const 1 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $0 call $~lib/util/string/isSpace if @@ -3622,7 +3617,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $0 @@ -3740,66 +3735,66 @@ i32.const 10 end local.set $4 - loop $continue|2 - block $break|2 + loop $while-continue|2 + block $while-break|2 local.get $2 local.tee $0 i32.const 1 i32.sub local.set $2 local.get $0 - i32.eqz - br_if $break|2 - local.get $1 - i32.load16_u - local.tee $0 - i32.const 48 - i32.sub - i32.const 10 - i32.lt_u - if (result i32) - local.get $0 + if + local.get $1 + i32.load16_u + local.tee $0 i32.const 48 i32.sub - else - local.get $0 - i32.const 65 - i32.sub - i32.const 25 - i32.le_u + i32.const 10 + i32.lt_u if (result i32) local.get $0 - i32.const 55 + i32.const 48 i32.sub else local.get $0 - i32.const 97 + i32.const 65 i32.sub i32.const 25 - i32.gt_u - br_if $break|2 - local.get $0 - i32.const 87 - i32.sub + i32.le_u + if (result i32) + local.get $0 + i32.const 55 + i32.sub + else + local.get $0 + i32.const 97 + i32.sub + i32.const 25 + i32.gt_u + br_if $while-break|2 + local.get $0 + i32.const 87 + i32.sub + end end + local.tee $0 + local.get $4 + i32.ge_u + br_if $while-break|2 + local.get $0 + i64.extend_i32_u + local.get $5 + local.get $4 + i64.extend_i32_s + i64.mul + i64.add + local.set $5 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|2 end - local.tee $0 - local.get $4 - i32.ge_u - br_if $break|2 - local.get $0 - i64.extend_i32_u - local.get $5 - local.get $4 - i64.extend_i32_s - i64.mul - i64.add - local.set $5 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|2 end end local.get $3 @@ -3813,7 +3808,7 @@ local.set $1 i32.const 1 local.set $2 - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 0 i32.gt_s @@ -3835,7 +3830,7 @@ local.get $1 i32.mul local.set $1 - br $continue|0 + br $while-continue|0 end end local.get $2 @@ -3923,15 +3918,14 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - (local $7 i64) + (local $6 i64) + (local $7 i32) (local $8 i64) - (local $9 i32) - (local $10 f64) - (local $11 i64) - (local $12 f64) - (local $13 i32) - (local $14 i64) + (local $9 f64) + (local $10 i64) + (local $11 f64) + (local $12 i32) + (local $13 i64) block $folding-inner0 local.get $0 call $~lib/string/String#get:length @@ -3940,13 +3934,13 @@ br_if $folding-inner0 local.get $0 i32.load16_u - local.set $4 + local.set $5 f64.const 1 - local.set $12 - loop $continue|0 + local.set $11 + loop $while-continue|0 local.get $1 if (result i32) - local.get $4 + local.get $5 call $~lib/util/string/isSpace else i32.const 0 @@ -3957,18 +3951,18 @@ i32.add local.tee $0 i32.load16_u - local.set $4 + local.set $5 local.get $1 i32.const 1 i32.sub local.set $1 - br $continue|0 + br $while-continue|0 end end local.get $1 i32.eqz br_if $folding-inner0 - local.get $4 + local.get $5 i32.const 45 i32.eq if (result i32) @@ -3979,14 +3973,14 @@ i32.eqz br_if $folding-inner0 f64.const -1 - local.set $12 + local.set $11 local.get $0 i32.const 2 i32.add local.tee $0 i32.load16_u else - local.get $4 + local.get $5 i32.const 43 i32.eq if (result i32) @@ -4002,10 +3996,10 @@ local.tee $0 i32.load16_u else - local.get $4 + local.get $5 end end - local.tee $4 + local.tee $5 i32.const 73 i32.eq i32.const 0 @@ -4028,27 +4022,27 @@ end if f64.const inf - local.get $12 + local.get $11 f64.copysign return end br $folding-inner0 end - local.get $4 + local.get $5 i32.const 48 i32.sub i32.const 10 i32.ge_u i32.const 0 - local.get $4 + local.get $5 i32.const 46 i32.ne select br_if $folding-inner0 local.get $0 - local.set $9 - loop $continue|1 - local.get $4 + local.set $3 + loop $while-continue|1 + local.get $5 i32.const 48 i32.eq if @@ -4057,12 +4051,12 @@ i32.add local.tee $0 i32.load16_u - local.set $4 + local.set $5 local.get $1 i32.const 1 i32.sub local.set $1 - br $continue|1 + br $while-continue|1 end end local.get $1 @@ -4072,15 +4066,15 @@ f64.const 0 return end - local.get $4 + local.get $5 i32.const 46 i32.eq if - local.get $9 + local.get $3 local.get $0 i32.sub i32.eqz - local.set $9 + local.set $3 local.get $0 i32.const 2 i32.add @@ -4092,15 +4086,15 @@ if (result i32) i32.const 0 else - local.get $9 + local.get $3 end br_if $folding-inner0 i32.const 1 - local.set $13 - loop $loop|2 + local.set $12 + loop $for-loop|2 local.get $0 i32.load16_u - local.tee $4 + local.tee $5 i32.const 48 i32.eq if @@ -4108,15 +4102,15 @@ i32.const 1 i32.sub local.set $1 - local.get $5 + local.get $7 i32.const 1 i32.sub - local.set $5 + local.set $7 local.get $0 i32.const 2 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $1 @@ -4126,107 +4120,107 @@ f64.const 0 return end - local.get $4 + local.get $5 i32.const 48 i32.sub i32.const 10 i32.ge_u i32.const 0 i32.const 0 - local.get $9 - local.get $5 + local.get $3 + local.get $7 select select br_if $folding-inner0 end - local.get $4 + local.get $5 i32.const 48 i32.sub - local.set $6 - loop $loop|3 - block $break|3 - i32.const 1 - local.get $13 - i32.eqz - i32.const 0 - local.get $4 - i32.const 46 - i32.eq - select - local.get $6 - i32.const 10 - i32.lt_u - select - i32.eqz - br_if $break|3 - local.get $6 - i32.const 10 - i32.lt_u - if - local.get $6 - i64.extend_i32_u - local.get $2 - i64.const 10 - i64.mul - i64.add - local.get $6 - i32.eqz - i32.eqz - i64.extend_i32_u - local.get $2 - i64.or - local.get $3 - i32.const 19 - i32.lt_s - select - local.set $2 + local.set $3 + loop $for-loop|3 + i32.const 1 + local.get $12 + i32.eqz + i32.const 0 + local.get $5 + i32.const 46 + i32.eq + select + local.get $3 + i32.const 10 + i32.lt_u + select + if + block $for-break3 local.get $3 + i32.const 10 + i32.lt_u + if + local.get $3 + i64.extend_i32_u + local.get $2 + i64.const 10 + i64.mul + i64.add + local.get $3 + i32.eqz + i32.eqz + i64.extend_i32_u + local.get $2 + i64.or + local.get $4 + i32.const 19 + i32.lt_s + select + local.set $2 + local.get $4 + i32.const 1 + i32.add + local.set $4 + else + local.get $4 + local.set $7 + i32.const 1 + local.set $12 + end + local.get $1 i32.const 1 + i32.sub + local.tee $1 + i32.eqz + br_if $for-break3 + local.get $0 + i32.const 2 i32.add + local.tee $0 + i32.load16_u + local.tee $5 + i32.const 48 + i32.sub local.set $3 - else - local.get $3 - local.set $5 - i32.const 1 - local.set $13 + br $for-loop|3 end - local.get $1 - i32.const 1 - i32.sub - local.tee $1 - i32.eqz - br_if $break|3 - local.get $0 - i32.const 2 - i32.add - local.tee $0 - i32.load16_u - local.tee $4 - i32.const 48 - i32.sub - local.set $6 - br $loop|3 end end block $~lib/util/string/scientific|inlined.0 (result f64) f64.const 0 i32.const 1 - local.get $5 - local.get $3 - local.get $13 + local.get $7 + local.get $4 + local.get $12 select i32.const 19 - local.get $3 + local.get $4 i32.const 19 - local.get $3 + local.get $4 i32.lt_s select i32.sub block $~lib/util/string/parseExp|inlined.0 (result i32) i32.const 1 - local.set $9 + local.set $7 i32.const 0 - local.set $5 + local.set $4 i32.const 0 local.get $0 local.tee $3 @@ -4240,9 +4234,9 @@ local.get $3 i32.const 2 i32.add - local.tee $6 - i32.load16_u local.tee $3 + i32.load16_u + local.tee $0 i32.const 45 i32.eq if (result i32) @@ -4255,14 +4249,14 @@ br_if $~lib/util/string/parseExp|inlined.0 drop i32.const -1 - local.set $9 - local.get $6 + local.set $7 + local.get $3 i32.const 2 i32.add - local.tee $6 + local.tee $3 i32.load16_u else - local.get $3 + local.get $0 i32.const 43 i32.eq if (result i32) @@ -4274,18 +4268,18 @@ i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $6 + local.get $3 i32.const 2 i32.add - local.tee $6 + local.tee $3 i32.load16_u else - local.get $3 + local.get $0 end end - local.set $3 - loop $continue|4 - local.get $3 + local.set $0 + loop $while-continue|4 + local.get $0 i32.const 48 i32.eq if @@ -4297,20 +4291,20 @@ i32.eqz br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $6 + local.get $3 i32.const 2 i32.add - local.tee $6 + local.tee $3 i32.load16_u - local.set $3 - br $continue|4 + local.set $0 + br $while-continue|4 end end - local.get $3 + local.get $0 i32.const 48 i32.sub local.set $0 - loop $loop|5 + loop $for-loop|5 local.get $0 i32.const 10 i32.lt_u @@ -4318,37 +4312,37 @@ local.get $1 select if - local.get $9 + local.get $7 i32.const 3200 i32.mul - local.get $5 + local.get $4 i32.const 3200 i32.ge_s br_if $~lib/util/string/parseExp|inlined.0 drop - local.get $5 + local.get $4 i32.const 10 i32.mul local.get $0 i32.add - local.set $5 + local.set $4 local.get $1 i32.const 1 i32.sub local.set $1 - local.get $6 + local.get $3 i32.const 2 i32.add - local.tee $6 + local.tee $3 i32.load16_u i32.const 48 i32.sub local.set $0 - br $loop|5 + br $for-loop|5 end end - local.get $5 - local.get $9 + local.get $4 + local.get $7 i32.mul end i32.add @@ -4368,7 +4362,7 @@ drop local.get $2 f64.convert_i64_u - local.tee $10 + local.tee $9 local.get $0 i32.eqz br_if $~lib/util/string/scientific|inlined.0 @@ -4382,7 +4376,7 @@ i32.gt_s select if - local.get $10 + local.get $9 i32.const 2340 i32.load local.get $0 @@ -4393,7 +4387,7 @@ i32.add f64.load f64.mul - local.set $10 + local.set $9 i32.const 22 local.set $0 end @@ -4404,9 +4398,9 @@ local.get $0 i32.const 31 i32.shr_s - local.tee $3 + local.tee $4 local.get $0 - local.get $3 + local.get $4 i32.add i32.xor i32.const 22 @@ -4419,7 +4413,7 @@ i32.const 0 i32.gt_s if - local.get $10 + local.get $9 i32.const 2340 i32.load local.get $0 @@ -4430,7 +4424,7 @@ f64.mul br $~lib/util/string/scientific|inlined.0 end - local.get $10 + local.get $9 i32.const 2340 i32.load i32.const 0 @@ -4449,17 +4443,17 @@ local.get $2 local.get $2 i64.clz - local.tee $7 + local.tee $6 i64.shl local.set $2 local.get $0 - local.tee $5 + local.tee $7 i64.extend_i32_s - local.get $7 + local.get $6 i64.sub - local.set $7 - loop $loop|6 - local.get $5 + local.set $6 + loop $for-loop|6 + local.get $7 i32.const -14 i32.le_s if @@ -4470,7 +4464,7 @@ local.get $2 i64.const 6103515625 i64.div_u - local.tee $11 + local.tee $10 i64.clz local.tee $8 i64.const 18 @@ -4480,35 +4474,35 @@ f64.mul f64.nearest i64.trunc_f64_u - local.get $11 + local.get $10 local.get $8 i64.shl i64.add local.set $2 - local.get $7 + local.get $6 local.get $8 i64.sub - local.set $7 - local.get $5 + local.set $6 + local.get $7 i32.const 14 i32.add - local.set $5 - br $loop|6 + local.set $7 + br $for-loop|6 end end local.get $2 i32.const 0 - local.get $5 + local.get $7 i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.tee $11 + local.tee $10 i64.div_u - local.tee $14 + local.tee $13 i64.clz local.set $8 local.get $2 - local.get $11 + local.get $10 i64.rem_u f64.convert_i64_u i64.reinterpret_f64 @@ -4517,16 +4511,16 @@ i64.shl i64.add f64.reinterpret_i64 - local.get $11 + local.get $10 f64.convert_i64_u f64.div i64.trunc_f64_u - local.get $14 + local.get $13 local.get $8 i64.shl i64.add f64.convert_i64_u - local.get $7 + local.get $6 local.get $8 i64.sub i32.wrap_i64 @@ -4535,17 +4529,17 @@ local.get $2 local.get $2 i64.ctz - local.tee $7 + local.tee $6 i64.shr_u local.set $2 local.get $0 - local.tee $3 + local.tee $4 i64.extend_i32_s - local.get $7 + local.get $6 i64.add global.set $~lib/util/string/__fixmulShift - loop $loop|7 - local.get $3 + loop $for-loop|7 + local.get $4 i32.const 13 i32.ge_s if @@ -4560,7 +4554,7 @@ i64.and i64.const 1220703125 i64.mul - local.tee $7 + local.tee $6 i64.const 32 i64.shr_u i64.add @@ -4576,7 +4570,7 @@ global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $7 + local.get $6 local.get $0 i64.extend_i32_u i64.shl @@ -4588,7 +4582,7 @@ local.get $0 i64.extend_i32_u i64.shl - local.get $7 + local.get $6 i64.const 4294967295 i64.and local.get $8 @@ -4596,14 +4590,14 @@ i64.or i64.add local.set $2 - local.get $3 + local.get $4 i32.const 13 i32.sub - local.set $3 - br $loop|7 + local.set $4 + br $for-loop|7 end end - local.get $3 + local.get $4 call $~lib/math/ipow32 local.tee $0 i64.extend_i32_u @@ -4611,7 +4605,7 @@ i64.const 4294967295 i64.and i64.mul - local.set $7 + local.set $6 i64.const 32 local.get $0 i64.extend_i32_u @@ -4619,7 +4613,7 @@ i64.const 32 i64.shr_u i64.mul - local.get $7 + local.get $6 i64.const 32 i64.shr_u i64.add @@ -4635,7 +4629,7 @@ global.get $~lib/util/string/__fixmulShift i64.add global.set $~lib/util/string/__fixmulShift - local.get $7 + local.get $6 local.get $0 i64.extend_i32_u i64.shl @@ -4647,7 +4641,7 @@ local.get $0 i64.extend_i32_u i64.shl - local.get $7 + local.get $6 i64.const 4294967295 i64.and local.get $8 @@ -4661,7 +4655,7 @@ end end end - local.get $12 + local.get $11 f64.copysign return end @@ -5226,7 +5220,7 @@ local.set $1 i32.const 0 local.set $6 - loop $loop|0 + loop $for-loop|0 local.get $6 local.get $4 i32.lt_u @@ -5264,7 +5258,7 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -5285,7 +5279,7 @@ local.get $0 local.get $4 call $~lib/memory/memory.copy - loop $continue|1 + loop $while-continue|1 local.get $0 local.get $6 local.get $5 @@ -5308,7 +5302,7 @@ local.get $9 i32.add local.set $5 - br $continue|1 + br $while-continue|1 end end local.get $1 @@ -5317,7 +5311,7 @@ end local.get $4 local.set $1 - loop $continue|2 + loop $while-continue|2 local.get $0 local.get $6 local.get $5 @@ -5388,7 +5382,7 @@ local.get $10 i32.add local.set $5 - br $continue|2 + br $while-continue|2 end end local.get $7 @@ -5861,7 +5855,7 @@ local.get $2 i32.sub local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 32 i32.ge_u @@ -5892,7 +5886,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -5994,13 +5988,13 @@ if i32.const 1 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 i32.load offset=4 local.get $0 call $~lib/rt/pure/__retain i32.store local.get $1 - call $~lib/rt/pure/__retain return end local.get $0 @@ -6048,7 +6042,7 @@ local.set $5 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s @@ -6078,7 +6072,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $4 @@ -6088,7 +6082,7 @@ call $~lib/rt/__allocArray call $~lib/rt/pure/__retain local.set $3 - loop $continue|1 + loop $while-continue|1 local.get $0 local.get $1 local.get $4 @@ -6135,14 +6129,12 @@ if local.get $3 return - else - local.get $7 - local.get $8 - i32.add - local.set $4 - br $continue|1 end - unreachable + local.get $7 + local.get $8 + i32.add + local.set $4 + br $while-continue|1 end end local.get $4 @@ -6275,7 +6267,7 @@ ) (func $~lib/util/number/utoa_simple (; 80 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -6294,7 +6286,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa32 (; 81 ;) (param $0 i32) (result i32) @@ -6417,7 +6409,7 @@ ) (func $~lib/util/number/utoa_simple (; 84 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i64) - loop $continue|0 + loop $do-continue|0 local.get $1 i64.const 10 i64.div_u @@ -6439,7 +6431,7 @@ local.tee $1 i64.const 0 i64.ne - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/utoa64 (; 85 ;) (param $0 i64) (result i32) @@ -6587,7 +6579,7 @@ i32.const 15492 i32.load local.set $13 - loop $continue|0 + loop $while-continue|0 local.get $4 i32.const 0 i32.gt_s @@ -6745,81 +6737,83 @@ i64.add local.tee $1 local.get $5 - i64.gt_u - br_if $continue|0 - local.get $4 - global.get $~lib/util/number/_K - i32.add - global.set $~lib/util/number/_K - local.get $13 - local.get $4 - i32.const 2 - i32.shl - i32.add - i64.load32_u - local.get $10 - i64.extend_i32_s - i64.shl - local.set $3 - local.get $0 - local.get $6 - i32.const 1 - i32.sub - i32.const 1 - i32.shl - i32.add - local.tee $2 - i32.load16_u - local.set $4 - loop $continue|2 + i64.le_u + if + local.get $4 + global.get $~lib/util/number/_K + i32.add + global.set $~lib/util/number/_K + local.get $13 + local.get $4 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.get $10 + i64.extend_i32_s + i64.shl + local.set $3 + local.get $0 + local.get $6 i32.const 1 - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.sub - i64.gt_u - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.lt_u - select - i32.const 0 - local.get $5 - local.get $1 - i64.sub - local.get $3 - i64.ge_u - i32.const 0 - local.get $1 - local.get $9 - i64.lt_u - select - select - if - local.get $4 + i32.sub + i32.const 1 + i32.shl + i32.add + local.tee $2 + i32.load16_u + local.set $4 + loop $while-continue|3 i32.const 1 - i32.sub - local.set $4 + local.get $9 + local.get $1 + i64.sub local.get $1 local.get $3 i64.add - local.set $1 - br $continue|2 + local.get $9 + i64.sub + i64.gt_u + local.get $1 + local.get $3 + i64.add + local.get $9 + i64.lt_u + select + i32.const 0 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 + local.get $1 + local.get $9 + i64.lt_u + select + select + if + local.get $4 + i32.const 1 + i32.sub + local.set $4 + local.get $1 + local.get $3 + i64.add + local.set $1 + br $while-continue|3 + end end + local.get $2 + local.get $4 + i32.store16 + local.get $6 + return end - local.get $2 - local.get $4 - i32.store16 - local.get $6 - return + br $while-continue|0 end end - loop $continue|3 (result i32) + loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul @@ -6866,7 +6860,7 @@ local.tee $12 local.get $5 i64.ge_u - br_if $continue|3 + br_if $while-continue|4 local.get $4 global.get $~lib/util/number/_K i32.add @@ -6894,7 +6888,7 @@ local.tee $2 i32.load16_u local.set $4 - loop $continue|4 + loop $while-continue|6 i32.const 1 local.get $3 local.get $1 @@ -6932,7 +6926,7 @@ local.get $11 i64.add local.set $1 - br $continue|4 + br $while-continue|6 end end local.get $2 @@ -6972,7 +6966,7 @@ i32.const 0 end if (result i32) - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s @@ -6988,7 +6982,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -7060,7 +7054,7 @@ i32.store i32.const 2 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 local.get $3 i32.lt_s @@ -7076,7 +7070,7 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 @@ -7093,34 +7087,34 @@ local.get $0 i32.const 4 i32.add - local.tee $0 + local.tee $1 local.get $3 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if i32.const 0 - local.get $2 + local.get $0 i32.sub - local.set $2 + local.set $0 end - local.get $2 - local.get $2 + local.get $0 + local.get $0 call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_simple - local.get $0 + local.get $1 i32.const 45 i32.const 43 - local.get $1 + local.get $2 select i32.store16 - local.get $2 + local.get $0 i32.const 2 i32.add else @@ -7606,7 +7600,7 @@ i32.const 22836 i32.load local.set $6 - loop $continue|0 + loop $while-continue|0 local.get $2 if local.get $5 @@ -7673,7 +7667,7 @@ end end local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $0 @@ -7724,7 +7718,7 @@ i32.const 18044 i32.load local.set $10 - loop $loop|0 + loop $for-loop|0 local.get $6 local.get $7 i32.lt_u @@ -7739,7 +7733,7 @@ i32.const -128 i32.and if - block $continue|0 + block $for-continue|0 local.get $6 local.get $7 i32.const 1 @@ -7800,7 +7794,7 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $for-continue|0 end end end @@ -7833,7 +7827,7 @@ local.set $1 i32.const 0 local.set $8 - loop $continue|1 + loop $while-continue|1 local.get $8 local.get $1 i32.le_s @@ -7869,12 +7863,11 @@ i32.sub local.set $1 end - br $continue|1 else local.get $4 br $~lib/util/casemap/bsearch|inlined.0 end - unreachable + br $while-continue|1 end end i32.const -1 @@ -7990,7 +7983,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $5 @@ -8023,7 +8016,7 @@ i32.const 1 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $4 local.get $5 i32.lt_u @@ -8038,7 +8031,7 @@ i32.const -128 i32.and if - block $continue|0 + block $for-continue|0 local.get $4 local.get $5 i32.const 1 @@ -8099,7 +8092,7 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $for-continue|0 end end end @@ -8209,7 +8202,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -8672,7 +8665,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 call $~lib/string/String.fromCharCode|trampoline local.tee $14 @@ -8688,7 +8681,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 54 call $~lib/string/String.fromCharCode|trampoline local.tee $15 @@ -8704,7 +8697,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 65590 call $~lib/string/String.fromCharCode|trampoline local.tee $16 @@ -16077,7 +16070,7 @@ call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $5 i32.const 1114111 i32.le_s @@ -16283,20 +16276,18 @@ i32.const 2 call $~lib/builtins/abort unreachable - else - local.get $13 - call $~lib/rt/pure/__release - local.get $11 - call $~lib/rt/pure/__release - local.get $12 - call $~lib/rt/pure/__release - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $loop|0 end - unreachable + local.get $13 + call $~lib/rt/pure/__release + local.get $11 + call $~lib/rt/pure/__release + local.get $12 + call $~lib/rt/pure/__release + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|0 end end global.get $std/string/str @@ -16830,13 +16821,13 @@ global.get $std/string/str call $~lib/rt/pure/__retain ) - (func $start (; 97 ;) - global.get $~lib/started + (func $~start (; 97 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:std/string ) @@ -16955,7 +16946,7 @@ i32.shl i32.add local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $0 i32.lt_u @@ -16972,7 +16963,7 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end ) diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index 5ef8193620..57bfd93372 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -485,7 +485,7 @@ (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/string/String.MAX_LENGTH i32 (i32.const 536870904)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~lib/number/I32.MAX_VALUE i32 (i32.const 2147483647)) @@ -517,10 +517,11 @@ (global $~lib/util/casemap/exceptions i32 (i32.const 23456)) (global $~lib/util/string/lowerTable127 i32 (i32.const 23632)) (global $~lib/util/string/lowerTable127Ptr (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 28416)) (global $~lib/heap/__heap_base i32 (i32.const 28508)) - (export "_start" (func $start)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (export "getString" (func $std/string/getString)) (func $~lib/rt/pure/increment (; 8 ;) (param $0 i32) @@ -1353,6 +1354,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -1406,71 +1409,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1830,34 +1831,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1866,23 +1868,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1891,11 +1893,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1907,21 +1909,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1929,39 +1930,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -2270,39 +2269,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2310,13 +2309,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2357,9 +2356,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2516,13 +2514,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2597,9 +2595,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2638,13 +2635,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2719,9 +2716,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2746,13 +2742,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2827,9 +2823,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3299,6 +3294,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3345,13 +3341,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3362,30 +3358,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3402,37 +3397,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3443,15 +3436,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3468,17 +3461,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3491,16 +3483,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3512,9 +3503,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3753,6 +3743,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -3787,15 +3778,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -3812,39 +3803,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $9 + local.get $10 return end local.get $5 @@ -3855,17 +3848,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 36 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -4005,7 +3997,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -4272,17 +4264,17 @@ i32.lt_s select local.set $7 - block $break|0 + local.get $5 + local.get $3 + i32.sub + local.set $5 + loop $for-loop|0 + local.get $7 local.get $5 - local.get $3 - i32.sub - local.set $5 - loop $loop|0 - local.get $7 - local.get $5 - i32.le_s - i32.eqz - br_if $break|0 + i32.le_s + local.set $4 + local.get $4 + if local.get $0 local.get $7 local.get $1 @@ -4292,19 +4284,18 @@ i32.eqz if local.get $7 - local.set $4 + local.set $6 local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $6 return end local.get $7 i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $4 @@ -4331,19 +4322,20 @@ (func $~lib/memory/memory.repeat (; 46 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) i32.const 0 local.set $4 local.get $2 local.get $3 i32.mul local.set $5 - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i32.lt_u + local.set $6 + local.get $6 + if local.get $0 local.get $4 i32.add @@ -4354,9 +4346,8 @@ local.get $2 i32.add local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/string/String#padStart (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -4617,13 +4608,13 @@ i32.lt_s select local.set $7 - block $break|0 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $4 + local.get $4 + if local.get $0 local.get $7 local.get $1 @@ -4633,19 +4624,18 @@ i32.eqz if local.get $7 - local.set $4 + local.set $6 local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $6 return end local.get $7 i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $4 @@ -4799,6 +4789,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) local.get $0 call $~lib/string/String#get:length i32.const 1 @@ -4806,29 +4797,28 @@ local.set $1 i32.const 0 local.set $2 - block $break|0 - loop $continue|0 + loop $while-continue|0 + local.get $2 + local.get $1 + i32.lt_u + if (result i32) + local.get $0 local.get $2 - local.get $1 - i32.lt_u - if (result i32) - local.get $0 - local.get $2 - i32.add - i32.load16_u - call $~lib/util/string/isSpace - else - i32.const 0 - end - i32.eqz - br_if $break|0 + i32.add + i32.load16_u + call $~lib/util/string/isSpace + else + i32.const 0 + end + local.set $3 + local.get $3 + if local.get $2 i32.const 2 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 i32.eqz @@ -4851,20 +4841,21 @@ local.get $1 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $3 - local.get $3 + local.set $4 + local.get $4 local.get $0 local.get $2 i32.add local.get $1 call $~lib/memory/memory.copy - local.get $3 + local.get $4 call $~lib/rt/pure/__retain ) (func $~lib/string/String#trimEnd (; 53 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) local.get $0 call $~lib/string/String#get:length i32.const 1 @@ -4872,29 +4863,28 @@ local.set $1 local.get $1 local.set $2 - block $break|0 - loop $continue|0 + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $0 local.get $2 - if (result i32) - local.get $0 - local.get $2 - i32.add - i32.const 2 - i32.sub - i32.load16_u - call $~lib/util/string/isSpace - else - i32.const 0 - end - i32.eqz - br_if $break|0 + i32.add + i32.const 2 + i32.sub + i32.load16_u + call $~lib/util/string/isSpace + else + i32.const 0 + end + local.set $3 + local.get $3 + if local.get $2 i32.const 2 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 i32.eqz @@ -4914,12 +4904,12 @@ local.get $2 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $3 - local.get $3 + local.set $4 + local.get $4 local.get $0 local.get $2 call $~lib/memory/memory.copy - local.get $3 + local.get $4 call $~lib/rt/pure/__retain ) (func $~lib/string/String#trim (; 54 ;) (param $0 i32) (result i32) @@ -4927,6 +4917,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 call $~lib/string/String#get:length local.set $1 @@ -4934,59 +4925,57 @@ i32.const 1 i32.shl local.set $2 - block $break|0 - loop $continue|0 + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $0 local.get $2 - if (result i32) - local.get $0 - local.get $2 - i32.add - i32.const 2 - i32.sub - i32.load16_u - call $~lib/util/string/isSpace - else - i32.const 0 - end - i32.eqz - br_if $break|0 + i32.add + i32.const 2 + i32.sub + i32.load16_u + call $~lib/util/string/isSpace + else + i32.const 0 + end + local.set $3 + local.get $3 + if local.get $2 i32.const 2 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 - local.set $3 - block $break|1 - loop $continue|1 - local.get $3 - local.get $2 - i32.lt_u - if (result i32) - local.get $0 - local.get $3 - i32.add - i32.load16_u - call $~lib/util/string/isSpace - else - i32.const 0 - end - i32.eqz - br_if $break|1 - local.get $3 + local.set $4 + loop $while-continue|1 + local.get $4 + local.get $2 + i32.lt_u + if (result i32) + local.get $0 + local.get $4 + i32.add + i32.load16_u + call $~lib/util/string/isSpace + else + i32.const 0 + end + local.set $3 + local.get $3 + if + local.get $4 i32.const 2 i32.add - local.set $3 + local.set $4 local.get $2 i32.const 2 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.eqz @@ -4995,7 +4984,7 @@ call $~lib/rt/pure/__retain return end - local.get $3 + local.get $4 i32.eqz if (result i32) local.get $2 @@ -5014,14 +5003,14 @@ local.get $2 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $4 - local.get $4 + local.set $5 + local.get $5 local.get $0 - local.get $3 + local.get $4 i32.add local.get $2 call $~lib/memory/memory.copy - local.get $4 + local.get $5 call $~lib/rt/pure/__retain ) (func $~lib/util/string/strtol (; 55 ;) (param $0 i32) (param $1 i32) (result f64) @@ -5055,12 +5044,12 @@ local.set $5 f64.const 1 local.set $6 - block $break|0 - loop $continue|0 - local.get $5 - call $~lib/util/string/isSpace - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + call $~lib/util/string/isSpace + local.set $7 + local.get $7 + if local.get $4 i32.const 2 i32.add @@ -5071,9 +5060,8 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $5 i32.const 45 @@ -5231,81 +5219,82 @@ end f64.const 0 local.set $8 - block $break|2 - loop $continue|2 + block $while-break|2 + loop $while-continue|2 local.get $2 local.tee $7 i32.const 1 i32.sub local.set $2 local.get $7 - i32.eqz - br_if $break|2 - local.get $4 - i32.load16_u - local.set $5 - local.get $5 - i32.const 48 - i32.sub - i32.const 10 - i32.lt_u + local.set $7 + local.get $7 if - local.get $5 - i32.const 48 - i32.sub + local.get $4 + i32.load16_u local.set $5 - else local.get $5 - i32.const 65 + i32.const 48 i32.sub - i32.const 25 - i32.le_u + i32.const 10 + i32.lt_u if local.get $5 - i32.const 65 - i32.const 10 - i32.sub + i32.const 48 i32.sub local.set $5 else local.get $5 - i32.const 97 + i32.const 65 i32.sub i32.const 25 i32.le_u if local.get $5 - i32.const 97 + i32.const 65 i32.const 10 i32.sub i32.sub local.set $5 else - br $break|2 + local.get $5 + i32.const 97 + i32.sub + i32.const 25 + i32.le_u + if + local.get $5 + i32.const 97 + i32.const 10 + i32.sub + i32.sub + local.set $5 + else + br $while-break|2 + end end end + local.get $5 + local.get $1 + i32.ge_u + if + br $while-break|2 + end + local.get $8 + local.get $1 + f64.convert_i32_s + f64.mul + local.get $5 + f64.convert_i32_u + f64.add + local.set $8 + local.get $4 + i32.const 2 + i32.add + local.set $4 + br $while-continue|2 end - local.get $5 - local.get $1 - i32.ge_u - if - br $break|2 - end - local.get $8 - local.get $1 - f64.convert_i32_s - f64.mul - local.get $5 - f64.convert_i32_u - f64.add - local.set $8 - local.get $4 - i32.const 2 - i32.add - local.set $4 - br $continue|2 end - unreachable end local.get $6 local.get $8 @@ -5358,12 +5347,12 @@ local.set $5 i32.const 1 local.set $6 - block $break|0 - loop $continue|0 - local.get $5 - call $~lib/util/string/isSpace - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + call $~lib/util/string/isSpace + local.set $3 + local.get $3 + if local.get $4 i32.const 2 i32.add @@ -5374,9 +5363,8 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $5 i32.const 45 @@ -5534,79 +5522,80 @@ end i32.const 0 local.set $7 - block $break|2 - loop $continue|2 + block $while-break|2 + loop $while-continue|2 local.get $2 local.tee $3 i32.const 1 i32.sub local.set $2 local.get $3 - i32.eqz - br_if $break|2 - local.get $4 - i32.load16_u - local.set $5 - local.get $5 - i32.const 48 - i32.sub - i32.const 10 - i32.lt_u + local.set $3 + local.get $3 if - local.get $5 - i32.const 48 - i32.sub + local.get $4 + i32.load16_u local.set $5 - else local.get $5 - i32.const 65 + i32.const 48 i32.sub - i32.const 25 - i32.le_u + i32.const 10 + i32.lt_u if local.get $5 - i32.const 65 - i32.const 10 - i32.sub + i32.const 48 i32.sub local.set $5 else local.get $5 - i32.const 97 + i32.const 65 i32.sub i32.const 25 i32.le_u if local.get $5 - i32.const 97 + i32.const 65 i32.const 10 i32.sub i32.sub local.set $5 else - br $break|2 + local.get $5 + i32.const 97 + i32.sub + i32.const 25 + i32.le_u + if + local.get $5 + i32.const 97 + i32.const 10 + i32.sub + i32.sub + local.set $5 + else + br $while-break|2 + end end end + local.get $5 + local.get $1 + i32.ge_u + if + br $while-break|2 + end + local.get $7 + local.get $1 + i32.mul + local.get $5 + i32.add + local.set $7 + local.get $4 + i32.const 2 + i32.add + local.set $4 + br $while-continue|2 end - local.get $5 - local.get $1 - i32.ge_u - if - br $break|2 - end - local.get $7 - local.get $1 - i32.mul - local.get $5 - i32.add - local.set $7 - local.get $4 - i32.const 2 - i32.add - local.set $4 - br $continue|2 end - unreachable end local.get $6 local.get $7 @@ -5660,12 +5649,12 @@ local.set $5 i64.const 1 local.set $6 - block $break|0 - loop $continue|0 - local.get $5 - call $~lib/util/string/isSpace - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + call $~lib/util/string/isSpace + local.set $7 + local.get $7 + if local.get $4 i32.const 2 i32.add @@ -5676,9 +5665,8 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $5 i32.const 45 @@ -5836,81 +5824,82 @@ end i64.const 0 local.set $8 - block $break|2 - loop $continue|2 + block $while-break|2 + loop $while-continue|2 local.get $2 local.tee $7 i32.const 1 i32.sub local.set $2 local.get $7 - i32.eqz - br_if $break|2 - local.get $4 - i32.load16_u - local.set $5 - local.get $5 - i32.const 48 - i32.sub - i32.const 10 - i32.lt_u + local.set $7 + local.get $7 if - local.get $5 - i32.const 48 - i32.sub + local.get $4 + i32.load16_u local.set $5 - else local.get $5 - i32.const 65 + i32.const 48 i32.sub - i32.const 25 - i32.le_u + i32.const 10 + i32.lt_u if local.get $5 - i32.const 65 - i32.const 10 - i32.sub + i32.const 48 i32.sub local.set $5 else local.get $5 - i32.const 97 + i32.const 65 i32.sub i32.const 25 i32.le_u if local.get $5 - i32.const 97 + i32.const 65 i32.const 10 i32.sub i32.sub local.set $5 else - br $break|2 + local.get $5 + i32.const 97 + i32.sub + i32.const 25 + i32.le_u + if + local.get $5 + i32.const 97 + i32.const 10 + i32.sub + i32.sub + local.set $5 + else + br $while-break|2 + end end end + local.get $5 + local.get $1 + i32.ge_u + if + br $while-break|2 + end + local.get $8 + local.get $1 + i64.extend_i32_s + i64.mul + local.get $5 + i64.extend_i32_u + i64.add + local.set $8 + local.get $4 + i32.const 2 + i32.add + local.set $4 + br $while-continue|2 end - local.get $5 - local.get $1 - i32.ge_u - if - br $break|2 - end - local.get $8 - local.get $1 - i64.extend_i32_s - i64.mul - local.get $5 - i64.extend_i32_u - i64.add - local.set $8 - local.get $4 - i32.const 2 - i32.add - local.set $4 - br $continue|2 end - unreachable end local.get $6 local.get $8 @@ -6101,13 +6090,13 @@ local.get $2 return end - block $break|2 - loop $continue|2 - local.get $1 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $1 + i32.const 0 + i32.gt_s + local.set $3 + local.get $3 + if local.get $1 i32.const 1 i32.and @@ -6125,9 +6114,8 @@ local.get $0 i32.mul local.set $0 - br $continue|2 + br $while-continue|2 end - unreachable end local.get $2 ) @@ -6232,20 +6220,21 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i64) - (local $11 i32) + (local $10 i32) + (local $11 i64) (local $12 i32) (local $13 i32) (local $14 i32) (local $15 i32) (local $16 i32) - (local $17 i64) + (local $17 i32) (local $18 i64) (local $19 i64) (local $20 i64) (local $21 i64) (local $22 i64) (local $23 i64) + (local $24 i64) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -6269,17 +6258,17 @@ local.set $4 f64.const 1 local.set $5 - block $break|0 - loop $continue|0 - local.get $1 - if (result i32) - local.get $4 - call $~lib/util/string/isSpace - else - i32.const 0 - end - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + if (result i32) + local.get $4 + call $~lib/util/string/isSpace + else + i32.const 0 + end + local.set $6 + local.get $6 + if local.get $3 i32.const 2 i32.add @@ -6290,9 +6279,8 @@ i32.const 1 i32.sub local.set $1 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.eqz @@ -6416,14 +6404,14 @@ return end local.get $3 - local.set $6 - block $break|1 - loop $continue|1 - local.get $4 - i32.const 48 - i32.eq - i32.eqz - br_if $break|1 + local.set $7 + loop $while-continue|1 + local.get $4 + i32.const 48 + i32.eq + local.set $6 + local.get $6 + if local.get $3 i32.const 2 i32.add @@ -6434,9 +6422,8 @@ i32.const 1 i32.sub local.set $1 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $1 i32.const 0 @@ -6450,22 +6437,22 @@ return end i32.const 0 - local.set $7 - i32.const 0 local.set $8 i32.const 0 local.set $9 - i64.const 0 + i32.const 0 local.set $10 + i64.const 0 + local.set $11 local.get $4 i32.const 46 i32.eq if - local.get $6 + local.get $7 local.get $3 i32.sub i32.eqz - local.set $11 + local.set $6 local.get $3 i32.const 2 i32.add @@ -6477,7 +6464,7 @@ local.get $1 i32.eqz if (result i32) - local.get $11 + local.get $6 else i32.const 0 end @@ -6489,32 +6476,31 @@ local.get $2 return end - block $break|2 - i32.const 1 - local.set $7 - loop $loop|2 - local.get $3 - i32.load16_u - local.tee $4 - i32.const 48 - i32.eq - i32.eqz - br_if $break|2 + i32.const 1 + local.set $8 + loop $for-loop|2 + local.get $3 + i32.load16_u + local.tee $4 + i32.const 48 + i32.eq + local.set $12 + local.get $12 + if local.get $1 i32.const 1 i32.sub local.set $1 - local.get $9 + local.get $10 i32.const 1 i32.sub - local.set $9 + local.set $10 local.get $3 i32.const 2 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $1 i32.const 0 @@ -6527,10 +6513,10 @@ local.get $2 return end - local.get $9 + local.get $10 i32.eqz if (result i32) - local.get $11 + local.get $6 else i32.const 0 end @@ -6552,13 +6538,13 @@ return end end - block $break|3 - local.get $4 - i32.const 48 - i32.sub - local.set $11 - loop $loop|3 - local.get $11 + local.get $4 + i32.const 48 + i32.sub + local.set $6 + block $for-break3 + loop $for-loop|3 + local.get $6 i32.const 10 i32.lt_u if (result i32) @@ -6568,98 +6554,99 @@ i32.const 46 i32.eq if (result i32) - local.get $7 + local.get $8 i32.eqz else i32.const 0 end end - i32.eqz - br_if $break|3 - local.get $11 - i32.const 10 - i32.lt_u + local.set $12 + local.get $12 if - local.get $8 - i32.const 19 - i32.lt_s - if (result i64) - i64.const 10 - local.get $10 - i64.mul - local.get $11 - i64.extend_i32_u - i64.add + local.get $6 + i32.const 10 + i32.lt_u + if + local.get $9 + i32.const 19 + i32.lt_s + if (result i64) + i64.const 10 + local.get $11 + i64.mul + local.get $6 + i64.extend_i32_u + i64.add + else + local.get $11 + local.get $6 + i32.eqz + i32.eqz + i64.extend_i32_u + i64.or + end + local.set $11 + local.get $9 + i32.const 1 + i32.add + local.set $9 else - local.get $10 - local.get $11 - i32.eqz - i32.eqz - i64.extend_i32_u - i64.or + local.get $9 + local.set $10 + i32.const 1 + local.set $8 end - local.set $10 - local.get $8 + local.get $1 i32.const 1 + i32.sub + local.tee $1 + i32.eqz + if + br $for-break3 + end + local.get $3 + i32.const 2 i32.add - local.set $8 - else - local.get $8 - local.set $9 - i32.const 1 - local.set $7 - end - local.get $1 - i32.const 1 - i32.sub - local.tee $1 - i32.eqz - if - br $break|3 + local.tee $3 + i32.load16_u + local.set $4 + local.get $4 + i32.const 48 + i32.sub + local.set $6 + br $for-loop|3 end - local.get $3 - i32.const 2 - i32.add - local.tee $3 - i32.load16_u - local.set $4 - local.get $4 - i32.const 48 - i32.sub - local.set $11 - br $loop|3 end - unreachable end - local.get $7 + local.get $8 i32.eqz if - local.get $8 - local.set $9 + local.get $9 + local.set $10 end block $~lib/util/string/scientific|inlined.0 (result f64) + local.get $11 + local.set $18 local.get $10 - local.set $17 - local.get $9 i32.const 19 - local.tee $11 - local.get $8 + local.tee $6 + local.get $9 local.tee $12 - local.get $11 + local.get $6 local.get $12 i32.lt_s select i32.sub block $~lib/util/string/parseExp|inlined.0 (result i32) local.get $3 - local.set $11 + local.set $6 local.get $1 local.set $12 i32.const 1 local.set $13 i32.const 0 local.set $14 - local.get $11 + local.get $6 i32.load16_u local.set $15 local.get $15 @@ -6671,10 +6658,10 @@ i32.const 0 br $~lib/util/string/parseExp|inlined.0 end - local.get $11 + local.get $6 i32.const 2 i32.add - local.tee $11 + local.tee $6 i32.load16_u local.set $15 local.get $15 @@ -6690,10 +6677,10 @@ i32.const 0 br $~lib/util/string/parseExp|inlined.0 end - local.get $11 + local.get $6 i32.const 2 i32.add - local.tee $11 + local.tee $6 i32.load16_u local.set $15 i32.const -1 @@ -6712,21 +6699,21 @@ i32.const 0 br $~lib/util/string/parseExp|inlined.0 end - local.get $11 + local.get $6 i32.const 2 i32.add - local.tee $11 + local.tee $6 i32.load16_u local.set $15 end end - block $break|4 - loop $continue|4 - local.get $15 - i32.const 48 - i32.eq - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $15 + i32.const 48 + i32.eq + local.set $16 + local.get $16 + if local.get $12 i32.const 1 i32.sub @@ -6736,32 +6723,31 @@ i32.const 0 br $~lib/util/string/parseExp|inlined.0 end - local.get $11 + local.get $6 i32.const 2 i32.add - local.tee $11 + local.tee $6 i32.load16_u local.set $15 - br $continue|4 + br $while-continue|4 end - unreachable end - block $break|5 - local.get $15 - i32.const 48 - i32.sub - local.set $16 - loop $loop|5 - local.get $12 - if (result i32) - local.get $16 - i32.const 10 - i32.lt_u - else - i32.const 0 - end - i32.eqz - br_if $break|5 + local.get $15 + i32.const 48 + i32.sub + local.set $16 + loop $for-loop|5 + local.get $12 + if (result i32) + local.get $16 + i32.const 10 + i32.lt_u + else + i32.const 0 + end + local.set $17 + local.get $17 + if local.get $14 i32.const 3200 i32.ge_s @@ -6777,10 +6763,10 @@ local.get $16 i32.add local.set $14 - local.get $11 + local.get $6 i32.const 2 i32.add - local.tee $11 + local.tee $6 i32.load16_u local.set $15 local.get $12 @@ -6791,24 +6777,23 @@ i32.const 48 i32.sub local.set $16 - br $loop|5 + br $for-loop|5 end - unreachable end local.get $13 local.get $14 i32.mul end i32.add - local.set $16 - local.get $17 + local.set $17 + local.get $18 i64.const 0 i64.ne i32.eqz if (result i32) i32.const 1 else - local.get $16 + local.get $17 i32.const -342 i32.lt_s end @@ -6816,27 +6801,27 @@ f64.const 0 br $~lib/util/string/scientific|inlined.0 end - local.get $16 + local.get $17 i32.const 308 i32.gt_s if f64.const inf br $~lib/util/string/scientific|inlined.0 end - local.get $17 + local.get $18 f64.convert_i64_u local.set $2 - local.get $16 + local.get $17 i32.eqz if local.get $2 br $~lib/util/string/scientific|inlined.0 end - local.get $16 + local.get $17 i32.const 22 i32.gt_s if (result i32) - local.get $16 + local.get $17 i32.const 37 i32.le_s else @@ -6844,13 +6829,13 @@ end if local.get $2 - local.get $16 + local.get $17 i32.const 22 i32.sub - local.set $12 + local.set $16 global.get $~lib/util/string/Powers10 i32.load offset=4 - local.get $12 + local.get $16 i32.const 3 i32.shl i32.add @@ -6858,18 +6843,18 @@ f64.mul local.set $2 i32.const 22 - local.set $16 + local.set $17 end - local.get $17 + local.get $18 i64.const 9007199254740991 i64.le_u if (result i32) - local.get $16 - local.tee $12 + local.get $17 + local.tee $16 i32.const 31 i32.shr_s local.tee $15 - local.get $12 + local.get $16 i32.add local.get $15 i32.xor @@ -6879,16 +6864,16 @@ i32.const 0 end if - local.get $16 + local.get $17 i32.const 0 i32.gt_s if local.get $2 - local.get $16 - local.set $11 + local.get $17 + local.set $12 global.get $~lib/util/string/Powers10 i32.load offset=4 - local.get $11 + local.get $12 i32.const 3 i32.shl i32.add @@ -6898,12 +6883,12 @@ end local.get $2 i32.const 0 - local.get $16 + local.get $17 i32.sub - local.set $13 + local.set $6 global.get $~lib/util/string/Powers10 i32.load offset=4 - local.get $13 + local.get $6 i32.const 3 i32.shl i32.add @@ -6911,50 +6896,50 @@ f64.div br $~lib/util/string/scientific|inlined.0 else - local.get $16 + local.get $17 i32.const 0 i32.lt_s if - local.get $17 - local.set $18 - local.get $16 - local.set $14 local.get $18 - i64.clz local.set $19 - local.get $18 + local.get $17 + local.set $13 + local.get $19 + i64.clz + local.set $20 local.get $19 + local.get $20 i64.shl - local.set $18 - local.get $14 + local.set $19 + local.get $13 i64.extend_i32_s - local.get $19 + local.get $20 i64.sub - local.set $19 - block $break|6 - loop $loop|6 - local.get $14 - i32.const -14 - i32.le_s - i32.eqz - br_if $break|6 - local.get $18 + local.set $20 + loop $for-loop|6 + local.get $13 + i32.const -14 + i32.le_s + local.set $6 + local.get $6 + if + local.get $19 i64.const 6103515625 i64.div_u - local.set $20 - local.get $18 + local.set $21 + local.get $19 i64.const 6103515625 i64.rem_u - local.set $21 - local.get $20 - i64.clz local.set $22 - local.get $20 - local.get $22 + local.get $21 + i64.clz + local.set $23 + local.get $21 + local.get $23 i64.shl f64.const 0.00004294967296 - local.get $21 local.get $22 + local.get $23 i64.const 18 i64.sub i64.shl @@ -6963,141 +6948,140 @@ f64.nearest i64.trunc_f64_u i64.add - local.set $18 - local.get $19 - local.get $22 - i64.sub local.set $19 - local.get $14 + local.get $20 + local.get $23 + i64.sub + local.set $20 + local.get $13 i32.const 14 i32.add - local.set $14 - br $loop|6 + local.set $13 + br $for-loop|6 end - unreachable end i32.const 5 i32.const 0 - local.get $14 + local.get $13 i32.sub call $~lib/math/ipow32 i64.extend_i32_s - local.set $22 - local.get $18 - local.get $22 + local.set $23 + local.get $19 + local.get $23 i64.div_u + local.set $22 + local.get $19 + local.get $23 + i64.rem_u local.set $21 - local.get $18 local.get $22 - i64.rem_u - local.set $20 - local.get $21 i64.clz - local.set $23 - local.get $21 - local.get $23 + local.set $24 + local.get $22 + local.get $24 i64.shl - local.get $20 + local.get $21 f64.convert_i64_u i64.reinterpret_f64 - local.get $23 + local.get $24 i64.const 52 i64.shl i64.add f64.reinterpret_i64 - local.get $22 + local.get $23 f64.convert_i64_u f64.div i64.trunc_f64_u i64.add - local.set $18 - local.get $19 - local.get $23 - i64.sub local.set $19 - local.get $18 - f64.convert_i64_u + local.get $20 + local.get $24 + i64.sub + local.set $20 local.get $19 + f64.convert_i64_u + local.get $20 i32.wrap_i64 call $~lib/math/NativeMath.scalbn br $~lib/util/string/scientific|inlined.0 else - local.get $17 - local.set $18 - local.get $16 - local.set $15 local.get $18 + local.set $19 + local.get $17 + local.set $14 + local.get $19 i64.ctz - local.set $23 - local.get $18 - local.get $23 + local.set $24 + local.get $19 + local.get $24 i64.shr_u - local.set $18 - local.get $23 - local.get $15 + local.set $19 + local.get $24 + local.get $14 i64.extend_i32_s i64.add - local.set $23 - local.get $23 + local.set $24 + local.get $24 global.set $~lib/util/string/__fixmulShift - block $break|7 - loop $loop|7 - local.get $15 - i32.const 13 - i32.ge_s - i32.eqz - br_if $break|7 - local.get $18 - local.set $19 - i32.const 1220703125 - local.set $12 + loop $for-loop|7 + local.get $14 + i32.const 13 + i32.ge_s + local.set $13 + local.get $13 + if local.get $19 + local.set $20 + i32.const 1220703125 + local.set $15 + local.get $20 i64.const 4294967295 i64.and - local.get $12 + local.get $15 i64.extend_i32_u i64.mul - local.set $20 - local.get $19 + local.set $21 + local.get $20 i64.const 32 i64.shr_u - local.get $12 + local.get $15 i64.extend_i32_u i64.mul - local.get $20 + local.get $21 i64.const 32 i64.shr_u i64.add - local.set $21 - local.get $21 + local.set $22 + local.get $22 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $14 - local.get $14 + local.set $6 + local.get $6 i32.clz - local.set $13 + local.set $12 i64.const 32 - local.get $13 + local.get $12 i64.extend_i32_u i64.sub - local.set $22 + local.set $23 global.get $~lib/util/string/__fixmulShift - local.get $22 + local.get $23 i64.add global.set $~lib/util/string/__fixmulShift - local.get $21 - local.get $13 + local.get $22 + local.get $12 i64.extend_i32_u i64.shl - local.get $20 + local.get $21 i64.const 4294967295 i64.and - local.get $22 + local.get $23 i64.shr_u i64.or - local.get $20 - local.get $13 + local.get $21 + local.get $12 i64.extend_i32_u i64.shl i64.const 31 @@ -7105,68 +7089,67 @@ i64.const 1 i64.and i64.add - local.set $18 - local.get $15 + local.set $19 + local.get $14 i32.const 13 i32.sub - local.set $15 - br $loop|7 + local.set $14 + br $for-loop|7 end - unreachable end - local.get $18 - local.set $19 + local.get $19 + local.set $20 i32.const 5 - local.get $15 + local.get $14 call $~lib/math/ipow32 - local.set $11 - local.get $19 + local.set $16 + local.get $20 i64.const 4294967295 i64.and - local.get $11 + local.get $16 i64.extend_i32_u i64.mul - local.set $22 - local.get $19 + local.set $23 + local.get $20 i64.const 32 i64.shr_u - local.get $11 + local.get $16 i64.extend_i32_u i64.mul - local.get $22 + local.get $23 i64.const 32 i64.shr_u i64.add - local.set $21 - local.get $21 + local.set $22 + local.get $22 i64.const 32 i64.shr_u i32.wrap_i64 local.set $13 local.get $13 i32.clz - local.set $14 + local.set $12 i64.const 32 - local.get $14 + local.get $12 i64.extend_i32_u i64.sub - local.set $20 + local.set $21 global.get $~lib/util/string/__fixmulShift - local.get $20 + local.get $21 i64.add global.set $~lib/util/string/__fixmulShift - local.get $21 - local.get $14 + local.get $22 + local.get $12 i64.extend_i32_u i64.shl - local.get $22 + local.get $23 i64.const 4294967295 i64.and - local.get $20 + local.get $21 i64.shr_u i64.or - local.get $22 - local.get $14 + local.get $23 + local.get $12 i64.extend_i32_u i64.shl i64.const 31 @@ -7174,12 +7157,12 @@ i64.const 1 i64.and i64.add - local.set $18 + local.set $19 global.get $~lib/util/string/__fixmulShift - local.set $23 - local.get $18 + local.set $24 + local.get $19 f64.convert_i64_u - local.get $23 + local.get $24 i32.wrap_i64 call $~lib/math/NativeMath.scalbn br $~lib/util/string/scientific|inlined.0 @@ -7928,6 +7911,7 @@ (local $12 i32) (local $13 i32) (local $14 i32) + (local $15 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -8006,22 +7990,22 @@ call $~lib/memory/memory.copy local.get $6 local.set $7 - block $break|0 - i32.const 0 - local.set $8 - loop $loop|0 - local.get $8 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $8 + loop $for-loop|0 + local.get $8 + local.get $3 + i32.lt_u + local.set $9 + local.get $9 + if local.get $5 local.get $7 - local.tee $9 + local.tee $10 i32.const 1 i32.add local.set $7 - local.get $9 + local.get $10 i32.const 1 i32.shl i32.add @@ -8050,9 +8034,8 @@ i32.const 1 i32.add local.set $8 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $5 call $~lib/rt/pure/__retain @@ -8065,9 +8048,9 @@ return end i32.const 0 - local.set $10 - i32.const 0 local.set $11 + i32.const 0 + local.set $12 local.get $4 local.get $6 i32.eq @@ -8084,19 +8067,19 @@ local.get $0 local.get $7 call $~lib/memory/memory.copy - block $break|1 - loop $continue|1 - local.get $0 - local.get $1 - local.get $10 - call $~lib/string/String#indexOf - local.tee $11 - i32.const -1 - i32.xor - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $0 + local.get $1 + local.get $11 + call $~lib/string/String#indexOf + local.tee $12 + i32.const -1 + i32.xor + local.set $8 + local.get $8 + if local.get $5 - local.get $11 + local.get $12 i32.const 1 i32.shl i32.add @@ -8105,13 +8088,12 @@ i32.const 1 i32.shl call $~lib/memory/memory.copy - local.get $11 + local.get $12 local.get $4 i32.add - local.set $10 - br $continue|1 + local.set $11 + br $while-continue|1 end - unreachable end local.get $5 call $~lib/rt/pure/__retain @@ -8124,23 +8106,23 @@ return end i32.const 0 - local.set $12 - i32.const 0 local.set $13 - local.get $3 + i32.const 0 local.set $14 - block $break|2 - loop $continue|2 - local.get $0 - local.get $1 - local.get $10 - call $~lib/string/String#indexOf - local.tee $11 - i32.const -1 - i32.xor - i32.eqz - br_if $break|2 - local.get $12 + local.get $3 + local.set $15 + loop $while-continue|2 + local.get $0 + local.get $1 + local.get $11 + call $~lib/string/String#indexOf + local.tee $12 + i32.const -1 + i32.xor + local.set $5 + local.get $5 + if + local.get $13 i32.eqz if local.get $3 @@ -8148,49 +8130,49 @@ i32.shl i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $12 + local.set $13 end - local.get $13 local.get $14 + local.get $15 i32.gt_u if - local.get $14 + local.get $15 i32.const 1 i32.shl - local.set $5 - local.get $12 - local.get $5 + local.set $7 + local.get $13 + local.get $7 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc - local.set $12 - local.get $5 - local.set $14 + local.set $13 + local.get $7 + local.set $15 end + local.get $12 local.get $11 - local.get $10 i32.sub - local.set $5 - local.get $12 + local.set $7 local.get $13 + local.get $14 i32.const 1 i32.shl i32.add local.get $0 - local.get $10 + local.get $11 i32.const 1 i32.shl i32.add - local.get $5 + local.get $7 i32.const 1 i32.shl call $~lib/memory/memory.copy - local.get $13 - local.get $5 + local.get $14 + local.get $7 i32.add - local.set $13 - local.get $12 + local.set $14 local.get $13 + local.get $14 i32.const 1 i32.shl i32.add @@ -8199,50 +8181,49 @@ i32.const 1 i32.shl call $~lib/memory/memory.copy - local.get $13 + local.get $14 local.get $6 i32.add - local.set $13 - local.get $11 + local.set $14 + local.get $12 local.get $4 i32.add - local.set $10 - br $continue|2 + local.set $11 + br $while-continue|2 end - unreachable end - local.get $13 + local.get $14 if - local.get $13 local.get $14 + local.get $15 i32.gt_u if - local.get $14 + local.get $15 i32.const 1 i32.shl local.set $5 - local.get $12 + local.get $13 local.get $5 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc - local.set $12 + local.set $13 local.get $5 - local.set $14 + local.set $15 end local.get $3 - local.get $10 + local.get $11 i32.sub local.set $5 local.get $5 if - local.get $12 local.get $13 + local.get $14 i32.const 1 i32.shl i32.add local.get $0 - local.get $10 + local.get $11 i32.const 1 i32.shl i32.add @@ -8252,28 +8233,28 @@ call $~lib/memory/memory.copy end local.get $5 - local.get $13 + local.get $14 i32.add local.set $5 - local.get $14 + local.get $15 local.get $5 i32.gt_u if - local.get $12 + local.get $13 local.get $5 i32.const 1 i32.shl call $~lib/rt/tlsf/__realloc - local.set $12 + local.set $13 end - local.get $12 + local.get $13 call $~lib/rt/pure/__retain - local.set $7 + local.set $8 local.get $1 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $7 + local.get $8 return end local.get $0 @@ -8600,6 +8581,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -8818,13 +8800,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -8851,9 +8833,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -8968,6 +8949,7 @@ (local $11 i32) (local $12 i32) (local $13 i32) + (local $14 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -8995,6 +8977,7 @@ i32.const 4 i32.const 0 call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $3 local.get $3 i32.load offset=4 @@ -9004,7 +8987,6 @@ call $~lib/rt/pure/__retain i32.store local.get $3 - call $~lib/rt/pure/__retain local.set $4 local.get $1 call $~lib/rt/pure/__release @@ -9061,20 +9043,20 @@ local.get $4 i32.load offset=4 local.set $3 - block $break|0 - i32.const 0 - local.set $7 - loop $loop|0 - local.get $7 - local.get $5 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + loop $for-loop|0 + local.get $7 + local.get $5 + i32.lt_s + local.set $8 + local.get $8 + if i32.const 2 i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $8 - local.get $8 + local.set $9 + local.get $9 local.get $0 local.get $7 i32.const 1 @@ -9087,18 +9069,17 @@ i32.const 2 i32.shl i32.add - local.get $8 + local.get $9 i32.store - local.get $8 + local.get $9 call $~lib/rt/pure/__retain drop local.get $7 i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 local.set $7 @@ -9135,88 +9116,87 @@ i32.const 0 call $~lib/rt/__allocArray call $~lib/rt/pure/__retain - local.set $9 - i32.const 0 local.set $10 i32.const 0 local.set $11 i32.const 0 local.set $12 - block $break|1 - loop $continue|1 - local.get $0 - local.get $1 - local.get $11 - call $~lib/string/String#indexOf - local.tee $10 - i32.const -1 - i32.xor - i32.eqz - br_if $break|1 - local.get $10 + i32.const 0 + local.set $13 + loop $while-continue|1 + local.get $0 + local.get $1 + local.get $12 + call $~lib/string/String#indexOf + local.tee $11 + i32.const -1 + i32.xor + local.set $3 + local.get $3 + if local.get $11 + local.get $12 i32.sub - local.set $3 - local.get $3 + local.set $4 + local.get $4 i32.const 0 i32.gt_s if - local.get $3 + local.get $4 i32.const 1 i32.shl i32.const 1 call $~lib/rt/tlsf/__alloc - local.set $4 - local.get $4 + local.set $7 + local.get $7 local.get $0 - local.get $11 + local.get $12 i32.const 1 i32.shl i32.add - local.get $3 + local.get $4 i32.const 1 i32.shl call $~lib/memory/memory.copy - local.get $9 - local.get $4 + local.get $10 + local.get $7 call $~lib/array/Array<~lib/string/String>#push drop else - local.get $9 + local.get $10 i32.const 496 call $~lib/array/Array<~lib/string/String>#push drop end - local.get $12 + local.get $13 i32.const 1 i32.add - local.tee $12 + local.tee $13 local.get $2 i32.eq if - local.get $9 - local.set $4 + local.get $10 + local.set $7 local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $7 return end - local.get $10 + local.get $11 local.get $6 i32.add - local.set $11 - br $continue|1 + local.set $12 + br $while-continue|1 end - unreachable end - local.get $11 + local.get $12 i32.eqz if - local.get $9 + local.get $10 local.get $0 call $~lib/array/Array<~lib/string/String>#push drop - local.get $9 + local.get $10 local.set $3 local.get $1 call $~lib/rt/pure/__release @@ -9224,14 +9204,14 @@ return end local.get $5 - local.get $11 + local.get $12 i32.sub - local.set $13 - local.get $13 + local.set $14 + local.get $14 i32.const 0 i32.gt_s if - local.get $13 + local.get $14 i32.const 1 i32.shl i32.const 1 @@ -9239,25 +9219,25 @@ local.set $3 local.get $3 local.get $0 - local.get $11 + local.get $12 i32.const 1 i32.shl i32.add - local.get $13 + local.get $14 i32.const 1 i32.shl call $~lib/memory/memory.copy - local.get $9 + local.get $10 local.get $3 call $~lib/array/Array<~lib/string/String>#push drop else - local.get $9 + local.get $10 i32.const 496 call $~lib/array/Array<~lib/string/String>#push drop end - local.get $9 + local.get $10 local.set $3 local.get $1 call $~lib/rt/pure/__release @@ -9381,50 +9361,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 13072 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -9434,15 +9417,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -9451,30 +9433,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -9491,13 +9473,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -9507,13 +9489,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -9680,77 +9662,78 @@ ) (func $~lib/util/number/utoa64_lut (; 93 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i64) + (local $12 i32) (local $13 i64) + (local $14 i64) i32.const 13072 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i64.const 100000000 - i64.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i64.const 100000000 + i64.ge_u + local.set $4 + local.get $4 + if local.get $1 i64.const 100000000 i64.div_u - local.set $4 + local.set $5 local.get $1 - local.get $4 + local.get $5 i64.const 100000000 i64.mul i64.sub i32.wrap_i64 - local.set $5 - local.get $4 - local.set $1 - local.get $5 - i32.const 10000 - i32.div_u local.set $6 local.get $5 - i32.const 10000 - i32.rem_u - local.set $7 + local.set $1 local.get $6 - i32.const 100 + i32.const 10000 i32.div_u - local.set $8 + local.set $7 local.get $6 - i32.const 100 + i32.const 10000 i32.rem_u - local.set $9 + local.set $8 local.get $7 i32.const 100 i32.div_u - local.set $10 + local.set $9 local.get $7 i32.const 100 i32.rem_u + local.set $10 + local.get $8 + i32.const 100 + i32.div_u local.set $11 + local.get $8 + i32.const 100 + i32.rem_u + local.set $12 local.get $3 - local.get $10 + local.get $11 i32.const 2 i32.shl i32.add i64.load32_u - local.set $12 + local.set $13 local.get $3 - local.get $11 + local.get $12 i32.const 2 i32.shl i32.add i64.load32_u - local.set $13 + local.set $14 local.get $2 i32.const 4 i32.sub @@ -9760,26 +9743,26 @@ i32.const 1 i32.shl i32.add - local.get $12 local.get $13 + local.get $14 i64.const 32 i64.shl i64.or i64.store local.get $3 - local.get $8 + local.get $9 i32.const 2 i32.shl i32.add i64.load32_u - local.set $12 + local.set $13 local.get $3 - local.get $9 + local.get $10 i32.const 2 i32.shl i32.add i64.load32_u - local.set $13 + local.set $14 local.get $2 i32.const 4 i32.sub @@ -9789,15 +9772,14 @@ i32.const 1 i32.shl i32.add - local.get $12 local.get $13 + local.get $14 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.get $1 @@ -9990,14 +9972,17 @@ (local $16 i32) (local $17 i32) (local $18 i32) - (local $19 i64) + (local $19 i32) (local $20 i64) (local $21 i64) (local $22 i64) (local $23 i64) - (local $24 i32) + (local $24 i64) (local $25 i32) (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i64) i32.const 0 local.get $4 i32.sub @@ -10035,13 +10020,13 @@ i32.const 15936 i32.load offset=4 local.set $16 - block $break|0 - loop $continue|0 - local.get $14 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $14 + i32.const 0 + i32.gt_s + local.set $17 + local.get $17 + if block $break|1 block $case10|1 block $case9|1 @@ -10055,44 +10040,44 @@ block $case1|1 block $case0|1 local.get $14 - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 10 i32.eq br_if $case0|1 - local.get $18 + local.get $19 i32.const 9 i32.eq br_if $case1|1 - local.get $18 + local.get $19 i32.const 8 i32.eq br_if $case2|1 - local.get $18 + local.get $19 i32.const 7 i32.eq br_if $case3|1 - local.get $18 + local.get $19 i32.const 6 i32.eq br_if $case4|1 - local.get $18 + local.get $19 i32.const 5 i32.eq br_if $case5|1 - local.get $18 + local.get $19 i32.const 4 i32.eq br_if $case6|1 - local.get $18 + local.get $19 i32.const 3 i32.eq br_if $case7|1 - local.get $18 + local.get $19 i32.const 2 i32.eq br_if $case8|1 - local.get $18 + local.get $19 i32.const 1 i32.eq br_if $case9|1 @@ -10101,7 +10086,7 @@ local.get $12 i32.const 1000000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000000 i32.rem_u @@ -10111,7 +10096,7 @@ local.get $12 i32.const 100000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000000 i32.rem_u @@ -10121,7 +10106,7 @@ local.get $12 i32.const 10000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000000 i32.rem_u @@ -10131,7 +10116,7 @@ local.get $12 i32.const 1000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000 i32.rem_u @@ -10141,7 +10126,7 @@ local.get $12 i32.const 100000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000 i32.rem_u @@ -10151,7 +10136,7 @@ local.get $12 i32.const 10000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000 i32.rem_u @@ -10161,7 +10146,7 @@ local.get $12 i32.const 1000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000 i32.rem_u @@ -10171,7 +10156,7 @@ local.get $12 i32.const 100 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100 i32.rem_u @@ -10181,7 +10166,7 @@ local.get $12 i32.const 10 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10 i32.rem_u @@ -10189,31 +10174,31 @@ br $break|1 end local.get $12 - local.set $17 + local.set $18 i32.const 0 local.set $12 br $break|1 end i32.const 0 - local.set $17 + local.set $18 br $break|1 end - local.get $17 + local.get $18 local.get $15 i32.or if local.get $0 local.get $15 - local.tee $18 + local.tee $19 i32.const 1 i32.add local.set $15 - local.get $18 + local.get $19 i32.const 1 i32.shl i32.add i32.const 48 - local.get $17 + local.get $18 i32.const 65535 i32.and i32.add @@ -10230,8 +10215,8 @@ i64.shl local.get $13 i64.add - local.set $19 - local.get $19 + local.set $20 + local.get $20 local.get $5 i64.le_u if @@ -10240,13 +10225,13 @@ i32.add global.set $~lib/util/number/_K local.get $0 - local.set $24 + local.set $25 local.get $15 - local.set $18 + local.set $19 local.get $5 + local.set $24 + local.get $20 local.set $23 - local.get $19 - local.set $22 local.get $16 local.get $14 i32.const 2 @@ -10256,228 +10241,230 @@ local.get $7 i64.extend_i32_s i64.shl - local.set $21 + local.set $22 local.get $10 - local.set $20 - local.get $24 - local.get $18 + local.set $21 + local.get $25 + local.get $19 i32.const 1 i32.sub i32.const 1 i32.shl i32.add - local.set $25 - local.get $25 - i32.load16_u local.set $26 - block $break|2 - loop $continue|2 + local.get $26 + i32.load16_u + local.set $27 + loop $while-continue|3 + local.get $23 + local.get $21 + i64.lt_u + if (result i32) + local.get $24 + local.get $23 + i64.sub local.get $22 - local.get $20 + i64.ge_u + else + i32.const 0 + end + if (result i32) + local.get $23 + local.get $22 + i64.add + local.get $21 i64.lt_u if (result i32) + i32.const 1 + else + local.get $21 local.get $23 - local.get $22 i64.sub - local.get $21 - i64.ge_u - else - i32.const 0 - end - if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 - i64.lt_u - if (result i32) - i32.const 1 - else - local.get $20 - local.get $22 - i64.sub - local.get $22 - local.get $21 - i64.add - local.get $20 - i64.sub - i64.gt_u - end - else - i32.const 0 + local.get $21 + i64.sub + i64.gt_u end - i32.eqz - br_if $break|2 - local.get $26 + else + i32.const 0 + end + local.set $28 + local.get $28 + if + local.get $27 i32.const 1 i32.sub - local.set $26 + local.set $27 + local.get $23 local.get $22 - local.get $21 i64.add - local.set $22 - br $continue|2 + local.set $23 + br $while-continue|3 end - unreachable end - local.get $25 local.get $26 + local.get $27 i32.store16 local.get $15 return end - br $continue|0 + br $while-continue|0 end - unreachable end - loop $continue|3 - local.get $13 - i64.const 10 - i64.mul - local.set $13 - local.get $5 - i64.const 10 - i64.mul - local.set $5 - local.get $13 - local.get $7 - i64.extend_i32_s - i64.shr_u - local.set $19 - local.get $19 - local.get $15 - i64.extend_i32_s - i64.or - i64.const 0 - i64.ne - if - local.get $0 - local.get $15 - local.tee $17 - i32.const 1 - i32.add - local.set $15 - local.get $17 - i32.const 1 - i32.shl - i32.add - i32.const 48 - local.get $19 - i32.wrap_i64 - i32.const 65535 - i32.and - i32.add - i32.store16 - end - local.get $13 - local.get $9 - i64.and - local.set $13 - local.get $14 - i32.const 1 - i32.sub - local.set $14 - local.get $13 - local.get $5 - i64.lt_u + loop $while-continue|4 + i32.const 1 + local.set $17 + local.get $17 if - global.get $~lib/util/number/_K - local.get $14 - i32.add - global.set $~lib/util/number/_K - local.get $10 - local.get $16 - i32.const 0 - local.get $14 - i32.sub - i32.const 2 - i32.shl - i32.add - i64.load32_u + local.get $13 + i64.const 10 i64.mul - local.set $10 - local.get $0 - local.set $24 - local.get $15 - local.set $18 + local.set $13 local.get $5 - local.set $23 + i64.const 10 + i64.mul + local.set $5 local.get $13 - local.set $22 - local.get $8 - local.set $21 - local.get $10 - local.set $20 + local.get $7 + i64.extend_i32_s + i64.shr_u + local.set $24 local.get $24 - local.get $18 + local.get $15 + i64.extend_i32_s + i64.or + i64.const 0 + i64.ne + if + local.get $0 + local.get $15 + local.tee $27 + i32.const 1 + i32.add + local.set $15 + local.get $27 + i32.const 1 + i32.shl + i32.add + i32.const 48 + local.get $24 + i32.wrap_i64 + i32.const 65535 + i32.and + i32.add + i32.store16 + end + local.get $13 + local.get $9 + i64.and + local.set $13 + local.get $14 i32.const 1 i32.sub - i32.const 1 - i32.shl - i32.add - local.set $17 - local.get $17 - i32.load16_u - local.set $26 - block $break|4 - loop $continue|4 - local.get $22 - local.get $20 + local.set $14 + local.get $13 + local.get $5 + i64.lt_u + if + global.get $~lib/util/number/_K + local.get $14 + i32.add + global.set $~lib/util/number/_K + local.get $10 + local.get $16 + i32.const 0 + local.get $14 + i32.sub + i32.const 2 + i32.shl + i32.add + i64.load32_u + i64.mul + local.set $10 + local.get $0 + local.set $19 + local.get $15 + local.set $28 + local.get $5 + local.set $29 + local.get $13 + local.set $23 + local.get $8 + local.set $22 + local.get $10 + local.set $21 + local.get $19 + local.get $28 + i32.const 1 + i32.sub + i32.const 1 + i32.shl + i32.add + local.set $27 + local.get $27 + i32.load16_u + local.set $26 + loop $while-continue|6 + local.get $23 + local.get $21 i64.lt_u if (result i32) + local.get $29 local.get $23 - local.get $22 i64.sub - local.get $21 + local.get $22 i64.ge_u else i32.const 0 end if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.lt_u if (result i32) i32.const 1 else - local.get $20 - local.get $22 + local.get $21 + local.get $23 i64.sub + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.sub i64.gt_u end else i32.const 0 end - i32.eqz - br_if $break|4 - local.get $26 - i32.const 1 - i32.sub - local.set $26 - local.get $22 - local.get $21 - i64.add - local.set $22 - br $continue|4 + local.set $25 + local.get $25 + if + local.get $26 + i32.const 1 + i32.sub + local.set $26 + local.get $23 + local.get $22 + i64.add + local.set $23 + br $while-continue|6 + end end - unreachable + local.get $27 + local.get $26 + i32.store16 + local.get $15 + return end - local.get $17 - local.get $26 - i32.store16 - local.get $15 - return + br $while-continue|4 end - br $continue|3 end - unreachable + local.get $15 ) (func $~lib/util/number/prettify (; 99 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -10523,15 +10510,15 @@ i32.const 0 end if - block $break|0 - local.get $1 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + local.get $1 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -10543,9 +10530,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -10634,15 +10620,15 @@ i32.shl i32.or i32.store - block $break|1 - i32.const 2 - local.set $5 - loop $loop|1 - local.get $5 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 2 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $4 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 i32.const 1 @@ -10654,9 +10640,8 @@ i32.const 1 i32.add local.set $5 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $1 local.get $4 @@ -10673,30 +10658,30 @@ local.get $0 i32.const 4 i32.add - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - local.get $5 - i32.const 0 - i32.lt_s local.set $6 local.get $6 + i32.const 0 + i32.lt_s + local.set $4 + local.get $4 if i32.const 0 - local.get $5 + local.get $6 i32.sub - local.set $5 + local.set $6 end - local.get $5 + local.get $6 call $~lib/util/number/decimalCount32 i32.const 1 i32.add local.set $7 - local.get $4 - local.set $10 local.get $5 + local.set $10 + local.get $6 local.set $9 local.get $7 local.set $8 @@ -10704,10 +10689,10 @@ local.get $9 local.get $8 call $~lib/util/number/utoa32_lut - local.get $4 + local.get $5 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 local.get $7 @@ -10753,8 +10738,8 @@ local.get $8 i32.const 0 i32.lt_s - local.set $6 - local.get $6 + local.set $4 + local.get $4 if i32.const 0 local.get $8 @@ -10765,24 +10750,24 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.set $4 + local.set $5 local.get $9 local.set $11 local.get $8 - local.set $5 - local.get $4 + local.set $6 + local.get $5 local.set $10 local.get $11 - local.get $5 + local.get $6 local.get $10 call $~lib/util/number/utoa32_lut local.get $9 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 - local.get $4 + local.get $5 i32.add local.set $1 local.get $1 @@ -11303,6 +11288,7 @@ (local $16 i32) (local $17 i32) (local $18 i32) + (local $19 i32) local.get $0 local.set $2 local.get $0 @@ -11404,32 +11390,32 @@ global.get $~lib/util/casemap/exceptions i32.load offset=4 local.set $16 - block $break|0 - loop $continue|0 - local.get $14 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $14 + local.set $17 + local.get $17 + if local.get $14 i32.const 1 i32.shr_u - local.set $17 + local.set $18 local.get $16 local.get $15 - local.get $17 + local.get $18 i32.add i32.const 2 i32.mul i32.add i32.load8_u - local.set $18 - local.get $18 + local.set $19 + local.get $19 local.get $0 i32.eq if local.get $9 local.get $16 local.get $15 - local.get $17 + local.get $18 i32.add i32.const 2 i32.mul @@ -11472,26 +11458,25 @@ i32.sub return else - local.get $18 + local.get $19 local.get $0 i32.gt_u if - local.get $17 + local.get $18 local.set $14 else local.get $15 - local.get $17 + local.get $18 i32.add local.set $15 local.get $14 - local.get $17 + local.get $18 i32.sub local.set $14 end end - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 ) @@ -11510,6 +11495,8 @@ (local $12 i32) (local $13 i32) (local $14 i32) + (local $15 i32) + (local $16 i32) local.get $0 call $~lib/string/String#get:length local.set $1 @@ -11536,26 +11523,26 @@ local.set $4 i32.const 0 local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_u + local.set $7 + local.get $7 + if + block $for-continue|0 local.get $0 local.get $6 i32.const 1 i32.shl i32.add i32.load16_u - local.set $7 - local.get $7 local.set $8 local.get $8 + local.set $9 + local.get $9 i32.const -128 i32.and i32.eqz @@ -11566,17 +11553,17 @@ i32.shl i32.add block $~lib/util/string/toUpper8|inlined.0 (result i32) - local.get $7 - local.set $8 - global.get $~lib/util/string/upperTable127Ptr local.get $8 + local.set $9 + global.get $~lib/util/string/upperTable127Ptr + local.get $9 i32.add i32.load8_u br $~lib/util/string/toUpper8|inlined.0 end i32.store16 else - local.get $7 + local.get $8 i32.const 55295 i32.sub i32.const 1025 @@ -11597,32 +11584,32 @@ i32.shl i32.add i32.load16_u offset=2 - local.set $8 - local.get $8 + local.set $9 + local.get $9 i32.const 56319 i32.sub i32.const 1025 i32.lt_u if - local.get $7 - local.set $9 - local.get $7 + local.get $8 + local.set $10 + local.get $8 i32.const 1023 i32.and i32.const 10 i32.shl - local.get $8 + local.get $9 i32.const 1023 i32.and i32.or i32.const 65536 i32.add - local.set $7 + local.set $8 local.get $6 i32.const 1 i32.add local.set $6 - local.get $7 + local.get $8 i32.const 131072 i32.ge_u if @@ -11631,8 +11618,8 @@ i32.const 1 i32.shl i32.add + local.get $10 local.get $9 - local.get $8 i32.const 16 i32.shl i32.or @@ -11641,11 +11628,11 @@ i32.const 1 i32.add local.set $5 - br $continue|0 + br $for-continue|0 end end end - local.get $7 + local.get $8 i32.const 9424 i32.sub i32.const 25 @@ -11656,130 +11643,129 @@ i32.const 1 i32.shl i32.add - local.get $7 + local.get $8 i32.const 26 i32.sub i32.store16 else i32.const -1 - local.set $8 - local.get $7 + local.set $9 + local.get $8 i32.const 223 i32.sub i32.const 64056 i32.le_u if block $~lib/util/casemap/bsearch|inlined.0 (result i32) - local.get $7 - local.set $11 + local.get $8 + local.set $12 local.get $3 - local.set $10 + local.set $11 local.get $4 - local.set $9 + local.set $10 i32.const 0 - local.set $12 - block $break|1 - loop $continue|1 - local.get $12 - local.get $9 - i32.le_s - i32.eqz - br_if $break|1 - local.get $12 - local.get $9 + local.set $13 + loop $while-continue|1 + local.get $13 + local.get $10 + i32.le_s + local.set $14 + local.get $14 + if + local.get $13 + local.get $10 i32.add i32.const 3 i32.shr_u i32.const 2 i32.shl - local.set $13 - local.get $10 - local.get $13 + local.set $15 + local.get $11 + local.get $15 i32.const 1 i32.shl i32.add i32.load16_u - local.get $11 + local.get $12 i32.sub - local.set $14 - local.get $14 + local.set $16 + local.get $16 i32.const 0 i32.eq if - local.get $13 + local.get $15 br $~lib/util/casemap/bsearch|inlined.0 else - local.get $14 + local.get $16 i32.const 31 i32.shr_u if - local.get $13 + local.get $15 i32.const 4 i32.add - local.set $12 + local.set $13 else - local.get $13 + local.get $15 i32.const 4 i32.sub - local.set $9 + local.set $10 end end - br $continue|1 + br $while-continue|1 end - unreachable end i32.const -1 end - local.set $8 + local.set $9 end - local.get $8 + local.get $9 i32.const -1 i32.xor if local.get $3 - local.get $8 + local.get $9 i32.const 1 i32.shl i32.add i32.load offset=2 - local.set $12 + local.set $13 local.get $3 - local.get $8 + local.get $9 i32.const 1 i32.shl i32.add i32.load16_u offset=6 - local.set $11 + local.set $12 local.get $2 local.get $5 i32.const 1 i32.shl i32.add - local.get $12 + local.get $13 i32.store local.get $2 local.get $5 i32.const 1 i32.shl i32.add - local.get $11 + local.get $12 i32.store16 offset=4 local.get $5 i32.const 1 - local.get $11 + local.get $12 i32.const 0 i32.ne i32.add i32.add local.set $5 else - local.get $7 + local.get $8 i32.const 1 call $~lib/util/casemap/casemap i32.const 2097151 i32.and - local.set $11 - local.get $11 + local.set $12 + local.get $12 i32.const 65536 i32.lt_s if @@ -11788,32 +11774,32 @@ i32.const 1 i32.shl i32.add - local.get $11 + local.get $12 i32.store16 else - local.get $11 + local.get $12 i32.const 65536 i32.sub - local.set $11 - local.get $11 + local.set $12 + local.get $12 i32.const 10 i32.shr_u i32.const 55296 i32.or - local.set $12 - local.get $11 + local.set $13 + local.get $12 i32.const 1023 i32.and i32.const 56320 i32.or - local.set $10 + local.set $11 local.get $2 local.get $5 i32.const 1 i32.shl i32.add - local.get $12 - local.get $10 + local.get $13 + local.get $11 i32.const 16 i32.shl i32.or @@ -11835,9 +11821,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $2 local.get $5 @@ -11857,6 +11842,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/string/String#get:length local.set $1 @@ -11877,26 +11863,26 @@ local.set $2 i32.const 0 local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_u + local.set $5 + local.get $5 + if + block $for-continue|0 local.get $0 local.get $4 i32.const 1 i32.shl i32.add i32.load16_u - local.set $5 - local.get $5 local.set $6 local.get $6 + local.set $7 + local.get $7 i32.const -128 i32.and i32.eqz @@ -11907,17 +11893,17 @@ i32.shl i32.add block $~lib/util/string/toLower8|inlined.0 (result i32) - local.get $5 - local.set $6 - global.get $~lib/util/string/lowerTable127Ptr local.get $6 + local.set $7 + global.get $~lib/util/string/lowerTable127Ptr + local.get $7 i32.add i32.load8_u br $~lib/util/string/toLower8|inlined.0 end i32.store16 else - local.get $5 + local.get $6 i32.const 55295 i32.sub i32.const 1025 @@ -11938,32 +11924,32 @@ i32.shl i32.add i32.load16_u offset=2 - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.const 56319 i32.sub i32.const 1025 i32.lt_u if - local.get $5 - local.set $7 - local.get $5 + local.get $6 + local.set $8 + local.get $6 i32.const 1023 i32.and i32.const 10 i32.shl - local.get $6 + local.get $7 i32.const 1023 i32.and i32.or i32.const 65536 i32.add - local.set $5 + local.set $6 local.get $4 i32.const 1 i32.add local.set $4 - local.get $5 + local.get $6 i32.const 131072 i32.ge_u if @@ -11972,8 +11958,8 @@ i32.const 1 i32.shl i32.add + local.get $8 local.get $7 - local.get $6 i32.const 16 i32.shl i32.or @@ -11982,11 +11968,11 @@ i32.const 1 i32.add local.set $3 - br $continue|0 + br $for-continue|0 end end end - local.get $5 + local.get $6 i32.const 304 i32.eq if @@ -12006,7 +11992,7 @@ i32.add local.set $3 else - local.get $5 + local.get $6 i32.const 9398 i32.sub i32.const 25 @@ -12017,18 +12003,18 @@ i32.const 1 i32.shl i32.add - local.get $5 + local.get $6 i32.const 26 i32.add i32.store16 else - local.get $5 + local.get $6 i32.const 0 call $~lib/util/casemap/casemap i32.const 2097151 i32.and - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.const 65536 i32.lt_s if @@ -12037,32 +12023,32 @@ i32.const 1 i32.shl i32.add - local.get $6 + local.get $7 i32.store16 else - local.get $6 + local.get $7 i32.const 65536 i32.sub - local.set $6 - local.get $6 + local.set $7 + local.get $7 i32.const 10 i32.shr_u i32.const 55296 i32.or - local.set $7 - local.get $6 + local.set $8 + local.get $7 i32.const 1023 i32.and i32.const 56320 i32.or - local.set $8 + local.set $9 local.get $2 local.get $3 i32.const 1 i32.shl i32.add - local.get $7 local.get $8 + local.get $9 i32.const 16 i32.shl i32.or @@ -12084,9 +12070,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $2 local.get $3 @@ -12434,12 +12419,13 @@ (local $264 i32) (local $265 i32) (local $266 i32) - (local $267 i64) + (local $267 i32) (local $268 i64) (local $269 i64) (local $270 i64) (local $271 i64) (local $272 i64) + (local $273 i64) global.get $std/string/str i32.const 32 i32.eq @@ -12558,7 +12544,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 i32.const 0 call $~lib/string/String.fromCharCode|trampoline @@ -12575,7 +12561,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 54 i32.const 0 call $~lib/string/String.fromCharCode|trampoline @@ -12592,7 +12578,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength i32.const 65590 i32.const 0 call $~lib/string/String.fromCharCode|trampoline @@ -20324,198 +20310,198 @@ call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $263 - loop $loop|0 - local.get $263 - i32.const 1114111 - i32.le_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $263 + loop $for-loop|0 + local.get $263 + i32.const 1114111 + i32.le_s + local.set $264 + local.get $264 + if local.get $263 call $~lib/string/String.fromCodePoint - local.set $264 - local.get $264 - call $~lib/string/String#toLowerCase local.set $265 - local.get $264 - call $~lib/string/String#toUpperCase + local.get $265 + call $~lib/string/String#toLowerCase local.set $266 local.get $265 + call $~lib/string/String#toUpperCase + local.set $267 + local.get $266 i32.const 0 call $~lib/string/String#codePointAt i64.extend_i32_s - local.set $269 - local.get $265 + local.set $270 + local.get $266 i32.const 1 call $~lib/string/String#codePointAt i64.extend_i32_s - local.tee $267 + local.tee $268 i64.const 0 i64.ge_u if - local.get $269 - local.get $267 + local.get $270 + local.get $268 i64.const 16 i64.shl i64.add - local.set $269 + local.set $270 end - local.get $265 + local.get $266 i32.const 2 call $~lib/string/String#codePointAt i64.extend_i32_s - local.tee $268 + local.tee $269 i64.const 0 i64.ge_u if + local.get $270 local.get $269 - local.get $268 i64.const 32 i64.shl i64.add - local.set $269 + local.set $270 end - local.get $266 + local.get $267 i32.const 0 call $~lib/string/String#codePointAt i64.extend_i32_s - local.set $270 - local.get $266 + local.set $271 + local.get $267 i32.const 1 call $~lib/string/String#codePointAt i64.extend_i32_s - local.tee $267 + local.tee $268 i64.const 0 i64.ge_u if - local.get $270 - local.get $267 + local.get $271 + local.get $268 i64.const 16 i64.shl i64.add - local.set $270 + local.set $271 end - local.get $266 + local.get $267 i32.const 2 call $~lib/string/String#codePointAt i64.extend_i32_s - local.tee $268 + local.tee $269 i64.const 0 i64.ge_u if - local.get $270 - local.get $268 + local.get $271 + local.get $269 i64.const 32 i64.shl i64.add - local.set $270 + local.set $271 end local.get $263 i32.const 0 call $std/string/toLowerCaseFromIndex i64.extend_i32_s - local.set $271 + local.set $272 local.get $263 i32.const 1 call $std/string/toLowerCaseFromIndex i64.extend_i32_s - local.tee $267 + local.tee $268 i64.const 0 i64.ge_u if - local.get $271 - local.get $267 + local.get $272 + local.get $268 i64.const 16 i64.shl i64.add - local.set $271 + local.set $272 end local.get $263 i32.const 2 call $std/string/toLowerCaseFromIndex i64.extend_i32_s - local.tee $268 + local.tee $269 i64.const 0 i64.ge_u if - local.get $271 - local.get $268 + local.get $272 + local.get $269 i64.const 32 i64.shl i64.add - local.set $271 + local.set $272 end local.get $263 i32.const 0 call $std/string/toUpperCaseFromIndex i64.extend_i32_s - local.set $272 + local.set $273 local.get $263 i32.const 1 call $std/string/toUpperCaseFromIndex i64.extend_i32_s - local.tee $267 + local.tee $268 i64.const 0 i64.ge_u if - local.get $272 - local.get $267 + local.get $273 + local.get $268 i64.const 16 i64.shl i64.add - local.set $272 + local.set $273 end local.get $263 i32.const 2 call $std/string/toUpperCaseFromIndex i64.extend_i32_s - local.tee $268 + local.tee $269 i64.const 0 i64.ge_u if - local.get $272 - local.get $268 + local.get $273 + local.get $269 i64.const 32 i64.shl i64.add - local.set $272 + local.set $273 end - local.get $269 - local.get $271 + local.get $270 + local.get $272 i64.ne if i32.const 28272 i32.const 3 local.get $263 f64.convert_i32_s - local.get $269 + local.get $270 f64.convert_i64_u - local.get $271 + local.get $272 f64.convert_i64_u f64.const 0 f64.const 0 call $~lib/builtins/trace end - local.get $270 - local.get $272 + local.get $271 + local.get $273 i64.ne if i32.const 28352 i32.const 3 local.get $263 f64.convert_i32_s - local.get $270 + local.get $271 f64.convert_i64_u - local.get $272 + local.get $273 f64.convert_i64_u f64.const 0 f64.const 0 call $~lib/builtins/trace end - local.get $269 - local.get $271 + local.get $270 + local.get $272 i64.eq i32.eqz if @@ -20526,8 +20512,8 @@ call $~lib/builtins/abort unreachable end - local.get $270 - local.get $272 + local.get $271 + local.get $273 i64.eq i32.eqz if @@ -20538,19 +20524,18 @@ call $~lib/builtins/abort unreachable end - local.get $264 - call $~lib/rt/pure/__release local.get $265 call $~lib/rt/pure/__release local.get $266 call $~lib/rt/pure/__release + local.get $267 + call $~lib/rt/pure/__release local.get $263 i32.const 1 i32.add local.set $263 - br $loop|0 + br $for-loop|0 end - unreachable end global.get $std/string/str call $~lib/rt/pure/__release @@ -21083,13 +21068,13 @@ global.get $std/string/str call $~lib/rt/pure/__retain ) - (func $start (; 109 ;) - global.get $~lib/started + (func $~start (; 109 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:std/string ) @@ -21230,6 +21215,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 i32.load offset=4 local.set $2 @@ -21240,19 +21226,19 @@ i32.shl i32.add local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 + local.set $5 + local.get $5 if - local.get $4 + local.get $5 local.get $1 call $~lib/rt/pure/__visit end @@ -21260,9 +21246,8 @@ i32.const 4 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end ) (func $~lib/array/Array#__visit_impl (; 113 ;) (param $0 i32) (param $1 i32) diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat index ba28d130f8..b035120cc0 100644 --- a/tests/compiler/std/symbol.optimized.wat +++ b/tests/compiler/std/symbol.optimized.wat @@ -51,7 +51,7 @@ (global $std/symbol/hasInstance (mut i32) (i32.const 0)) (global $std/symbol/isConcatSpreadable (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/symbol/Symbol (; 1 ;) (result i32) (local $0 i32) global.get $~lib/symbol/nextId @@ -328,7 +328,7 @@ local.get $2 i32.sub local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $1 i32.const 32 i32.ge_u @@ -359,7 +359,7 @@ i32.const 32 i32.add local.set $0 - br $continue|0 + br $while-continue|0 end end end @@ -489,19 +489,18 @@ local.get $0 local.tee $2 if - block $break|0 - i32.const 0 - local.set $0 - local.get $2 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $3 - loop $loop|0 - local.get $0 - local.get $3 - i32.ge_u - br_if $break|0 + i32.const 0 + local.set $0 + local.get $2 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $3 + loop $for-loop|0 + local.get $0 + local.get $3 + i32.lt_u + if local.get $1 local.get $0 local.get $2 @@ -515,9 +514,8 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end - unreachable end end local.get $1 @@ -539,7 +537,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -560,20 +558,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -586,18 +582,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -646,7 +640,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -664,15 +658,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -732,7 +724,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -776,7 +768,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -938,7 +930,7 @@ i32.add i32.load local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $0 if local.get $0 @@ -956,15 +948,13 @@ if local.get $0 return - else - local.get $0 - i32.load offset=8 - i32.const -2 - i32.and - local.set $0 - br $continue|0 end - unreachable + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 end end i32.const 0 @@ -1006,7 +996,7 @@ local.set $7 local.get $4 local.set $3 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $7 i32.ne @@ -1050,7 +1040,7 @@ i32.const 12 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $5 @@ -1280,7 +1270,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1306,10 +1296,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1330,11 +1320,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1355,7 +1345,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1367,7 +1357,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1388,10 +1378,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1407,11 +1397,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1425,7 +1415,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -1714,7 +1704,7 @@ unreachable end ) - (func $start (; 30 ;) + (func $~start (; 30 ;) call $start:std/symbol ) ) diff --git a/tests/compiler/std/symbol.untouched.wat b/tests/compiler/std/symbol.untouched.wat index d8924d59d3..2b8f16b117 100644 --- a/tests/compiler/std/symbol.untouched.wat +++ b/tests/compiler/std/symbol.untouched.wat @@ -56,7 +56,7 @@ (global $std/symbol/isConcatSpreadable (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 1092)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $~lib/rt/stub/__retain (; 1 ;) (param $0 i32) (result i32) local.get $0 ) @@ -201,6 +201,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -419,13 +420,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -452,9 +453,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -638,6 +638,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -647,20 +648,20 @@ i32.const 0 i32.ne if - block $break|0 - i32.const 0 - local.set $2 - local.get $0 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + local.get $0 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $1 local.get $0 local.get $2 @@ -674,9 +675,8 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end end local.get $1 @@ -691,6 +691,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -725,15 +726,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -750,39 +751,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -793,17 +796,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 15 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -881,6 +883,7 @@ (func $~lib/map/Map<~lib/string/String,usize>#find (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $1 call $~lib/rt/stub/__retain local.set $1 @@ -895,11 +898,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -915,10 +918,10 @@ end if local.get $3 - local.set $4 + local.set $5 local.get $1 call $~lib/rt/stub/__release - local.get $4 + local.get $5 return end local.get $3 @@ -928,9 +931,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 local.set $4 @@ -1020,6 +1022,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -1054,58 +1057,58 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load i32.store + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH<~lib/string/String>|inlined.3 (result i32) - local.get $9 + local.get $10 i32.load call $~lib/rt/stub/__retain - local.set $11 - local.get $11 - call $~lib/util/hash/hashStr local.set $12 - local.get $11 - call $~lib/rt/stub/__release local.get $12 + call $~lib/util/hash/hashStr + local.set $13 + local.get $12 + call $~lib/rt/stub/__release + local.get $13 br $~lib/util/hash/HASH<~lib/string/String>|inlined.3 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -1117,26 +1120,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/stub/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/stub/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -1144,19 +1146,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/stub/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/stub/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -1328,6 +1330,7 @@ ) (func $~lib/map/Map#find (; 22 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) local.get $0 i32.load local.get $2 @@ -1339,11 +1342,11 @@ i32.add i32.load local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + local.set $4 + local.get $4 + if local.get $3 i32.load offset=8 i32.const 1 @@ -1368,9 +1371,8 @@ i32.xor i32.and local.set $3 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 ) @@ -1386,6 +1388,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 i32.const 1 i32.add @@ -1420,53 +1423,53 @@ local.set $7 local.get $5 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.ne - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.ne + local.set $9 + local.get $9 + if local.get $6 - local.set $9 - local.get $9 + local.set $10 + local.get $10 i32.load offset=8 i32.const 1 i32.and i32.eqz if local.get $8 - local.set $10 + local.set $11 + local.get $11 local.get $10 - local.get $9 i32.load i32.store + local.get $11 local.get $10 - local.get $9 i32.load offset=4 i32.store offset=4 block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $9 + local.get $10 i32.load - local.set $11 - local.get $11 + local.set $12 + local.get $12 call $~lib/util/hash/hash32 br $~lib/util/hash/HASH|inlined.1 end local.get $1 i32.and - local.set $11 + local.set $12 local.get $3 - local.get $11 + local.get $12 i32.const 4 i32.mul i32.add - local.set $12 - local.get $10 - local.get $12 + local.set $13 + local.get $11 + local.get $13 i32.load i32.store offset=8 - local.get $12 + local.get $13 local.get $8 i32.store local.get $8 @@ -1478,26 +1481,25 @@ i32.const 12 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.tee $9 local.get $3 - local.tee $10 + local.tee $11 local.get $9 i32.load - local.tee $12 + local.tee $13 i32.ne if - local.get $10 + local.get $11 call $~lib/rt/stub/__retain - local.set $10 - local.get $12 + local.set $11 + local.get $13 call $~lib/rt/stub/__release end - local.get $10 + local.get $11 i32.store local.get $0 local.get $1 @@ -1505,19 +1507,19 @@ local.get $0 local.tee $9 local.get $5 - local.tee $11 + local.tee $12 local.get $9 i32.load offset=8 - local.tee $10 + local.tee $11 i32.ne if - local.get $11 + local.get $12 call $~lib/rt/stub/__retain - local.set $11 - local.get $10 + local.set $12 + local.get $11 call $~lib/rt/stub/__release end - local.get $11 + local.get $12 i32.store offset=8 local.get $0 local.get $4 @@ -1782,39 +1784,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -1822,13 +1824,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -1869,9 +1871,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2028,13 +2029,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2109,9 +2110,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2150,13 +2150,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2231,9 +2231,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2258,13 +2257,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2339,9 +2338,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -2811,6 +2809,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -2857,13 +2856,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2874,30 +2873,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -2914,37 +2912,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -2955,15 +2951,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -2980,17 +2976,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3003,16 +2998,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3024,9 +3018,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -3524,7 +3517,7 @@ local.get $3 call $~lib/rt/stub/__release ) - (func $start (; 35 ;) + (func $~start (; 35 ;) call $start:std/symbol ) ) diff --git a/tests/compiler/std/trace.optimized.wat b/tests/compiler/std/trace.optimized.wat index 800d1e8e97..2c3f342815 100644 --- a/tests/compiler/std/trace.optimized.wat +++ b/tests/compiler/std/trace.optimized.wat @@ -11,8 +11,8 @@ (data (i32.const 224) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00f\00o\00u\00r\00_\00i\00n\00t") (data (i32.const 256) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00f\00i\00v\00e\00_\00i\00n\00t") (data (i32.const 288) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00f\00i\00v\00e\00_\00d\00b\00l") - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $start:std/trace (; 1 ;) i32.const 32 @@ -80,13 +80,13 @@ f64.const 5.5 call $~lib/builtins/trace ) - (func $start (; 2 ;) - global.get $~lib/started + (func $~start (; 2 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:std/trace ) diff --git a/tests/compiler/std/trace.untouched.wat b/tests/compiler/std/trace.untouched.wat index c8f09e6946..fb85d40631 100644 --- a/tests/compiler/std/trace.untouched.wat +++ b/tests/compiler/std/trace.untouched.wat @@ -12,8 +12,8 @@ (data (i32.const 256) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00f\00i\00v\00e\00_\00i\00n\00t\00") (data (i32.const 288) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00f\00i\00v\00e\00_\00d\00b\00l\00") (table $0 1 funcref) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $start:std/trace (; 1 ;) i32.const 32 @@ -81,13 +81,13 @@ f64.const 5.5 call $~lib/builtins/trace ) - (func $start (; 2 ;) - global.get $~lib/started + (func $~start (; 2 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:std/trace ) diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index e72803ae6f..7369d651a4 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -203,7 +203,7 @@ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $std/typedarray/forEachCallCount (mut i32) (i32.const 0)) (global $std/typedarray/forEachSelf (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) @@ -212,8 +212,9 @@ (global $~lib/util/number/_K (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/tlsf/removeBlock (; 6 ;) (param $0 i32) (param $1 i32) (local $2 i32) @@ -810,7 +811,7 @@ i32.const 9312 i32.const 0 i32.store - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u @@ -824,7 +825,7 @@ i32.store offset=4 i32.const 0 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 i32.const 16 i32.lt_u @@ -844,14 +845,14 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end i32.const 7744 @@ -1163,7 +1164,7 @@ local.set $3 global.get $~lib/rt/pure/CUR local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $0 i32.lt_u @@ -1222,14 +1223,14 @@ i32.const 4 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $2 global.set $~lib/rt/pure/CUR local.get $5 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $2 i32.lt_u @@ -1241,12 +1242,12 @@ i32.const 4 i32.add local.set $0 - br $loop|1 + br $for-loop|1 end end local.get $5 local.set $0 - loop $loop|2 + loop $for-loop|2 local.get $0 local.get $2 i32.lt_u @@ -1265,7 +1266,7 @@ i32.const 4 i32.add local.set $0 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -1689,7 +1690,7 @@ i64.shl i64.or local.set $4 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 32 i32.ge_u @@ -1720,7 +1721,7 @@ i32.const 32 i32.add local.set $1 - br $continue|0 + br $while-continue|0 end end end @@ -1820,7 +1821,7 @@ i32.and i32.eq if - loop $continue|0 + loop $while-continue|0 local.get $0 i32.const 7 i32.and @@ -1846,10 +1847,10 @@ local.get $4 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end end - loop $continue|1 + loop $while-continue|1 local.get $3 i32.const 8 i32.ge_u @@ -1870,11 +1871,11 @@ i32.const 8 i32.add local.set $1 - br $continue|1 + br $while-continue|1 end end end - loop $continue|2 + loop $while-continue|2 local.get $3 if local.get $0 @@ -1895,7 +1896,7 @@ i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end end else @@ -1907,7 +1908,7 @@ i32.and i32.eq if - loop $continue|3 + loop $while-continue|3 local.get $0 local.get $3 i32.add @@ -1928,10 +1929,10 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $3 i32.const 8 i32.ge_u @@ -1947,11 +1948,11 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end end end - loop $continue|5 + loop $while-continue|5 local.get $3 if local.get $3 @@ -1965,7 +1966,7 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end end end @@ -3044,7 +3045,7 @@ (local $4 f64) (local $5 f64) (local $6 i32) - loop $loop|0 + loop $for-loop|0 local.get $3 local.get $1 i32.lt_s @@ -3060,42 +3061,43 @@ i32.const 1 i32.sub local.set $2 - loop $continue|1 - block $break|1 - local.get $2 - i32.const 0 - i32.lt_s - br_if $break|1 - local.get $0 - local.get $2 - i32.const 3 - i32.shl - i32.add - f64.load - local.set $5 - i32.const 2 - global.set $~lib/argc - local.get $4 - local.get $5 - call $~lib/util/sort/COMPARATOR~anonymous|0 - i32.const 0 - i32.ge_s - br_if $break|1 - local.get $2 - local.tee $6 - i32.const 1 - i32.sub - local.set $2 - local.get $0 - local.get $6 - i32.const 1 - i32.add - i32.const 3 - i32.shl - i32.add - local.get $5 - f64.store - br $continue|1 + loop $while-continue|1 + local.get $2 + i32.const 0 + i32.ge_s + if + block $while-break|1 + local.get $0 + local.get $2 + i32.const 3 + i32.shl + i32.add + f64.load + local.set $5 + i32.const 2 + global.set $~argumentsLength + local.get $4 + local.get $5 + call $~lib/util/sort/COMPARATOR~anonymous|0 + i32.const 0 + i32.ge_s + br_if $while-break|1 + local.get $2 + local.tee $6 + i32.const 1 + i32.sub + local.set $2 + local.get $0 + local.get $6 + i32.const 1 + i32.add + i32.const 3 + i32.shl + i32.add + local.get $5 + f64.store + br $while-continue|1 + end end end local.get $0 @@ -3111,7 +3113,7 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end end ) @@ -3140,14 +3142,14 @@ i32.const 1 i32.sub local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $3 i32.const 0 i32.gt_s if local.get $3 local.set $2 - loop $continue|1 + loop $while-continue|1 local.get $2 i32.const 1 i32.and @@ -3173,7 +3175,7 @@ i32.const 1 i32.shr_s local.set $2 - br $continue|1 + br $while-continue|1 end end local.get $0 @@ -3194,7 +3196,7 @@ f64.load local.set $6 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $6 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -3237,14 +3239,14 @@ i32.const 1 i32.sub local.set $3 - br $loop|0 + br $for-loop|0 end end local.get $1 i32.const 1 i32.sub local.set $3 - loop $loop|2 + loop $for-loop|2 local.get $3 i32.const 2 i32.ge_s @@ -3266,7 +3268,7 @@ f64.store i32.const 1 local.set $1 - loop $continue|3 + loop $while-continue|3 local.get $5 local.get $1 i32.const 5 @@ -3291,10 +3293,10 @@ if local.get $2 local.set $1 - br $continue|3 + br $while-continue|3 end end - loop $continue|4 + loop $while-continue|4 local.get $1 i32.const 0 i32.gt_s @@ -3310,7 +3312,7 @@ f64.load local.set $6 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $6 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -3349,14 +3351,14 @@ i32.const 1 i32.shr_s local.set $1 - br $continue|4 + br $while-continue|4 end end local.get $3 i32.const 1 i32.sub local.set $3 - br $loop|2 + br $for-loop|2 end end local.get $5 @@ -3400,7 +3402,7 @@ f64.load local.set $4 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $4 call $~lib/util/sort/COMPARATOR~anonymous|0 @@ -3714,7 +3716,7 @@ local.get $0 i32.load offset=8 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -3729,14 +3731,12 @@ if i32.const 0 return - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const 1 @@ -3877,7 +3877,7 @@ select end local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -3893,7 +3893,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $4 @@ -3939,7 +3939,7 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -3954,14 +3954,12 @@ if i32.const 0 return - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end i32.const 1 @@ -4165,13 +4163,13 @@ local.get $0 i32.load offset=8 local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $4 i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $1 local.get $3 @@ -4185,7 +4183,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -4256,13 +4254,13 @@ local.get $0 i32.load offset=8 local.set $5 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $5 i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $2 local.get $4 @@ -4277,7 +4275,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -4389,13 +4387,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $4 i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $1 @@ -4411,7 +4409,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -4486,13 +4484,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $4 i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $1 @@ -4508,7 +4506,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -4559,13 +4557,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $5 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $5 i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $4 local.get $2 @@ -4582,7 +4580,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -4719,13 +4717,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $5 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $5 i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $4 local.get $2 @@ -4742,7 +4740,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -4879,13 +4877,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $4 i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $1 @@ -4901,7 +4899,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -4955,13 +4953,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $4 i32.lt_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $1 @@ -4977,7 +4975,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5027,13 +5025,13 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $1 local.get $3 @@ -5047,7 +5045,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5099,13 +5097,13 @@ i32.const 1 i32.sub local.set $2 - loop $loop|0 + loop $for-loop|0 local.get $2 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $2 local.get $4 @@ -5120,7 +5118,7 @@ i32.const 1 i32.sub local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -5209,13 +5207,13 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $1 @@ -5231,7 +5229,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5283,13 +5281,13 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $1 @@ -5305,7 +5303,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5357,13 +5355,13 @@ i32.const 1 i32.sub local.set $2 - loop $loop|0 + loop $for-loop|0 local.get $2 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $4 local.get $2 @@ -5380,7 +5378,7 @@ i32.const 1 i32.sub local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -5465,13 +5463,13 @@ i32.const 1 i32.sub local.set $2 - loop $loop|0 + loop $for-loop|0 local.get $2 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $4 local.get $2 @@ -5488,7 +5486,7 @@ i32.const 1 i32.sub local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -5573,13 +5571,13 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $1 @@ -5595,7 +5593,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5645,13 +5643,13 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $1 i32.const 0 i32.ge_s if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $1 @@ -5667,7 +5665,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5730,13 +5728,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $1 local.get $4 i32.add @@ -5752,7 +5750,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5852,13 +5850,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $1 local.get $4 i32.add @@ -5874,7 +5872,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -5993,13 +5991,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $1 local.get $4 i32.add @@ -6015,7 +6013,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -6121,13 +6119,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $2 i32.const 1 @@ -6148,7 +6146,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -6277,13 +6275,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $2 i32.const 1 @@ -6304,7 +6302,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -6433,13 +6431,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $2 i32.const 2 @@ -6460,7 +6458,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -6566,13 +6564,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $2 i32.const 2 @@ -6593,7 +6591,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -6727,13 +6725,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $2 i32.const 3 @@ -6754,7 +6752,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -6883,13 +6881,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $2 i32.const 3 @@ -6910,7 +6908,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -7044,13 +7042,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $2 i32.const 2 @@ -7071,7 +7069,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -7205,13 +7203,13 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $2 i32.const 3 @@ -7232,7 +7230,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -7497,7 +7495,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -7508,7 +7506,7 @@ i32.load8_s local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -7529,7 +7527,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -7671,7 +7669,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -7682,7 +7680,7 @@ i32.load8_u local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -7703,7 +7701,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -7838,7 +7836,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -7849,7 +7847,7 @@ i32.load8_u local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -7870,7 +7868,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -8016,7 +8014,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -8029,7 +8027,7 @@ i32.load16_s local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -8052,7 +8050,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -8200,7 +8198,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -8213,7 +8211,7 @@ i32.load16_u local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -8236,7 +8234,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -8382,7 +8380,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -8395,7 +8393,7 @@ i32.load local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -8418,7 +8416,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -8564,7 +8562,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -8577,7 +8575,7 @@ i32.load local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -8600,7 +8598,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -8746,7 +8744,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -8759,7 +8757,7 @@ i64.load local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -8782,7 +8780,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -8928,7 +8926,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -8941,7 +8939,7 @@ i64.load local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -8964,7 +8962,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -9110,7 +9108,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -9123,7 +9121,7 @@ f32.load local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -9146,7 +9144,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -9292,7 +9290,7 @@ local.get $0 i32.load offset=4 local.set $7 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -9305,7 +9303,7 @@ f64.load local.set $6 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $2 local.get $0 @@ -9328,7 +9326,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -9462,13 +9460,13 @@ local.get $0 i32.load offset=8 local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 local.get $2 local.get $3 @@ -9484,7 +9482,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 0 @@ -9551,13 +9549,13 @@ local.get $0 i32.load offset=8 local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 local.get $2 local.get $3 @@ -9573,7 +9571,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 0 @@ -9685,13 +9683,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 local.get $3 local.get $2 @@ -9709,7 +9707,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 0 @@ -9776,13 +9774,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 local.get $3 local.get $2 @@ -9800,7 +9798,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 0 @@ -9866,13 +9864,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 local.get $3 local.get $2 @@ -9890,7 +9888,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 0 @@ -10004,13 +10002,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 local.get $3 local.get $2 @@ -10028,7 +10026,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 0 @@ -10142,13 +10140,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 local.get $3 local.get $2 @@ -10166,7 +10164,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 0 @@ -10237,13 +10235,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 1 local.get $3 local.get $2 @@ -10261,7 +10259,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 0 @@ -10327,13 +10325,13 @@ i32.load offset=8 local.set $4 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 i32.add @@ -10347,7 +10345,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -10420,13 +10418,13 @@ i32.load offset=8 local.set $4 block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 i32.add @@ -10440,7 +10438,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -10553,13 +10551,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $2 @@ -10577,7 +10575,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -10648,13 +10646,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $2 @@ -10672,7 +10670,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -10736,13 +10734,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $2 @@ -10760,7 +10758,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -10876,13 +10874,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $2 @@ -10900,7 +10898,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -11016,13 +11014,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $2 @@ -11040,7 +11038,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -11109,13 +11107,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 local.get $2 @@ -11133,7 +11131,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const -1 @@ -11212,13 +11210,13 @@ local.get $0 i32.load offset=8 local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $2 local.get $3 @@ -11235,7 +11233,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -11302,13 +11300,13 @@ local.get $0 i32.load offset=8 local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $2 local.get $3 @@ -11325,7 +11323,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -11440,13 +11438,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $3 local.get $2 @@ -11465,7 +11463,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -11526,13 +11524,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $3 local.get $2 @@ -11551,7 +11549,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -11618,13 +11616,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $3 local.get $2 @@ -11643,7 +11641,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -11754,13 +11752,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $3 local.get $2 @@ -11779,7 +11777,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -11946,7 +11944,7 @@ i32.shl end local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 128 i32.gt_s @@ -11972,7 +11970,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $1 @@ -12043,13 +12041,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $3 local.get $2 @@ -12068,7 +12066,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -12188,7 +12186,7 @@ i64.or end local.set $1 - loop $continue|0 + loop $while-continue|0 local.get $2 i64.const 1024 i64.gt_s @@ -12214,7 +12212,7 @@ i64.const 1 i64.sub local.set $2 - br $continue|0 + br $while-continue|0 end end local.get $1 @@ -12289,13 +12287,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength i32.const 0 local.get $3 local.get $2 @@ -12314,7 +12312,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end i32.const 1 @@ -12419,13 +12417,13 @@ local.get $0 i32.load offset=8 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $1 local.get $2 i32.add @@ -12437,7 +12435,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end ) @@ -12507,13 +12505,13 @@ local.get $0 i32.load offset=8 local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $3 i32.add @@ -12526,7 +12524,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end ) @@ -12687,13 +12685,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $1 i32.const 1 @@ -12707,7 +12705,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end ) @@ -12777,13 +12775,13 @@ local.get $0 call $~lib/typedarray/Int16Array#get:length local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $1 i32.const 1 @@ -12797,7 +12795,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end ) @@ -12902,13 +12900,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $2 i32.const 2 @@ -12923,7 +12921,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end ) @@ -13069,13 +13067,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $4 - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $2 i32.const 3 @@ -13090,7 +13088,7 @@ i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end end ) @@ -13242,13 +13240,13 @@ local.get $0 call $~lib/typedarray/Int32Array#get:length local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $1 i32.const 2 @@ -13262,7 +13260,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end ) @@ -13365,13 +13363,13 @@ local.get $0 call $~lib/typedarray/Int64Array#get:length local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $2 local.get $1 i32.const 3 @@ -13385,7 +13383,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end ) @@ -13454,7 +13452,7 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_u @@ -13483,7 +13481,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -13505,7 +13503,7 @@ call $~lib/typedarray/Int8Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -13534,7 +13532,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -13542,7 +13540,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -13569,14 +13567,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -13664,7 +13660,7 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_u @@ -13693,7 +13689,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -13776,7 +13772,7 @@ call $~lib/typedarray/Uint8Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -13801,7 +13797,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -13809,7 +13805,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -13834,14 +13830,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -13988,7 +13982,7 @@ call $~lib/typedarray/Uint8ClampedArray#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -14013,7 +14007,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -14021,7 +14015,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -14046,14 +14040,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -14140,7 +14132,7 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_u @@ -14173,7 +14165,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -14260,7 +14252,7 @@ call $~lib/typedarray/Int16Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -14289,7 +14281,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -14297,7 +14289,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -14324,14 +14316,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -14418,7 +14408,7 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_u @@ -14451,7 +14441,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -14538,7 +14528,7 @@ call $~lib/typedarray/Uint16Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -14563,7 +14553,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -14571,7 +14561,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -14596,14 +14586,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -14690,7 +14678,7 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_u @@ -14723,7 +14711,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -14745,7 +14733,7 @@ call $~lib/typedarray/Int32Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -14766,7 +14754,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -14774,7 +14762,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -14797,14 +14785,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -14956,7 +14942,7 @@ call $~lib/typedarray/Uint32Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -14977,7 +14963,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -14985,7 +14971,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -15008,14 +14994,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -15102,7 +15086,7 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_u @@ -15135,7 +15119,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -15222,7 +15206,7 @@ call $~lib/typedarray/Int64Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -15245,7 +15229,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -15253,7 +15237,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -15277,14 +15261,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -15435,7 +15417,7 @@ call $~lib/typedarray/Uint64Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -15458,7 +15440,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -15466,7 +15448,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -15490,14 +15472,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -15584,7 +15564,7 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_u @@ -15617,7 +15597,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -15704,7 +15684,7 @@ call $~lib/typedarray/Float32Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -15727,7 +15707,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -15735,7 +15715,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -15759,14 +15739,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -15853,7 +15831,7 @@ i32.const 1 i32.sub local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_u @@ -15886,7 +15864,7 @@ i32.const 1 i32.sub local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $3 @@ -15908,7 +15886,7 @@ call $~lib/typedarray/Float64Array#constructor local.tee $5 local.set $3 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -15931,7 +15909,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $2 @@ -15939,7 +15917,7 @@ call $~lib/rt/pure/__release i32.const 0 local.set $0 - loop $loop|1 + loop $for-loop|1 local.get $0 local.get $1 i32.lt_s @@ -15963,14 +15941,12 @@ i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 end end local.get $3 @@ -16076,7 +16052,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_s @@ -16094,7 +16070,7 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -16133,7 +16109,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 0 i32.ge_s @@ -16151,7 +16127,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -16164,7 +16140,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -16193,7 +16169,7 @@ call $~lib/typedarray/Int8Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -16212,7 +16188,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -16340,7 +16316,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 0 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -16353,7 +16329,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 11 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -16368,7 +16344,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const -1 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -16383,7 +16359,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 3 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -16613,7 +16589,7 @@ call $~lib/typedarray/Uint8Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -16630,7 +16606,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -16758,7 +16734,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 0 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -16771,7 +16747,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 11 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -16786,7 +16762,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const -1 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -16801,7 +16777,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 3 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -17030,7 +17006,7 @@ call $~lib/typedarray/Uint8ClampedArray#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -17047,7 +17023,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -17175,7 +17151,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 0 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -17188,7 +17164,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 11 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -17203,7 +17179,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const -1 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -17218,7 +17194,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 3 call $~lib/typedarray/Int8Array#lastIndexOf|trampoline @@ -17470,7 +17446,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_s @@ -17490,7 +17466,7 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -17529,7 +17505,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 0 i32.ge_s @@ -17549,7 +17525,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -17562,7 +17538,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -17591,7 +17567,7 @@ call $~lib/typedarray/Int16Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -17610,7 +17586,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -17738,7 +17714,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 0 call $~lib/typedarray/Int16Array#lastIndexOf|trampoline @@ -17751,7 +17727,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 11 call $~lib/typedarray/Int16Array#lastIndexOf|trampoline @@ -17766,7 +17742,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const -1 call $~lib/typedarray/Int16Array#lastIndexOf|trampoline @@ -17781,7 +17757,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 3 call $~lib/typedarray/Int16Array#lastIndexOf|trampoline @@ -18010,7 +17986,7 @@ call $~lib/typedarray/Uint16Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -18027,7 +18003,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -18155,7 +18131,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 0 call $~lib/typedarray/Int16Array#lastIndexOf|trampoline @@ -18168,7 +18144,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 11 call $~lib/typedarray/Int16Array#lastIndexOf|trampoline @@ -18183,7 +18159,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const -1 call $~lib/typedarray/Int16Array#lastIndexOf|trampoline @@ -18198,7 +18174,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 3 call $~lib/typedarray/Int16Array#lastIndexOf|trampoline @@ -18450,7 +18426,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_s @@ -18468,7 +18444,7 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -18507,7 +18483,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 0 i32.ge_s @@ -18525,7 +18501,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -18538,7 +18514,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -18567,7 +18543,7 @@ call $~lib/typedarray/Int32Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -18582,7 +18558,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -18710,7 +18686,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 0 call $~lib/typedarray/Int32Array#lastIndexOf|trampoline @@ -18723,7 +18699,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 11 call $~lib/typedarray/Int32Array#lastIndexOf|trampoline @@ -18738,7 +18714,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const -1 call $~lib/typedarray/Int32Array#lastIndexOf|trampoline @@ -18753,7 +18729,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 3 call $~lib/typedarray/Int32Array#lastIndexOf|trampoline @@ -18983,7 +18959,7 @@ call $~lib/typedarray/Uint32Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -18998,7 +18974,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -19126,7 +19102,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 0 call $~lib/typedarray/Int32Array#lastIndexOf|trampoline @@ -19139,7 +19115,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 11 call $~lib/typedarray/Int32Array#lastIndexOf|trampoline @@ -19154,7 +19130,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const -1 call $~lib/typedarray/Int32Array#lastIndexOf|trampoline @@ -19169,7 +19145,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 3 call $~lib/typedarray/Int32Array#lastIndexOf|trampoline @@ -19421,7 +19397,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_s @@ -19439,7 +19415,7 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -19478,7 +19454,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 0 i32.ge_s @@ -19496,7 +19472,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -19509,7 +19485,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -19538,7 +19514,7 @@ call $~lib/typedarray/Int64Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -19554,7 +19530,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -19682,7 +19658,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i64.const 0 call $~lib/typedarray/Int64Array#lastIndexOf|trampoline @@ -19695,7 +19671,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i64.const 11 call $~lib/typedarray/Int64Array#lastIndexOf|trampoline @@ -19710,7 +19686,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i64.const -1 call $~lib/typedarray/Int64Array#lastIndexOf|trampoline @@ -19725,7 +19701,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i64.const 3 call $~lib/typedarray/Int64Array#lastIndexOf|trampoline @@ -19954,7 +19930,7 @@ call $~lib/typedarray/Uint64Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -19970,7 +19946,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -20098,7 +20074,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i64.const 0 call $~lib/typedarray/Int64Array#lastIndexOf|trampoline @@ -20111,7 +20087,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i64.const 11 call $~lib/typedarray/Int64Array#lastIndexOf|trampoline @@ -20126,7 +20102,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i64.const -1 call $~lib/typedarray/Int64Array#lastIndexOf|trampoline @@ -20141,7 +20117,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i64.const 3 call $~lib/typedarray/Int64Array#lastIndexOf|trampoline @@ -20393,7 +20369,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_s @@ -20411,7 +20387,7 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -20450,7 +20426,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 0 i32.ge_s @@ -20468,7 +20444,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -20481,7 +20457,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -20510,7 +20486,7 @@ call $~lib/typedarray/Float32Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -20526,7 +20502,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -20654,7 +20630,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 f32.const 0 call $~lib/typedarray/Float32Array#lastIndexOf|trampoline @@ -20667,7 +20643,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 f32.const 11 call $~lib/typedarray/Float32Array#lastIndexOf|trampoline @@ -20682,7 +20658,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 f32.const -1 call $~lib/typedarray/Float32Array#lastIndexOf|trampoline @@ -20697,7 +20673,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 f32.const 3 call $~lib/typedarray/Float32Array#lastIndexOf|trampoline @@ -20949,7 +20925,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 local.get $3 i32.lt_s @@ -20967,7 +20943,7 @@ i32.const 1 i32.add local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -21006,7 +20982,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $2 i32.const 0 i32.ge_s @@ -21024,7 +21000,7 @@ i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end end i32.const -1 @@ -21037,7 +21013,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -21066,7 +21042,7 @@ call $~lib/typedarray/Float64Array#constructor local.tee $3 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $2 i32.lt_s @@ -21082,7 +21058,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -21210,7 +21186,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 f64.const 0 call $~lib/typedarray/Float64Array#lastIndexOf|trampoline @@ -21223,7 +21199,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 f64.const 11 call $~lib/typedarray/Float64Array#lastIndexOf|trampoline @@ -21238,7 +21214,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 f64.const -1 call $~lib/typedarray/Float64Array#lastIndexOf|trampoline @@ -21253,7 +21229,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 f64.const 3 call $~lib/typedarray/Float64Array#lastIndexOf|trampoline @@ -21491,7 +21467,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $1 local.get $2 i32.lt_s @@ -21519,7 +21495,7 @@ i32.const 1 i32.add local.set $1 - br $continue|0 + br $while-continue|0 end end i32.const 0 @@ -21546,7 +21522,7 @@ local.get $0 i32.load offset=4 local.set $0 - loop $continue|0 + loop $while-continue|0 local.get $1 local.get $2 i32.lt_s @@ -21574,7 +21550,7 @@ i32.const 1 i32.add local.set $1 - br $continue|0 + br $while-continue|0 end end i32.const 0 @@ -21630,7 +21606,7 @@ ) (func $~lib/util/number/utoa_simple (; 360 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - loop $continue|0 + loop $do-continue|0 local.get $1 i32.const 10 i32.div_u @@ -21649,7 +21625,7 @@ i32.add i32.store16 local.tee $1 - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa32 (; 361 ;) (param $0 i32) (result i32) @@ -21873,7 +21849,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -21909,7 +21885,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -21958,7 +21934,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -21979,20 +21955,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $0 i32.load16_u local.tee $3 @@ -22005,18 +21979,16 @@ local.get $4 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -22212,7 +22184,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -22248,7 +22220,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -22501,7 +22473,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -22539,7 +22511,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -22707,7 +22679,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -22745,7 +22717,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -22925,7 +22897,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -22963,7 +22935,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -23125,7 +23097,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -23163,7 +23135,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -23314,7 +23286,7 @@ ) (func $~lib/util/number/utoa_simple (; 393 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i64) - loop $continue|0 + loop $do-continue|0 local.get $1 i64.const 10 i64.div_u @@ -23336,7 +23308,7 @@ local.tee $1 i64.const 0 i64.ne - br_if $continue|0 + br_if $do-continue|0 end ) (func $~lib/util/number/itoa64 (; 394 ;) (param $0 i64) (result i32) @@ -23506,7 +23478,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -23544,7 +23516,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -23765,7 +23737,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -23803,7 +23775,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -23955,7 +23927,7 @@ i32.const 3284 i32.load local.set $13 - loop $continue|0 + loop $while-continue|0 local.get $4 i32.const 0 i32.gt_s @@ -24113,81 +24085,83 @@ i64.add local.tee $1 local.get $5 - i64.gt_u - br_if $continue|0 - local.get $4 - global.get $~lib/util/number/_K - i32.add - global.set $~lib/util/number/_K - local.get $13 - local.get $4 - i32.const 2 - i32.shl - i32.add - i64.load32_u - local.get $10 - i64.extend_i32_s - i64.shl - local.set $3 - local.get $0 - local.get $6 - i32.const 1 - i32.sub - i32.const 1 - i32.shl - i32.add - local.tee $2 - i32.load16_u - local.set $4 - loop $continue|2 + i64.le_u + if + local.get $4 + global.get $~lib/util/number/_K + i32.add + global.set $~lib/util/number/_K + local.get $13 + local.get $4 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.get $10 + i64.extend_i32_s + i64.shl + local.set $3 + local.get $0 + local.get $6 i32.const 1 - local.get $9 - local.get $1 - i64.sub - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.sub - i64.gt_u - local.get $1 - local.get $3 - i64.add - local.get $9 - i64.lt_u - select - i32.const 0 - local.get $5 - local.get $1 - i64.sub - local.get $3 - i64.ge_u - i32.const 0 - local.get $1 - local.get $9 - i64.lt_u - select - select - if - local.get $4 + i32.sub + i32.const 1 + i32.shl + i32.add + local.tee $2 + i32.load16_u + local.set $4 + loop $while-continue|3 i32.const 1 - i32.sub - local.set $4 + local.get $9 + local.get $1 + i64.sub local.get $1 local.get $3 i64.add - local.set $1 - br $continue|2 + local.get $9 + i64.sub + i64.gt_u + local.get $1 + local.get $3 + i64.add + local.get $9 + i64.lt_u + select + i32.const 0 + local.get $5 + local.get $1 + i64.sub + local.get $3 + i64.ge_u + i32.const 0 + local.get $1 + local.get $9 + i64.lt_u + select + select + if + local.get $4 + i32.const 1 + i32.sub + local.set $4 + local.get $1 + local.get $3 + i64.add + local.set $1 + br $while-continue|3 + end end + local.get $2 + local.get $4 + i32.store16 + local.get $6 + return end - local.get $2 - local.get $4 - i32.store16 - local.get $6 - return + br $while-continue|0 end end - loop $continue|3 (result i32) + loop $while-continue|4 (result i32) local.get $5 i64.const 10 i64.mul @@ -24234,7 +24208,7 @@ local.tee $12 local.get $5 i64.ge_u - br_if $continue|3 + br_if $while-continue|4 local.get $4 global.get $~lib/util/number/_K i32.add @@ -24262,7 +24236,7 @@ local.tee $2 i32.load16_u local.set $4 - loop $continue|4 + loop $while-continue|6 i32.const 1 local.get $3 local.get $1 @@ -24300,7 +24274,7 @@ local.get $11 i64.add local.set $1 - br $continue|4 + br $while-continue|6 end end local.get $2 @@ -24340,7 +24314,7 @@ i32.const 0 end if (result i32) - loop $loop|0 + loop $for-loop|0 local.get $1 local.get $3 i32.lt_s @@ -24356,7 +24330,7 @@ i32.const 1 i32.add local.set $1 - br $loop|0 + br $for-loop|0 end end local.get $0 @@ -24428,7 +24402,7 @@ i32.store i32.const 2 local.set $2 - loop $loop|1 + loop $for-loop|1 local.get $2 local.get $3 i32.lt_s @@ -24444,7 +24418,7 @@ i32.const 1 i32.add local.set $2 - br $loop|1 + br $for-loop|1 end end local.get $1 @@ -24461,34 +24435,34 @@ local.get $0 i32.const 4 i32.add - local.tee $0 + local.tee $1 local.get $3 i32.const 1 i32.sub - local.tee $2 + local.tee $0 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if i32.const 0 - local.get $2 + local.get $0 i32.sub - local.set $2 + local.set $0 end - local.get $2 - local.get $2 + local.get $0 + local.get $0 call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.tee $2 + local.tee $0 call $~lib/util/number/utoa_simple - local.get $0 + local.get $1 i32.const 45 i32.const 43 - local.get $1 + local.get $2 select i32.store16 - local.get $2 + local.get $0 i32.const 2 i32.add else @@ -25024,7 +24998,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -25063,7 +25037,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -25202,7 +25176,7 @@ local.set $2 i32.const 0 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $5 local.get $3 i32.lt_s @@ -25240,7 +25214,7 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end end local.get $6 @@ -25475,14 +25449,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Int8Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -25501,7 +25474,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -25514,55 +25487,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Int8Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Int8Array#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Int8Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Int8Array#__get - local.get $6 i32.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array.wrap (; 421 ;) (param $0 i32) (result i32) @@ -25630,14 +25592,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Uint8Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -25654,7 +25615,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -25667,55 +25628,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Uint8Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Uint8Array#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Uint8Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Uint8Array#__get - local.get $6 i32.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8ClampedArray.wrap (; 423 ;) (param $0 i32) (result i32) @@ -25783,14 +25733,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Uint8ClampedArray#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -25807,7 +25756,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -25820,55 +25769,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Uint8ClampedArray.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Uint8ClampedArray#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Uint8ClampedArray#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Uint8ClampedArray#__get - local.get $6 i32.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int16Array.wrap (; 425 ;) (param $0 i32) (result i32) @@ -25936,14 +25874,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Int16Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -25962,7 +25899,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -25975,55 +25912,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Int16Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Int16Array#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Int16Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Int16Array#__get - local.get $6 i32.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint16Array.wrap (; 427 ;) (param $0 i32) (result i32) @@ -26091,14 +26017,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Uint16Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -26115,7 +26040,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -26128,55 +26053,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Uint16Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Uint16Array#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Uint16Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Uint16Array#__get - local.get $6 i32.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int32Array.wrap (; 429 ;) (param $0 i32) (result i32) @@ -26244,14 +26158,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Int32Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -26266,7 +26179,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -26279,55 +26192,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Int32Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Int32Array#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Int32Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Int32Array#__get - local.get $6 i32.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint32Array.wrap (; 431 ;) (param $0 i32) (result i32) @@ -26395,14 +26297,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Uint32Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -26417,7 +26318,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -26430,55 +26331,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Uint32Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Uint32Array#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Uint32Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Uint32Array#__get - local.get $6 i32.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int64Array.wrap (; 433 ;) (param $0 i32) (result i32) @@ -26546,14 +26436,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i64) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Int64Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -26569,7 +26458,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -26582,55 +26471,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Int64Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Int64Array#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Int64Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Int64Array#__get - local.get $6 i64.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint64Array.wrap (; 435 ;) (param $0 i32) (result i32) @@ -26698,14 +26576,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i64) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Uint64Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -26721,7 +26598,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -26734,55 +26611,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Uint64Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Uint64Array#__get - local.set $6 local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Uint64Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Uint64Array#__get - local.get $6 i64.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float32Array.wrap (; 437 ;) (param $0 i32) (result i32) @@ -26850,14 +26716,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 f32) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Float32Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -26873,7 +26738,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -26886,53 +26751,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Float32Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Float32Array#__get local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Float32Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Float32Array#__get f32.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float64Array.wrap (; 439 ;) (param $0 i32) (result i32) @@ -27000,14 +26856,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 f64) i32.const 3452 i32.load local.tee $3 call $~lib/typedarray/Float64Array#constructor local.tee $5 local.set $1 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -27023,7 +26878,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end local.get $1 @@ -27036,53 +26891,44 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $4 + local.set $0 i32.const 1 - global.set $~lib/argc - local.get $4 + global.set $~argumentsLength + local.get $0 call $~lib/typedarray/Float64Array.wrap - local.set $2 - i32.const 0 - local.set $0 - loop $loop|1 - local.get $0 + local.set $4 + loop $for-loop|1 + local.get $2 local.get $3 i32.lt_s if local.get $1 - local.get $0 - call $~lib/typedarray/Float64Array#__get local.get $2 - i32.eqz - if - unreachable - end + call $~lib/typedarray/Float64Array#__get + local.get $4 local.get $2 - local.get $0 call $~lib/typedarray/Float64Array#__get f64.ne if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable - else - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $loop|1 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 end end local.get $5 call $~lib/rt/pure/__release - local.get $4 + local.get $0 call $~lib/rt/pure/__release - local.get $2 + local.get $4 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (; 441 ;) (param $0 i32) @@ -27113,7 +26959,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -27132,7 +26978,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -27150,12 +26996,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -27183,18 +27029,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -27231,7 +27075,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -27261,7 +27105,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -27296,7 +27140,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -27315,7 +27159,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -27352,7 +27196,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -27382,7 +27226,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -27439,7 +27283,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -27458,7 +27302,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -27647,12 +27491,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -27680,18 +27524,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -27728,7 +27570,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -27758,7 +27600,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -27795,7 +27637,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -27825,7 +27667,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -27996,7 +27838,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -28028,7 +27870,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28046,12 +27888,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -28079,18 +27921,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -28127,7 +27967,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -28161,7 +28001,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28207,7 +28047,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -28243,7 +28083,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28280,7 +28120,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -28314,7 +28154,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28360,7 +28200,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -28392,7 +28232,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28429,7 +28269,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -28459,7 +28299,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28631,7 +28471,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -28652,7 +28492,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28670,12 +28510,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -28703,18 +28543,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -28751,7 +28589,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -28783,7 +28621,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28818,7 +28656,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -28839,7 +28677,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28876,7 +28714,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -28908,7 +28746,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -28939,7 +28777,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -28958,7 +28796,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29020,7 +28858,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -29039,7 +28877,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29196,12 +29034,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -29236,18 +29074,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -29284,7 +29120,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -29316,7 +29152,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29353,7 +29189,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -29385,7 +29221,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29580,12 +29416,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -29613,18 +29449,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -29662,7 +29496,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -29693,7 +29527,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29728,7 +29562,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -29749,7 +29583,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29786,7 +29620,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -29818,7 +29652,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29849,7 +29683,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -29868,7 +29702,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29903,7 +29737,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -29924,7 +29758,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -29960,7 +29794,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -29979,7 +29813,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -30137,12 +29971,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -30170,18 +30004,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -30219,7 +30051,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -30250,7 +30082,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -30287,7 +30119,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -30319,7 +30151,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -30491,7 +30323,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -30512,7 +30344,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -30530,12 +30362,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -30563,18 +30395,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -30611,7 +30441,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -30643,7 +30473,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -30707,7 +30537,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -30738,7 +30568,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -30769,7 +30599,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -30788,7 +30618,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -30823,7 +30653,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -30844,7 +30674,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -30880,7 +30710,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -30899,7 +30729,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31055,12 +30885,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $3 i32.lt_s @@ -31088,18 +30918,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -31136,7 +30964,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -31168,7 +30996,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31206,7 +31034,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -31237,7 +31065,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31408,7 +31236,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -31429,7 +31257,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31448,12 +31276,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -31488,18 +31316,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -31534,7 +31360,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -31556,7 +31382,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31587,7 +31413,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -31607,7 +31433,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31642,7 +31468,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -31664,7 +31490,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31700,7 +31526,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -31720,7 +31546,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31879,7 +31705,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -31901,7 +31727,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -31920,12 +31746,12 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - loop $loop|0 + loop $for-loop|0 local.get $2 local.get $4 i32.lt_s @@ -31958,18 +31784,16 @@ call $~lib/builtins/trace i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable - else - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $loop|0 end - unreachable + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 end end ) @@ -32005,7 +31829,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -32027,7 +31851,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -32063,7 +31887,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -32084,7 +31908,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -32115,7 +31939,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -32135,7 +31959,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -32170,7 +31994,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -32192,7 +32016,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -32228,7 +32052,7 @@ local.set $3 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $3 i32.lt_s @@ -32248,7 +32072,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -32409,7 +32233,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -32443,7 +32267,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -32479,7 +32303,7 @@ local.set $4 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $4 i32.lt_s @@ -32511,7 +32335,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -32543,7 +32367,7 @@ local.set $1 i32.const 0 local.set $0 - loop $loop|0 + loop $for-loop|0 local.get $0 local.get $1 i32.lt_s @@ -32568,7 +32392,7 @@ i32.const 1 i32.add local.set $0 - br $loop|0 + br $for-loop|0 end end ) @@ -32826,7 +32650,7 @@ unreachable end i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 call $~lib/typedarray/Float64Array#sort call $~lib/rt/pure/__release @@ -34614,13 +34438,13 @@ local.get $7 call $~lib/rt/pure/__release ) - (func $start (; 521 ;) - global.get $~lib/started + (func $~start (; 521 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:std/typedarray ) diff --git a/tests/compiler/std/typedarray.ts b/tests/compiler/std/typedarray.ts index fb2f05f4cb..62b06ab35f 100644 --- a/tests/compiler/std/typedarray.ts +++ b/tests/compiler/std/typedarray.ts @@ -653,7 +653,7 @@ function testArrayWrap, T extends number>(): void { array[i] = values[i]; } var buffer = array.buffer.slice(array.byteOffset, array.byteOffset + array.byteLength); - var result: TArray | null = null; + var result: TArray; if (array instanceof Int8Array) { result = Int8Array.wrap(buffer); } else if (array instanceof Uint8Array) { @@ -676,9 +676,12 @@ function testArrayWrap, T extends number>(): void { result = Float32Array.wrap(buffer); } else if (array instanceof Float64Array) { result = Float64Array.wrap(buffer); + } else { + assert(false); + return; } for (let i = 0; i < length; i++) { - assert(array[i] == result![i]); + assert(array[i] == result[i]); } } diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index e59231ded3..62d39ac3a0 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -208,7 +208,7 @@ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/pure/END (mut i32) (i32.const 0)) - (global $~lib/argc (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $std/typedarray/forEachCallCount (mut i32) (i32.const 0)) (global $std/typedarray/forEachSelf (mut i32) (i32.const 0)) @@ -227,10 +227,11 @@ (global $std/typedarray/setSource2 (mut i32) (i32.const 4016)) (global $std/typedarray/setSource3 (mut i32) (i32.const 4096)) (global $std/typedarray/setSource7 (mut i32) (i32.const 4160)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 7984)) (global $~lib/heap/__heap_base i32 (i32.const 8180)) - (export "_start" (func $start)) + (export "__argumentsLength" (global $~argumentsLength)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/tlsf/removeBlock (; 6 ;) (param $0 i32) (param $1 i32) (local $2 i32) @@ -951,6 +952,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) + (local $11 i32) global.get $~lib/rt/tlsf/ROOT local.set $0 local.get $0 @@ -1004,71 +1007,69 @@ local.get $5 local.get $4 i32.store offset=1568 - block $break|0 - i32.const 0 - local.set $5 - loop $loop|0 - local.get $5 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if local.get $0 - local.set $7 + local.set $8 local.get $5 - local.set $6 + local.set $7 i32.const 0 - local.set $4 + local.set $6 + local.get $8 local.get $7 - local.get $6 i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=4 - block $break|1 - i32.const 0 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u local.set $7 - loop $loop|1 - local.get $7 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $7 + if local.get $0 - local.set $9 + local.set $11 local.get $5 - local.set $8 - local.get $7 - local.set $6 - i32.const 0 - local.set $4 - local.get $9 + local.set $10 local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 i32.const 4 i32.shl - local.get $6 + local.get $9 i32.add i32.const 2 i32.shl i32.add - local.get $4 + local.get $6 i32.store offset=96 - local.get $7 + local.get $8 i32.const 1 i32.add - local.set $7 - br $loop|1 + local.set $8 + br $for-loop|1 end - unreachable end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $1 @@ -1457,34 +1458,35 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 - block $break|0 - local.get $1 - local.set $2 - global.get $~lib/rt/pure/CUR - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if local.get $2 i32.load - local.set $4 - local.get $4 - i32.load offset=4 local.set $5 local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.const 0 @@ -1493,23 +1495,23 @@ i32.const 0 end if - local.get $4 + local.get $5 call $~lib/rt/pure/markGray local.get $1 - local.get $4 + local.get $5 i32.store local.get $1 i32.const 4 i32.add local.set $1 else - local.get $5 + local.get $6 i32.const 1879048192 i32.and i32.const 0 i32.eq if (result i32) - local.get $5 + local.get $6 i32.const 268435455 i32.and i32.eqz @@ -1518,11 +1520,11 @@ end if global.get $~lib/rt/tlsf/ROOT - local.get $4 + local.get $5 call $~lib/rt/tlsf/freeBlock else - local.get $4 local.get $5 + local.get $6 i32.const -2147483648 i32.const -1 i32.xor @@ -1534,21 +1536,20 @@ i32.const 4 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 global.set $~lib/rt/pure/CUR - block $break|1 - local.get $0 - local.set $3 - loop $loop|1 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load call $~lib/rt/pure/scan @@ -1556,39 +1557,37 @@ i32.const 4 i32.add local.set $3 - br $loop|1 + br $for-loop|1 end - unreachable end - block $break|2 - local.get $0 - local.set $3 - loop $loop|2 - local.get $3 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if local.get $3 i32.load - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.load offset=4 i32.const -2147483648 i32.const -1 i32.xor i32.and i32.store offset=4 - local.get $2 + local.get $4 call $~lib/rt/pure/collectWhite local.get $3 i32.const 4 i32.add local.set $3 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $0 global.set $~lib/rt/pure/CUR @@ -1900,6 +1899,7 @@ (local $6 i32) (local $7 i32) (local $8 i64) + (local $9 i32) block $~lib/util/memory/memset|inlined.0 local.get $0 local.set $5 @@ -2118,13 +2118,13 @@ i64.shl i64.or local.set $8 - block $break|0 - loop $continue|0 - local.get $3 - i32.const 32 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $3 + i32.const 32 + i32.ge_u + local.set $9 + local.get $9 + if local.get $5 local.get $8 i64.store @@ -2151,9 +2151,8 @@ i32.const 32 i32.add local.set $5 - br $continue|0 + br $while-continue|0 end - unreachable end end ) @@ -2243,39 +2242,39 @@ (local $3 i32) (local $4 i32) (local $5 i32) - block $break|0 - loop $continue|0 - local.get $2 - if (result i32) - local.get $1 - i32.const 3 - i32.and - else - i32.const 0 - end - i32.eqz - br_if $break|0 + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if local.get $0 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $0 - local.get $5 + local.get $6 local.get $1 - local.tee $5 + local.tee $6 i32.const 1 i32.add local.set $1 - local.get $5 + local.get $6 i32.load8_u i32.store8 local.get $2 i32.const 1 i32.sub local.set $2 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 i32.const 3 @@ -2283,13 +2282,13 @@ i32.const 0 i32.eq if - block $break|1 - loop $continue|1 - local.get $2 - i32.const 16 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if local.get $0 local.get $1 i32.load @@ -2330,9 +2329,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|1 + br $while-continue|1 end - unreachable end local.get $2 i32.const 8 @@ -2489,13 +2487,13 @@ i32.const 3 i32.sub local.set $2 - block $break|3 - loop $continue|3 - local.get $2 - i32.const 17 - i32.ge_u - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 1 i32.add @@ -2570,9 +2568,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|3 + br $while-continue|3 end - unreachable end br $break|2 end @@ -2611,13 +2608,13 @@ i32.const 2 i32.sub local.set $2 - block $break|4 - loop $continue|4 - local.get $2 - i32.const 18 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 2 i32.add @@ -2692,9 +2689,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|4 + br $while-continue|4 end - unreachable end br $break|2 end @@ -2719,13 +2715,13 @@ i32.const 1 i32.sub local.set $2 - block $break|5 - loop $continue|5 - local.get $2 - i32.const 19 - i32.ge_u - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if local.get $1 i32.const 3 i32.add @@ -2800,9 +2796,8 @@ i32.const 16 i32.sub local.set $2 - br $continue|5 + br $while-continue|5 end - unreachable end br $break|2 end @@ -3272,6 +3267,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) block $~lib/util/memory/memmove|inlined.0 local.get $0 local.set $5 @@ -3318,13 +3314,13 @@ i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3335,30 +3331,29 @@ i32.sub local.set $3 local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 - br $continue|0 + br $while-continue|0 end - unreachable end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $5 local.get $4 i64.load @@ -3375,37 +3370,35 @@ i32.const 8 i32.add local.set $4 - br $continue|1 + br $while-continue|1 end - unreachable end end - block $break|2 - loop $continue|2 - local.get $3 - i32.eqz - br_if $break|2 + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $5 - local.get $6 + local.get $7 local.get $4 - local.tee $6 + local.tee $7 i32.const 1 i32.add local.set $4 - local.get $6 + local.get $7 i32.load8_u i32.store8 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + br $while-continue|2 end - unreachable end else local.get $4 @@ -3416,15 +3409,15 @@ i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - i32.eqz - br_if $break|3 + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if local.get $3 i32.eqz if @@ -3441,17 +3434,16 @@ i32.add i32.load8_u i32.store8 - br $continue|3 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if local.get $3 i32.const 8 i32.sub @@ -3464,16 +3456,15 @@ i32.add i64.load i64.store - br $continue|4 + br $while-continue|4 end - unreachable end end - block $break|5 - loop $continue|5 - local.get $3 - i32.eqz - br_if $break|5 + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if local.get $5 local.get $3 i32.const 1 @@ -3485,9 +3476,8 @@ i32.add i32.load8_u i32.store8 - br $continue|5 + br $while-continue|5 end - unreachable end end end @@ -4844,90 +4834,92 @@ ) (func $~lib/util/sort/insertionSort (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) - (local $4 f64) - (local $5 i32) - (local $6 f64) + (local $4 i32) + (local $5 f64) + (local $6 i32) (local $7 i32) - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + (local $8 f64) + (local $9 i32) + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $1 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 i32.const 3 i32.shl i32.add f64.load - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - block $break|1 - loop $continue|1 - local.get $5 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $5 - i32.const 3 - i32.shl - i32.add - f64.load - local.set $6 - i32.const 2 - global.set $~lib/argc - local.get $4 + local.set $6 + block $while-break|1 + loop $while-continue|1 local.get $6 - local.get $2 - call_indirect (type $f64_f64_=>_i32) i32.const 0 - i32.lt_s + i32.ge_s + local.set $7 + local.get $7 if local.get $0 - local.get $5 - local.tee $7 - i32.const 1 - i32.sub - local.set $5 - local.get $7 - i32.const 1 - i32.add + local.get $6 i32.const 3 i32.shl i32.add - local.get $6 - f64.store - else - br $break|1 + f64.load + local.set $8 + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.get $8 + local.get $2 + call_indirect (type $f64_f64_=>_i32) + i32.const 0 + i32.lt_s + if + local.get $0 + local.get $6 + local.tee $9 + i32.const 1 + i32.sub + local.set $6 + local.get $9 + i32.const 1 + i32.add + i32.const 3 + i32.shl + i32.add + local.get $8 + f64.store + else + br $while-break|1 + end + br $while-continue|1 end - br $continue|1 end - unreachable end local.get $0 - local.get $5 + local.get $6 i32.const 1 i32.add i32.const 3 i32.shl i32.add - local.get $4 + local.get $5 f64.store local.get $3 i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end ) (func $~lib/util/sort/weakHeapSort (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i32) @@ -4936,9 +4928,11 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 f64) + (local $8 i32) (local $9 f64) (local $10 f64) + (local $11 i32) + (local $12 f64) local.get $1 i32.const 31 i32.add @@ -4955,73 +4949,72 @@ i32.const 0 local.get $3 call $~lib/memory/memory.fill - block $break|0 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|0 - local.get $5 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 0 + i32.gt_s + local.set $6 + local.get $6 + if local.get $5 - local.set $6 - block $break|1 - loop $continue|1 - local.get $6 - i32.const 1 - i32.and - local.get $4 - local.get $6 - i32.const 6 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load - local.get $6 - i32.const 1 - i32.shr_s - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.eq - i32.eqz - br_if $break|1 - local.get $6 + local.set $7 + loop $while-continue|1 + local.get $7 + i32.const 1 + i32.and + local.get $4 + local.get $7 + i32.const 6 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $7 + i32.const 1 + i32.shr_s + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.eq + local.set $8 + local.get $8 + if + local.get $7 i32.const 1 i32.shr_s - local.set $6 - br $continue|1 + local.set $7 + br $while-continue|1 end - unreachable end - local.get $6 + local.get $7 i32.const 1 i32.shr_s - local.set $7 + local.set $8 local.get $0 - local.get $7 + local.get $8 i32.const 3 i32.shl i32.add f64.load - local.set $8 + local.set $9 local.get $0 local.get $5 i32.const 3 i32.shl i32.add f64.load - local.set $9 + local.set $10 i32.const 2 - global.set $~lib/argc - local.get $8 + global.set $~argumentsLength local.get $9 + local.get $10 local.get $2 call_indirect (type $f64_f64_=>_i32) i32.const 0 @@ -5054,38 +5047,37 @@ i32.const 3 i32.shl i32.add - local.get $8 + local.get $9 f64.store local.get $0 - local.get $7 + local.get $8 i32.const 3 i32.shl i32.add - local.get $9 + local.get $10 f64.store end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end - block $break|2 - local.get $1 - i32.const 1 - i32.sub - local.set $5 - loop $loop|2 - local.get $5 - i32.const 2 - i32.ge_s - i32.eqz - br_if $break|2 + local.get $1 + i32.const 1 + i32.sub + local.set $5 + loop $for-loop|2 + local.get $5 + i32.const 2 + i32.ge_s + local.set $6 + local.get $6 + if local.get $0 f64.load - local.set $9 + local.set $10 local.get $0 local.get $0 local.get $5 @@ -5099,76 +5091,75 @@ i32.const 3 i32.shl i32.add - local.get $9 + local.get $10 f64.store i32.const 1 - local.set $7 - block $break|3 - loop $continue|3 - local.get $7 - i32.const 1 - i32.shl - local.get $4 - local.get $7 - i32.const 5 - i32.shr_s - i32.const 2 - i32.shl - i32.add - i32.load + local.set $8 + loop $while-continue|3 + local.get $8 + i32.const 1 + i32.shl + local.get $4 + local.get $8 + i32.const 5 + i32.shr_s + i32.const 2 + i32.shl + i32.add + i32.load + local.get $8 + i32.const 31 + i32.and + i32.shr_u + i32.const 1 + i32.and + i32.add + local.tee $7 + local.get $5 + i32.lt_s + local.set $11 + local.get $11 + if local.get $7 - i32.const 31 - i32.and - i32.shr_u - i32.const 1 - i32.and - i32.add - local.tee $6 - local.get $5 - i32.lt_s - i32.eqz - br_if $break|3 - local.get $6 - local.set $7 - br $continue|3 + local.set $8 + br $while-continue|3 end - unreachable end - block $break|4 - loop $continue|4 - local.get $7 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|4 + loop $while-continue|4 + local.get $8 + i32.const 0 + i32.gt_s + local.set $11 + local.get $11 + if local.get $0 f64.load - local.set $9 + local.set $10 local.get $0 - local.get $7 + local.get $8 i32.const 3 i32.shl i32.add f64.load - local.set $8 + local.set $9 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength + local.get $10 local.get $9 - local.get $8 local.get $2 call_indirect (type $f64_f64_=>_i32) i32.const 0 i32.lt_s if local.get $4 - local.get $7 + local.get $8 i32.const 5 i32.shr_s i32.const 2 i32.shl i32.add local.get $4 - local.get $7 + local.get $8 i32.const 5 i32.shr_s i32.const 2 @@ -5176,50 +5167,48 @@ i32.add i32.load i32.const 1 - local.get $7 + local.get $8 i32.const 31 i32.and i32.shl i32.xor i32.store local.get $0 - local.get $7 + local.get $8 i32.const 3 i32.shl i32.add - local.get $9 + local.get $10 f64.store local.get $0 - local.get $8 + local.get $9 f64.store end - local.get $7 + local.get $8 i32.const 1 i32.shr_s - local.set $7 - br $continue|4 + local.set $8 + br $while-continue|4 end - unreachable end local.get $5 i32.const 1 i32.sub local.set $5 - br $loop|2 + br $for-loop|2 end - unreachable end local.get $4 call $~lib/rt/tlsf/__free local.get $0 f64.load offset=8 - local.set $10 + local.set $12 local.get $0 local.get $0 f64.load f64.store offset=8 local.get $0 - local.get $10 + local.get $12 f64.store ) (func $~lib/typedarray/Float64Array#sort (; 65 ;) (param $0 i32) (param $1 i32) (result i32) @@ -5262,7 +5251,7 @@ f64.load local.set $7 i32.const 2 - global.set $~lib/argc + global.set $~argumentsLength local.get $6 local.get $7 local.get $2 @@ -5340,7 +5329,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength br_table $0of1 $1of1 $outOfRange end unreachable @@ -5632,6 +5621,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -5653,18 +5643,18 @@ local.get $2 return end - block $break|0 - i32.const 0 - local.set $2 - local.get $0 - call $~lib/typedarray/Int8Array#get:length - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + local.get $0 + call $~lib/typedarray/Int8Array#get:length + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $2 call $~lib/typedarray/Int8Array#__get @@ -5674,21 +5664,20 @@ i32.ne if i32.const 0 - local.set $4 + local.set $5 local.get $0 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $5 return end local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -5879,13 +5868,13 @@ select end local.set $4 - block $break|0 - loop $loop|0 - local.get $5 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + loop $for-loop|0 + local.get $5 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $5 i32.const 2 @@ -5897,9 +5886,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 ) @@ -5940,6 +5928,7 @@ (local $2 i32) (local $3 i32) (local $4 i32) + (local $5 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -5961,18 +5950,18 @@ local.get $2 return end - block $break|0 - i32.const 0 - local.set $2 - local.get $0 - call $~lib/typedarray/Int32Array#get:length - local.set $3 - loop $loop|0 - local.get $2 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $2 + local.get $0 + call $~lib/typedarray/Int32Array#get:length + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $2 call $~lib/typedarray/Int32Array#__get @@ -5982,21 +5971,20 @@ i32.ne if i32.const 0 - local.set $4 + local.set $5 local.get $0 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release - local.get $4 + local.get $5 return end local.get $2 i32.const 1 i32.add local.set $2 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $3 @@ -6271,6 +6259,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -6281,20 +6270,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Int8Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Int8Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -6311,9 +6300,8 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $8 @@ -6409,6 +6397,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -6419,20 +6408,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Uint8Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Uint8Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -6449,9 +6438,8 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $8 @@ -6525,6 +6513,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -6535,20 +6524,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Uint8ClampedArray#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Uint8ClampedArray#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -6565,9 +6554,8 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $8 @@ -6665,6 +6653,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -6675,20 +6664,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Int16Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Int16Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -6705,9 +6694,8 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $8 @@ -6807,6 +6795,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -6817,20 +6806,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Uint16Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Uint16Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -6847,9 +6836,8 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $8 @@ -6923,6 +6911,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -6933,20 +6922,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Int32Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Int32Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -6963,9 +6952,8 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $8 @@ -7061,6 +7049,7 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -7071,20 +7060,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Uint32Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Uint32Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -7101,9 +7090,8 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $8 @@ -7199,7 +7187,8 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i64) + (local $9 i32) + (local $10 i64) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -7210,20 +7199,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Int64Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Int64Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -7240,15 +7229,14 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 ) (func $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64> (; 115 ;) (local $0 i32) @@ -7338,7 +7326,8 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i64) + (local $9 i32) + (local $10 i64) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -7349,20 +7338,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Uint64Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Uint64Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -7379,15 +7368,14 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 ) (func $std/typedarray/testReduce<~lib/typedarray/Uint64Array,u64> (; 119 ;) (local $0 i32) @@ -7477,7 +7465,8 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 f32) + (local $9 i32) + (local $10 f32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -7488,20 +7477,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Float32Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Float32Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -7518,15 +7507,14 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 ) (func $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32> (; 123 ;) (local $0 i32) @@ -7592,7 +7580,8 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 f64) + (local $9 i32) + (local $10 f64) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -7603,20 +7592,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - i32.const 0 - local.set $7 - local.get $5 - call $~lib/typedarray/Float64Array#get:length - local.set $8 - loop $loop|0 - local.get $7 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $7 + local.get $5 + call $~lib/typedarray/Float64Array#get:length + local.set $8 + loop $for-loop|0 + local.get $7 + local.get $8 + i32.lt_s + local.set $9 + local.get $9 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -7633,15 +7622,14 @@ i32.const 1 i32.add local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 ) (func $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64> (; 126 ;) (local $0 i32) @@ -7706,6 +7694,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -7716,20 +7705,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Int8Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Int8Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -7746,9 +7735,8 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $7 @@ -7823,6 +7811,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -7833,20 +7822,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Uint8Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Uint8Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -7863,9 +7852,8 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $7 @@ -7938,6 +7926,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -7948,20 +7937,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Uint8ClampedArray#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Uint8ClampedArray#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -7978,9 +7967,8 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $7 @@ -8053,6 +8041,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -8063,20 +8052,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Int16Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Int16Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -8093,9 +8082,8 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $7 @@ -8170,6 +8158,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -8180,20 +8169,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Uint16Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Uint16Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -8210,9 +8199,8 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $7 @@ -8285,6 +8273,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -8295,20 +8284,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Int32Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Int32Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -8325,9 +8314,8 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $7 @@ -8398,6 +8386,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -8408,20 +8397,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Uint32Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Uint32Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -8438,9 +8427,8 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 local.set $7 @@ -8511,7 +8499,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) + (local $9 i64) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -8522,20 +8511,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Int64Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Int64Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -8552,15 +8541,14 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 - local.set $8 + local.set $9 local.get $5 call $~lib/rt/pure/__release - local.get $8 + local.get $9 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Int64Array,i64> (; 150 ;) (local $0 i32) @@ -8625,7 +8613,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) + (local $9 i64) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -8636,20 +8625,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Uint64Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Uint64Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -8666,15 +8655,14 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 - local.set $8 + local.set $9 local.get $5 call $~lib/rt/pure/__release - local.get $8 + local.get $9 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Uint64Array,u64> (; 153 ;) (local $0 i32) @@ -8739,7 +8727,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 f32) + (local $8 i32) + (local $9 f32) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -8750,20 +8739,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Float32Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Float32Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -8780,15 +8769,14 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 - local.set $8 + local.set $9 local.get $5 call $~lib/rt/pure/__release - local.get $8 + local.get $9 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Float32Array,f32> (; 156 ;) (local $0 i32) @@ -8853,7 +8841,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 f64) + (local $8 i32) + (local $9 f64) local.get $0 call $~lib/rt/pure/__retain local.set $5 @@ -8864,20 +8853,20 @@ local.get $5 i32.load offset=4 local.set $6 - block $break|0 - local.get $5 - call $~lib/typedarray/Float64Array#get:length - i32.const 1 - i32.sub - local.set $7 - loop $loop|0 - local.get $7 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + local.get $5 + call $~lib/typedarray/Float64Array#get:length + i32.const 1 + i32.sub + local.set $7 + loop $for-loop|0 + local.get $7 + i32.const 0 + i32.ge_s + local.set $8 + local.get $8 + if i32.const 4 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 local.get $6 local.get $7 @@ -8894,15 +8883,14 @@ i32.const 1 i32.sub local.set $7 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 - local.set $8 + local.set $9 local.get $5 call $~lib/rt/pure/__release - local.get $8 + local.get $9 ) (func $std/typedarray/testReduceRight<~lib/typedarray/Float64Array,f64> (; 159 ;) (local $0 i32) @@ -8970,6 +8958,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -8993,22 +8982,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 0 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 0 @@ -9024,9 +9013,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -9142,6 +9130,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -9165,22 +9154,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 0 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 0 @@ -9196,9 +9185,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -9333,6 +9321,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -9356,22 +9345,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 0 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 0 @@ -9387,9 +9376,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -9505,6 +9493,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -9528,22 +9517,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 1 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 1 @@ -9559,9 +9548,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -9700,6 +9688,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -9723,22 +9712,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 1 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 1 @@ -9754,9 +9743,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -9895,6 +9883,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -9918,22 +9907,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 2 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 2 @@ -9949,9 +9938,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -10067,6 +10055,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -10090,22 +10079,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 2 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 2 @@ -10121,9 +10110,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -10262,6 +10250,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -10285,22 +10274,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 3 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 3 @@ -10316,9 +10305,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -10457,6 +10445,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -10480,22 +10469,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 3 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 3 @@ -10511,9 +10500,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -10652,6 +10640,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -10675,22 +10664,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 2 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 2 @@ -10706,9 +10695,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -10847,6 +10835,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -10870,22 +10859,22 @@ i32.const 0 call $~lib/rt/tlsf/__alloc local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $8 local.get $9 i32.const 3 i32.shl i32.add i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $5 local.get $9 i32.const 3 @@ -10901,9 +10890,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $7 local.get $8 @@ -11198,6 +11186,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -11221,25 +11210,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 0 i32.shl i32.add i32.load8_s - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -11247,24 +11236,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 0 i32.shl i32.add - local.get $10 + local.get $11 i32.store8 end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 0 @@ -11426,6 +11414,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -11449,25 +11438,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 0 i32.shl i32.add i32.load8_u - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -11475,24 +11464,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 0 i32.shl i32.add - local.get $10 + local.get $11 i32.store8 end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 0 @@ -11654,6 +11642,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -11677,25 +11666,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 0 i32.shl i32.add i32.load8_u - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -11703,24 +11692,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 0 i32.shl i32.add - local.get $10 + local.get $11 i32.store8 end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 0 @@ -11884,6 +11872,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -11907,25 +11896,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 1 i32.shl i32.add i32.load16_s - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -11933,24 +11922,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 1 i32.shl i32.add - local.get $10 + local.get $11 i32.store16 end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 1 @@ -12112,6 +12100,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -12135,25 +12124,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 1 i32.shl i32.add i32.load16_u - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -12161,24 +12150,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 1 i32.shl i32.add - local.get $10 + local.get $11 i32.store16 end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 1 @@ -12338,6 +12326,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -12361,25 +12350,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add i32.load - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -12387,24 +12376,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 2 i32.shl i32.add - local.get $10 + local.get $11 i32.store end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 2 @@ -12564,6 +12552,7 @@ (local $9 i32) (local $10 i32) (local $11 i32) + (local $12 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -12587,25 +12576,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add i32.load - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -12613,24 +12602,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 2 i32.shl i32.add - local.get $10 + local.get $11 i32.store end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 2 @@ -12788,8 +12776,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i64) - (local $11 i32) + (local $10 i32) + (local $11 i64) (local $12 i32) local.get $0 call $~lib/rt/pure/__retain @@ -12814,25 +12802,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add i64.load - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -12840,24 +12828,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 3 i32.shl i32.add - local.get $10 + local.get $11 i64.store end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 3 @@ -12866,16 +12853,16 @@ local.get $6 local.get $9 call $~lib/rt/tlsf/__realloc - local.set $11 + local.set $10 local.get $5 - local.get $11 + local.get $10 call $~lib/rt/pure/__retain i32.store local.get $5 local.get $9 i32.store offset=8 local.get $5 - local.get $11 + local.get $10 i32.store offset=4 local.get $5 call $~lib/rt/pure/__retain @@ -13015,8 +13002,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i64) - (local $11 i32) + (local $10 i32) + (local $11 i64) (local $12 i32) local.get $0 call $~lib/rt/pure/__retain @@ -13041,25 +13028,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add i64.load - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -13067,24 +13054,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 3 i32.shl i32.add - local.get $10 + local.get $11 i64.store end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 3 @@ -13093,16 +13079,16 @@ local.get $6 local.get $9 call $~lib/rt/tlsf/__realloc - local.set $11 + local.set $10 local.get $5 - local.get $11 + local.get $10 call $~lib/rt/pure/__retain i32.store local.get $5 local.get $9 i32.store offset=8 local.get $5 - local.get $11 + local.get $10 i32.store offset=4 local.get $5 call $~lib/rt/pure/__retain @@ -13242,8 +13228,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) - (local $11 i32) + (local $10 i32) + (local $11 f32) (local $12 i32) local.get $0 call $~lib/rt/pure/__retain @@ -13268,25 +13254,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -13294,24 +13280,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 2 i32.shl i32.add - local.get $10 + local.get $11 f32.store end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 2 @@ -13320,16 +13305,16 @@ local.get $6 local.get $9 call $~lib/rt/tlsf/__realloc - local.set $11 + local.set $10 local.get $5 - local.get $11 + local.get $10 call $~lib/rt/pure/__retain i32.store local.get $5 local.get $9 i32.store offset=8 local.get $5 - local.get $11 + local.get $10 i32.store offset=4 local.get $5 call $~lib/rt/pure/__retain @@ -13469,8 +13454,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) - (local $11 i32) + (local $10 i32) + (local $11 f64) (local $12 i32) local.get $0 call $~lib/rt/pure/__retain @@ -13495,25 +13480,25 @@ local.set $7 i32.const 0 local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $4 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 i32.const 3 - global.set $~lib/argc - local.get $10 + global.set $~argumentsLength + local.get $11 local.get $9 local.get $3 local.get $2 @@ -13521,24 +13506,23 @@ if local.get $6 local.get $8 - local.tee $11 + local.tee $12 i32.const 1 i32.add local.set $8 - local.get $11 + local.get $12 i32.const 3 i32.shl i32.add - local.get $10 + local.get $11 f64.store end local.get $9 i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $8 i32.const 3 @@ -13547,16 +13531,16 @@ local.get $6 local.get $9 call $~lib/rt/tlsf/__realloc - local.set $11 + local.set $10 local.get $5 - local.get $11 + local.get $10 call $~lib/rt/pure/__retain i32.store local.get $5 local.get $9 i32.store offset=8 local.get $5 - local.get $11 + local.get $10 i32.store offset=4 local.get $5 call $~lib/rt/pure/__retain @@ -13698,6 +13682,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -13707,20 +13692,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int8Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int8Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -13733,19 +13718,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -13852,6 +13836,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -13861,20 +13846,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint8Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint8Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -13887,19 +13872,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -14004,6 +13988,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -14013,20 +13998,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint8ClampedArray#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint8ClampedArray#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -14039,19 +14024,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -14158,6 +14142,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -14167,20 +14152,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int16Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int16Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 1 @@ -14193,19 +14178,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -14312,6 +14296,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -14321,20 +14306,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint16Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint16Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 1 @@ -14347,19 +14332,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -14462,6 +14446,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -14471,20 +14456,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -14497,19 +14482,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -14610,6 +14594,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -14619,20 +14604,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -14645,19 +14630,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Uint32Array,u32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -14758,6 +14742,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -14767,20 +14752,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -14793,19 +14778,18 @@ call_indirect (type $i64_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -14906,6 +14890,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -14915,20 +14900,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -14941,19 +14926,18 @@ call_indirect (type $i64_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Uint64Array,u64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -15054,6 +15038,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -15063,20 +15048,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Float32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Float32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -15089,19 +15074,18 @@ call_indirect (type $f32_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -15202,6 +15186,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -15211,20 +15196,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Float64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Float64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -15237,19 +15222,18 @@ call_indirect (type $f64_i32_i32_=>_i32) if i32.const 1 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 0 local.set $6 @@ -15354,6 +15338,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -15363,20 +15348,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int8Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int8Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -15389,19 +15374,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -15509,6 +15493,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -15518,20 +15503,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint8Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint8Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -15544,19 +15529,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -15662,6 +15646,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -15671,20 +15656,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint8ClampedArray#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint8ClampedArray#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -15697,19 +15682,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -15817,6 +15801,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -15826,20 +15811,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int16Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int16Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 1 @@ -15852,19 +15837,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -15972,6 +15956,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -15981,20 +15966,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint16Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint16Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 1 @@ -16007,19 +15992,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -16123,6 +16107,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -16132,20 +16117,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -16158,19 +16143,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -16272,6 +16256,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -16281,20 +16266,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -16307,19 +16292,18 @@ call_indirect (type $i32_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint32Array,u32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -16421,6 +16405,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -16430,20 +16415,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -16456,19 +16441,18 @@ call_indirect (type $i64_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -16570,6 +16554,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -16579,20 +16564,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -16605,19 +16590,18 @@ call_indirect (type $i64_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint64Array,u64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -16719,6 +16703,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -16728,20 +16713,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Float32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Float32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -16754,19 +16739,18 @@ call_indirect (type $f32_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -16868,6 +16852,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -16877,20 +16862,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Float64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Float64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -16903,19 +16888,18 @@ call_indirect (type $f64_i32_i32_=>_i32) if local.get $5 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const -1 local.set $6 @@ -17023,6 +17007,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -17032,21 +17017,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int8Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int8Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -17058,22 +17043,21 @@ local.get $2 call_indirect (type $i32_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -17182,6 +17166,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -17191,21 +17176,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint8Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint8Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -17217,22 +17202,21 @@ local.get $2 call_indirect (type $i32_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -17339,6 +17323,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -17348,21 +17333,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint8ClampedArray#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint8ClampedArray#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -17374,22 +17359,21 @@ local.get $2 call_indirect (type $i32_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -17498,6 +17482,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -17507,21 +17492,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int16Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int16Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 1 @@ -17533,22 +17518,21 @@ local.get $2 call_indirect (type $i32_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -17657,6 +17641,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -17666,21 +17651,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint16Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint16Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 1 @@ -17692,22 +17677,21 @@ local.get $2 call_indirect (type $i32_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -17812,6 +17796,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -17821,21 +17806,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -17847,22 +17832,21 @@ local.get $2 call_indirect (type $i32_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -17965,6 +17949,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -17974,21 +17959,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -18000,22 +17985,21 @@ local.get $2 call_indirect (type $i32_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Uint32Array,u32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -18118,6 +18102,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -18127,21 +18112,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -18153,22 +18138,21 @@ local.get $2 call_indirect (type $i64_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -18271,6 +18255,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -18280,21 +18265,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -18306,22 +18291,21 @@ local.get $2 call_indirect (type $i64_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Uint64Array,u64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -18412,6 +18396,7 @@ (local $8 f32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $0 i32.reinterpret_f32 local.set $2 @@ -18549,13 +18534,13 @@ i32.or local.set $3 end - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i32.gt_s + local.set $10 + local.get $10 + if local.get $2 local.get $3 i32.ge_u @@ -18582,9 +18567,8 @@ i32.const 1 i32.sub local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 local.get $3 @@ -18608,13 +18592,13 @@ i32.const 8 i32.shl i32.clz - local.set $10 + local.set $11 local.get $4 - local.get $10 + local.get $11 i32.sub local.set $4 local.get $2 - local.get $10 + local.get $11 i32.shl local.set $2 local.get $4 @@ -18672,6 +18656,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -18681,21 +18666,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Float32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Float32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -18707,22 +18692,21 @@ local.get $2 call_indirect (type $f32_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -18812,7 +18796,8 @@ (local $7 i64) (local $8 f64) (local $9 i64) - (local $10 i64) + (local $10 i32) + (local $11 i64) local.get $0 i64.reinterpret_f64 local.set $2 @@ -18954,13 +18939,13 @@ i64.or local.set $3 end - block $break|0 - loop $continue|0 - local.get $4 - local.get $5 - i64.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $4 + local.get $5 + i64.gt_s + local.set $10 + local.get $10 + if local.get $2 local.get $3 i64.ge_u @@ -18987,9 +18972,8 @@ i64.const 1 i64.sub local.set $4 - br $continue|0 + br $while-continue|0 end - unreachable end local.get $2 local.get $3 @@ -19013,13 +18997,13 @@ i64.const 11 i64.shl i64.clz - local.set $10 + local.set $11 local.get $4 - local.get $10 + local.get $11 i64.sub local.set $4 local.get $2 - local.get $10 + local.get $11 i64.shl local.set $2 local.get $4 @@ -19079,6 +19063,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) block $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -19088,21 +19073,21 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Float64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 - block $continue|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Float64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if + block $for-continue|0 i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -19114,22 +19099,21 @@ local.get $2 call_indirect (type $f64_i32_i32_=>_i32) if - br $continue|0 + br $for-continue|0 end i32.const 0 - local.set $7 + local.set $8 local.get $3 call $~lib/rt/pure/__release - local.get $7 + local.get $8 br $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $5 i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end i32.const 1 local.set $6 @@ -19276,6 +19260,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -19284,20 +19269,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int8Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int8Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -19312,9 +19297,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -19444,6 +19428,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -19452,20 +19437,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint8Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint8Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -19480,9 +19465,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -19606,6 +19590,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -19614,20 +19599,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint8ClampedArray#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint8ClampedArray#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 0 @@ -19642,9 +19627,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -19772,6 +19756,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -19780,20 +19765,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int16Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int16Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 1 @@ -19808,9 +19793,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -19940,6 +19924,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -19948,20 +19933,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint16Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint16Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 1 @@ -19976,9 +19961,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -20098,6 +20082,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -20106,20 +20091,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -20134,9 +20119,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -20250,6 +20234,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -20258,20 +20243,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -20286,9 +20271,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -20403,6 +20387,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -20411,20 +20396,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Int64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Int64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -20439,9 +20424,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -20559,6 +20543,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -20567,20 +20552,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Uint64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Uint64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -20595,9 +20580,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -20715,6 +20699,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -20723,20 +20708,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Float32Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Float32Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 2 @@ -20751,9 +20736,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -20871,6 +20855,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) local.get $0 call $~lib/rt/pure/__retain local.set $3 @@ -20879,20 +20864,20 @@ local.get $3 i32.load offset=4 local.set $4 - block $break|0 - i32.const 0 - local.set $5 - local.get $3 - call $~lib/typedarray/Float64Array#get:length - local.set $6 - loop $loop|0 - local.get $5 - local.get $6 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $5 + local.get $3 + call $~lib/typedarray/Float64Array#get:length + local.set $6 + loop $for-loop|0 + local.get $5 + local.get $6 + i32.lt_s + local.set $7 + local.get $7 + if i32.const 3 - global.set $~lib/argc + global.set $~argumentsLength local.get $4 local.get $5 i32.const 3 @@ -20907,9 +20892,8 @@ i32.const 1 i32.add local.set $5 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/rt/pure/__release @@ -20976,47 +20960,48 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Int8Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Int8Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 0 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 0 i32.shl i32.add - local.set $6 - local.get $5 - i32.load8_s local.set $7 - local.get $5 local.get $6 i32.load8_s - i32.store8 + local.set $8 local.get $6 local.get $7 + i32.load8_s + i32.store8 + local.get $7 + local.get $8 i32.store8 local.get $3 i32.const 1 @@ -21026,9 +21011,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -21041,6 +21025,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -21059,15 +21044,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -21092,22 +21077,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Int8Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Int8Array#__get @@ -21136,9 +21120,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -21146,8 +21129,8 @@ call $~lib/typedarray/Int8Array#subarray local.tee $6 call $~lib/typedarray/Int8Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Int8Array#__get i32.const 8 @@ -21161,7 +21144,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Int8Array#__get i32.const 7 @@ -21175,7 +21158,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Int8Array#__get i32.const 6 @@ -21189,7 +21172,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Int8Array#__get i32.const 5 @@ -21215,7 +21198,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array#reverse (; 404 ;) (param $0 i32) (result i32) @@ -21226,47 +21209,48 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Uint8Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Uint8Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 0 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 0 i32.shl i32.add - local.set $6 - local.get $5 - i32.load8_u local.set $7 - local.get $5 local.get $6 i32.load8_u - i32.store8 + local.set $8 local.get $6 local.get $7 + i32.load8_u + i32.store8 + local.get $7 + local.get $8 i32.store8 local.get $3 i32.const 1 @@ -21276,9 +21260,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -21398,6 +21381,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -21416,15 +21400,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -21445,22 +21429,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Uint8Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Uint8Array#__get @@ -21487,9 +21470,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -21497,8 +21479,8 @@ call $~lib/typedarray/Uint8Array#subarray local.tee $6 call $~lib/typedarray/Uint8Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Uint8Array#__get i32.const 8 @@ -21512,7 +21494,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Uint8Array#__get i32.const 7 @@ -21526,7 +21508,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Uint8Array#__get i32.const 6 @@ -21540,7 +21522,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Uint8Array#__get i32.const 5 @@ -21566,7 +21548,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8ClampedArray#reverse (; 407 ;) (param $0 i32) (result i32) @@ -21577,47 +21559,48 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Uint8ClampedArray#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Uint8ClampedArray#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 0 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 0 i32.shl i32.add - local.set $6 - local.get $5 - i32.load8_u local.set $7 - local.get $5 local.get $6 i32.load8_u - i32.store8 + local.set $8 local.get $6 local.get $7 + i32.load8_u + i32.store8 + local.get $7 + local.get $8 i32.store8 local.get $3 i32.const 1 @@ -21627,9 +21610,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -21749,6 +21731,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -21767,15 +21750,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -21796,22 +21779,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Uint8ClampedArray#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Uint8ClampedArray#__get @@ -21838,9 +21820,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -21848,8 +21829,8 @@ call $~lib/typedarray/Uint8ClampedArray#subarray local.tee $6 call $~lib/typedarray/Uint8ClampedArray#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#__get i32.const 8 @@ -21863,7 +21844,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Uint8ClampedArray#__get i32.const 7 @@ -21877,7 +21858,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Uint8ClampedArray#__get i32.const 6 @@ -21891,7 +21872,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Uint8ClampedArray#__get i32.const 5 @@ -21917,7 +21898,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int16Array#reverse (; 410 ;) (param $0 i32) (result i32) @@ -21928,47 +21909,48 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Int16Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Int16Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 1 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 1 i32.shl i32.add - local.set $6 - local.get $5 - i32.load16_s local.set $7 - local.get $5 local.get $6 i32.load16_s - i32.store16 + local.set $8 local.get $6 local.get $7 + i32.load16_s + i32.store16 + local.get $7 + local.get $8 i32.store16 local.get $3 i32.const 1 @@ -21978,9 +21960,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -22100,6 +22081,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -22118,15 +22100,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -22151,22 +22133,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Int16Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Int16Array#__get @@ -22195,9 +22176,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -22205,8 +22185,8 @@ call $~lib/typedarray/Int16Array#subarray local.tee $6 call $~lib/typedarray/Int16Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Int16Array#__get i32.const 8 @@ -22220,7 +22200,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Int16Array#__get i32.const 7 @@ -22234,7 +22214,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Int16Array#__get i32.const 6 @@ -22248,7 +22228,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Int16Array#__get i32.const 5 @@ -22274,7 +22254,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint16Array#reverse (; 413 ;) (param $0 i32) (result i32) @@ -22285,47 +22265,48 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Uint16Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Uint16Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 1 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 1 i32.shl i32.add - local.set $6 - local.get $5 - i32.load16_u local.set $7 - local.get $5 local.get $6 i32.load16_u - i32.store16 + local.set $8 local.get $6 local.get $7 + i32.load16_u + i32.store16 + local.get $7 + local.get $8 i32.store16 local.get $3 i32.const 1 @@ -22335,9 +22316,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -22457,6 +22437,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -22475,15 +22456,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -22504,22 +22485,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Uint16Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Uint16Array#__get @@ -22546,9 +22526,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -22556,8 +22535,8 @@ call $~lib/typedarray/Uint16Array#subarray local.tee $6 call $~lib/typedarray/Uint16Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Uint16Array#__get i32.const 8 @@ -22571,7 +22550,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Uint16Array#__get i32.const 7 @@ -22585,7 +22564,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Uint16Array#__get i32.const 6 @@ -22599,7 +22578,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Uint16Array#__get i32.const 5 @@ -22625,7 +22604,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int32Array#reverse (; 416 ;) (param $0 i32) (result i32) @@ -22636,47 +22615,48 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Int32Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Int32Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 2 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 2 i32.shl i32.add - local.set $6 - local.get $5 - i32.load local.set $7 - local.get $5 local.get $6 i32.load - i32.store + local.set $8 local.get $6 local.get $7 + i32.load + i32.store + local.get $7 + local.get $8 i32.store local.get $3 i32.const 1 @@ -22686,9 +22666,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -22701,6 +22680,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -22719,15 +22699,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -22744,22 +22724,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Int32Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Int32Array#__get @@ -22784,9 +22763,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -22794,8 +22772,8 @@ call $~lib/typedarray/Int32Array#subarray local.tee $6 call $~lib/typedarray/Int32Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Int32Array#__get i32.const 8 @@ -22809,7 +22787,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Int32Array#__get i32.const 7 @@ -22823,7 +22801,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Int32Array#__get i32.const 6 @@ -22837,7 +22815,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Int32Array#__get i32.const 5 @@ -22863,7 +22841,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint32Array#reverse (; 418 ;) (param $0 i32) (result i32) @@ -22874,47 +22852,48 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Uint32Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Uint32Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 2 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 2 i32.shl i32.add - local.set $6 - local.get $5 - i32.load local.set $7 - local.get $5 local.get $6 i32.load - i32.store + local.set $8 local.get $6 local.get $7 + i32.load + i32.store + local.get $7 + local.get $8 i32.store local.get $3 i32.const 1 @@ -22924,9 +22903,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -23046,6 +23024,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -23064,15 +23043,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -23089,22 +23068,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Uint32Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Uint32Array#__get @@ -23129,9 +23107,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -23139,8 +23116,8 @@ call $~lib/typedarray/Uint32Array#subarray local.tee $6 call $~lib/typedarray/Uint32Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Uint32Array#__get i32.const 8 @@ -23154,7 +23131,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Uint32Array#__get i32.const 7 @@ -23168,7 +23145,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Uint32Array#__get i32.const 6 @@ -23182,7 +23159,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Uint32Array#__get i32.const 5 @@ -23208,7 +23185,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int64Array#reverse (; 421 ;) (param $0 i32) (result i32) @@ -23218,48 +23195,49 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i64) + (local $7 i32) + (local $8 i64) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Int64Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Int64Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 3 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 3 i32.shl i32.add - local.set $6 - local.get $5 - i64.load local.set $7 - local.get $5 local.get $6 i64.load - i64.store + local.set $8 local.get $6 local.get $7 + i64.load + i64.store + local.get $7 + local.get $8 i64.store local.get $3 i32.const 1 @@ -23269,9 +23247,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -23391,6 +23368,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -23409,15 +23387,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -23436,22 +23414,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Int64Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Int64Array#__get @@ -23477,9 +23454,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -23487,8 +23463,8 @@ call $~lib/typedarray/Int64Array#subarray local.tee $6 call $~lib/typedarray/Int64Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Int64Array#__get i64.const 8 @@ -23502,7 +23478,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Int64Array#__get i64.const 7 @@ -23516,7 +23492,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Int64Array#__get i64.const 6 @@ -23530,7 +23506,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Int64Array#__get i64.const 5 @@ -23556,7 +23532,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint64Array#reverse (; 424 ;) (param $0 i32) (result i32) @@ -23566,48 +23542,49 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i64) + (local $7 i32) + (local $8 i64) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Uint64Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Uint64Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 3 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 3 i32.shl i32.add - local.set $6 - local.get $5 - i64.load local.set $7 - local.get $5 local.get $6 i64.load - i64.store + local.set $8 local.get $6 local.get $7 + i64.load + i64.store + local.get $7 + local.get $8 i64.store local.get $3 i32.const 1 @@ -23617,9 +23594,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -23739,6 +23715,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -23757,15 +23734,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -23784,22 +23761,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Uint64Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Uint64Array#__get @@ -23825,9 +23801,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -23835,8 +23810,8 @@ call $~lib/typedarray/Uint64Array#subarray local.tee $6 call $~lib/typedarray/Uint64Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Uint64Array#__get i64.const 8 @@ -23850,7 +23825,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Uint64Array#__get i64.const 7 @@ -23864,7 +23839,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Uint64Array#__get i64.const 6 @@ -23878,7 +23853,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Uint64Array#__get i64.const 5 @@ -23904,7 +23879,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float32Array#reverse (; 427 ;) (param $0 i32) (result i32) @@ -23914,48 +23889,49 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 f32) + (local $7 i32) + (local $8 f32) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Float32Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Float32Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 2 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 2 i32.shl i32.add - local.set $6 - local.get $5 - f32.load local.set $7 - local.get $5 local.get $6 f32.load - f32.store + local.set $8 local.get $6 local.get $7 + f32.load + f32.store + local.get $7 + local.get $8 f32.store local.get $3 i32.const 1 @@ -23965,9 +23941,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -24087,6 +24062,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -24105,15 +24081,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -24132,22 +24108,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Float32Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Float32Array#__get @@ -24173,9 +24148,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -24183,8 +24157,8 @@ call $~lib/typedarray/Float32Array#subarray local.tee $6 call $~lib/typedarray/Float32Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Float32Array#__get f32.const 8 @@ -24198,7 +24172,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Float32Array#__get f32.const 7 @@ -24212,7 +24186,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Float32Array#__get f32.const 6 @@ -24226,7 +24200,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Float32Array#__get f32.const 5 @@ -24252,7 +24226,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float64Array#reverse (; 430 ;) (param $0 i32) (result i32) @@ -24262,48 +24236,49 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 f64) + (local $7 i32) + (local $8 f64) local.get $0 call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.load offset=4 local.set $2 - block $break|0 - i32.const 0 - local.set $3 - local.get $1 - call $~lib/typedarray/Float64Array#get:length - i32.const 1 - i32.sub - local.set $4 - loop $loop|0 - local.get $3 - local.get $4 - i32.lt_u - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + local.get $1 + call $~lib/typedarray/Float64Array#get:length + i32.const 1 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_u + local.set $5 + local.get $5 + if local.get $2 local.get $3 i32.const 3 i32.shl i32.add - local.set $5 + local.set $6 local.get $2 local.get $4 i32.const 3 i32.shl i32.add - local.set $6 - local.get $5 - f64.load local.set $7 - local.get $5 local.get $6 f64.load - f64.store + local.set $8 local.get $6 local.get $7 + f64.load + f64.store + local.get $7 + local.get $8 f64.store local.get $3 i32.const 1 @@ -24313,9 +24288,8 @@ i32.const 1 i32.sub local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $1 ) @@ -24328,6 +24302,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) global.get $std/typedarray/testArrayReverseValues call $~lib/rt/pure/__retain local.set $0 @@ -24346,15 +24321,15 @@ local.tee $4 call $~lib/rt/pure/__retain local.set $5 - block $break|0 - i32.const 0 - local.set $6 - loop $loop|0 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $6 + loop $for-loop|0 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 local.get $0 @@ -24373,22 +24348,21 @@ i32.const 1 i32.add local.set $6 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 call $~lib/typedarray/Float64Array#reverse call $~lib/rt/pure/__release - block $break|1 - i32.const 0 - local.set $6 - loop $loop|1 - local.get $6 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 0 + local.set $6 + loop $for-loop|1 + local.get $6 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if local.get $3 local.get $6 call $~lib/typedarray/Float64Array#__get @@ -24414,9 +24388,8 @@ i32.const 1 i32.add local.set $6 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $5 i32.const 4 @@ -24424,8 +24397,8 @@ call $~lib/typedarray/Float64Array#subarray local.tee $6 call $~lib/typedarray/Float64Array#reverse - local.set $7 - local.get $7 + local.set $8 + local.get $8 i32.const 0 call $~lib/typedarray/Float64Array#__get f64.const 8 @@ -24439,7 +24412,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 1 call $~lib/typedarray/Float64Array#__get f64.const 7 @@ -24453,7 +24426,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 2 call $~lib/typedarray/Float64Array#__get f64.const 6 @@ -24467,7 +24440,7 @@ call $~lib/builtins/abort unreachable end - local.get $7 + local.get $8 i32.const 3 call $~lib/typedarray/Float64Array#__get f64.const 5 @@ -24493,7 +24466,7 @@ call $~lib/rt/pure/__release local.get $5 call $~lib/rt/pure/__release - local.get $7 + local.get $8 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int8Array#indexOf (; 432 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -24504,6 +24477,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -24554,13 +24528,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 0 @@ -24575,19 +24549,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -24604,6 +24577,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -24650,13 +24624,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 0 @@ -24671,19 +24645,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -24696,7 +24669,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -24719,6 +24692,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -24731,15 +24705,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -24754,9 +24728,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.const 0 @@ -24894,7 +24867,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 0 i32.const 0 @@ -24911,7 +24884,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 11 i32.const 0 @@ -24928,7 +24901,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const -1 i32.const 0 @@ -24945,7 +24918,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 3 i32.const 0 @@ -25055,8 +25028,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Int8Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 3 i32.const 0 call $~lib/typedarray/Int8Array#indexOf @@ -25071,7 +25044,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 4 i32.const 0 call $~lib/typedarray/Int8Array#indexOf @@ -25086,7 +25059,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 0 call $~lib/typedarray/Int8Array#indexOf @@ -25101,7 +25074,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 9 i32.const 0 call $~lib/typedarray/Int8Array#indexOf @@ -25116,7 +25089,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 10 i32.const 0 call $~lib/typedarray/Int8Array#indexOf @@ -25131,7 +25104,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 11 i32.const 0 call $~lib/typedarray/Int8Array#indexOf @@ -25146,7 +25119,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 1 call $~lib/typedarray/Int8Array#indexOf @@ -25161,7 +25134,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 2 call $~lib/typedarray/Int8Array#indexOf @@ -25182,7 +25155,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array#indexOf (; 436 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -25193,6 +25166,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -25243,13 +25217,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 0 @@ -25262,19 +25236,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -25291,6 +25264,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -25337,13 +25311,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 0 @@ -25356,19 +25330,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -25381,7 +25354,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -25404,6 +25377,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -25416,15 +25390,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -25437,9 +25411,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.const 0 @@ -25577,7 +25550,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 0 i32.const 0 @@ -25594,7 +25567,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 11 i32.const 0 @@ -25611,7 +25584,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const -1 i32.const 0 @@ -25628,7 +25601,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 3 i32.const 0 @@ -25738,8 +25711,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Uint8Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 3 i32.const 0 call $~lib/typedarray/Uint8Array#indexOf @@ -25754,7 +25727,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 4 i32.const 0 call $~lib/typedarray/Uint8Array#indexOf @@ -25769,7 +25742,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 0 call $~lib/typedarray/Uint8Array#indexOf @@ -25784,7 +25757,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 9 i32.const 0 call $~lib/typedarray/Uint8Array#indexOf @@ -25799,7 +25772,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 10 i32.const 0 call $~lib/typedarray/Uint8Array#indexOf @@ -25814,7 +25787,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 11 i32.const 0 call $~lib/typedarray/Uint8Array#indexOf @@ -25829,7 +25802,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 1 call $~lib/typedarray/Uint8Array#indexOf @@ -25844,7 +25817,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 2 call $~lib/typedarray/Uint8Array#indexOf @@ -25865,7 +25838,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8ClampedArray#indexOf (; 440 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -25876,6 +25849,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -25926,13 +25900,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 0 @@ -25945,19 +25919,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -25974,6 +25947,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -26020,13 +25994,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 0 @@ -26039,19 +26013,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -26064,7 +26037,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -26087,6 +26060,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -26099,15 +26073,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -26120,9 +26094,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.const 0 @@ -26260,7 +26233,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 0 i32.const 0 @@ -26277,7 +26250,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 11 i32.const 0 @@ -26294,7 +26267,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const -1 i32.const 0 @@ -26311,7 +26284,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 3 i32.const 0 @@ -26421,8 +26394,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Uint8ClampedArray#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 3 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#indexOf @@ -26437,7 +26410,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 4 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#indexOf @@ -26452,7 +26425,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#indexOf @@ -26467,7 +26440,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 9 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#indexOf @@ -26482,7 +26455,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 10 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#indexOf @@ -26497,7 +26470,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 11 i32.const 0 call $~lib/typedarray/Uint8ClampedArray#indexOf @@ -26512,7 +26485,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 1 call $~lib/typedarray/Uint8ClampedArray#indexOf @@ -26527,7 +26500,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 2 call $~lib/typedarray/Uint8ClampedArray#indexOf @@ -26548,7 +26521,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int16Array#indexOf (; 444 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -26559,6 +26532,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -26609,13 +26583,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 1 @@ -26630,19 +26604,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -26659,6 +26632,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -26705,13 +26679,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 1 @@ -26726,19 +26700,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -26751,7 +26724,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -26774,6 +26747,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -26786,15 +26760,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -26809,9 +26783,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.const 0 @@ -26949,7 +26922,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 0 i32.const 0 @@ -26966,7 +26939,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 11 i32.const 0 @@ -26983,7 +26956,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const -1 i32.const 0 @@ -27000,7 +26973,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 3 i32.const 0 @@ -27110,8 +27083,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Int16Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 3 i32.const 0 call $~lib/typedarray/Int16Array#indexOf @@ -27126,7 +27099,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 4 i32.const 0 call $~lib/typedarray/Int16Array#indexOf @@ -27141,7 +27114,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 0 call $~lib/typedarray/Int16Array#indexOf @@ -27156,7 +27129,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 9 i32.const 0 call $~lib/typedarray/Int16Array#indexOf @@ -27171,7 +27144,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 10 i32.const 0 call $~lib/typedarray/Int16Array#indexOf @@ -27186,7 +27159,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 11 i32.const 0 call $~lib/typedarray/Int16Array#indexOf @@ -27201,7 +27174,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 1 call $~lib/typedarray/Int16Array#indexOf @@ -27216,7 +27189,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 2 call $~lib/typedarray/Int16Array#indexOf @@ -27237,7 +27210,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint16Array#indexOf (; 448 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -27248,6 +27221,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -27298,13 +27272,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 1 @@ -27317,19 +27291,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -27346,6 +27319,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -27392,13 +27366,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 1 @@ -27411,19 +27385,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -27436,7 +27409,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -27459,6 +27432,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -27471,15 +27445,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -27492,9 +27466,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.const 0 @@ -27632,7 +27605,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 0 i32.const 0 @@ -27649,7 +27622,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 11 i32.const 0 @@ -27666,7 +27639,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const -1 i32.const 0 @@ -27683,7 +27656,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 3 i32.const 0 @@ -27793,8 +27766,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Uint16Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 3 i32.const 0 call $~lib/typedarray/Uint16Array#indexOf @@ -27809,7 +27782,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 4 i32.const 0 call $~lib/typedarray/Uint16Array#indexOf @@ -27824,7 +27797,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 0 call $~lib/typedarray/Uint16Array#indexOf @@ -27839,7 +27812,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 9 i32.const 0 call $~lib/typedarray/Uint16Array#indexOf @@ -27854,7 +27827,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 10 i32.const 0 call $~lib/typedarray/Uint16Array#indexOf @@ -27869,7 +27842,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 11 i32.const 0 call $~lib/typedarray/Uint16Array#indexOf @@ -27884,7 +27857,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 1 call $~lib/typedarray/Uint16Array#indexOf @@ -27899,7 +27872,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 2 call $~lib/typedarray/Uint16Array#indexOf @@ -27920,7 +27893,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int32Array#indexOf (; 452 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -27931,6 +27904,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -27981,13 +27955,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 2 @@ -27998,19 +27972,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -28027,6 +28000,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -28073,13 +28047,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 2 @@ -28090,19 +28064,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -28115,7 +28088,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -28138,6 +28111,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -28150,15 +28124,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -28169,9 +28143,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.const 0 @@ -28309,7 +28282,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 0 i32.const 0 @@ -28326,7 +28299,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 11 i32.const 0 @@ -28343,7 +28316,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const -1 i32.const 0 @@ -28360,7 +28333,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 3 i32.const 0 @@ -28470,8 +28443,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Int32Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 3 i32.const 0 call $~lib/typedarray/Int32Array#indexOf @@ -28486,7 +28459,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 4 i32.const 0 call $~lib/typedarray/Int32Array#indexOf @@ -28501,7 +28474,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 0 call $~lib/typedarray/Int32Array#indexOf @@ -28516,7 +28489,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 9 i32.const 0 call $~lib/typedarray/Int32Array#indexOf @@ -28531,7 +28504,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 10 i32.const 0 call $~lib/typedarray/Int32Array#indexOf @@ -28546,7 +28519,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 11 i32.const 0 call $~lib/typedarray/Int32Array#indexOf @@ -28561,7 +28534,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 1 call $~lib/typedarray/Int32Array#indexOf @@ -28576,7 +28549,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 2 call $~lib/typedarray/Int32Array#indexOf @@ -28597,7 +28570,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint32Array#indexOf (; 456 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -28608,6 +28581,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -28658,13 +28632,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 2 @@ -28675,19 +28649,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -28704,6 +28677,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -28750,13 +28724,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 2 @@ -28767,19 +28741,18 @@ i32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -28792,7 +28765,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -28815,6 +28788,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -28827,15 +28801,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -28846,9 +28820,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.const 0 @@ -28986,7 +28959,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 0 i32.const 0 @@ -29003,7 +28976,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 11 i32.const 0 @@ -29020,7 +28993,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const -1 i32.const 0 @@ -29037,7 +29010,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i32.const 3 i32.const 0 @@ -29147,8 +29120,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Uint32Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i32.const 3 i32.const 0 call $~lib/typedarray/Uint32Array#indexOf @@ -29163,7 +29136,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 4 i32.const 0 call $~lib/typedarray/Uint32Array#indexOf @@ -29178,7 +29151,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 0 call $~lib/typedarray/Uint32Array#indexOf @@ -29193,7 +29166,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 9 i32.const 0 call $~lib/typedarray/Uint32Array#indexOf @@ -29208,7 +29181,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 10 i32.const 0 call $~lib/typedarray/Uint32Array#indexOf @@ -29223,7 +29196,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 11 i32.const 0 call $~lib/typedarray/Uint32Array#indexOf @@ -29238,7 +29211,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 1 call $~lib/typedarray/Uint32Array#indexOf @@ -29253,7 +29226,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i32.const 5 i32.const 2 call $~lib/typedarray/Uint32Array#indexOf @@ -29274,7 +29247,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int64Array#indexOf (; 460 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) @@ -29285,6 +29258,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -29335,13 +29309,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 3 @@ -29352,19 +29326,18 @@ i64.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -29381,6 +29354,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -29427,13 +29401,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 3 @@ -29444,19 +29418,18 @@ i64.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -29469,7 +29442,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -29492,6 +29465,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -29504,15 +29478,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -29524,9 +29498,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i64.const 0 @@ -29664,7 +29637,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i64.const 0 i32.const 0 @@ -29681,7 +29654,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i64.const 11 i32.const 0 @@ -29698,7 +29671,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i64.const -1 i32.const 0 @@ -29715,7 +29688,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i64.const 3 i32.const 0 @@ -29825,8 +29798,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Int64Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i64.const 3 i32.const 0 call $~lib/typedarray/Int64Array#indexOf @@ -29841,7 +29814,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 4 i32.const 0 call $~lib/typedarray/Int64Array#indexOf @@ -29856,7 +29829,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 5 i32.const 0 call $~lib/typedarray/Int64Array#indexOf @@ -29871,7 +29844,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 9 i32.const 0 call $~lib/typedarray/Int64Array#indexOf @@ -29886,7 +29859,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 10 i32.const 0 call $~lib/typedarray/Int64Array#indexOf @@ -29901,7 +29874,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 11 i32.const 0 call $~lib/typedarray/Int64Array#indexOf @@ -29916,7 +29889,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 5 i32.const 1 call $~lib/typedarray/Int64Array#indexOf @@ -29931,7 +29904,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 5 i32.const 2 call $~lib/typedarray/Int64Array#indexOf @@ -29952,7 +29925,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint64Array#indexOf (; 464 ;) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) @@ -29963,6 +29936,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -30013,13 +29987,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 3 @@ -30030,19 +30004,18 @@ i64.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -30059,6 +30032,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -30105,13 +30079,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 3 @@ -30122,19 +30096,18 @@ i64.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -30147,7 +30120,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -30170,6 +30143,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -30182,15 +30156,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -30202,9 +30176,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i64.const 0 @@ -30342,7 +30315,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i64.const 0 i32.const 0 @@ -30359,7 +30332,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i64.const 11 i32.const 0 @@ -30376,7 +30349,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i64.const -1 i32.const 0 @@ -30393,7 +30366,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 i64.const 3 i32.const 0 @@ -30503,8 +30476,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Uint64Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 i64.const 3 i32.const 0 call $~lib/typedarray/Uint64Array#indexOf @@ -30519,7 +30492,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 4 i32.const 0 call $~lib/typedarray/Uint64Array#indexOf @@ -30534,7 +30507,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 5 i32.const 0 call $~lib/typedarray/Uint64Array#indexOf @@ -30549,7 +30522,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 9 i32.const 0 call $~lib/typedarray/Uint64Array#indexOf @@ -30564,7 +30537,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 10 i32.const 0 call $~lib/typedarray/Uint64Array#indexOf @@ -30579,7 +30552,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 11 i32.const 0 call $~lib/typedarray/Uint64Array#indexOf @@ -30594,7 +30567,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 5 i32.const 1 call $~lib/typedarray/Uint64Array#indexOf @@ -30609,7 +30582,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 i64.const 5 i32.const 2 call $~lib/typedarray/Uint64Array#indexOf @@ -30630,7 +30603,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float32Array#indexOf (; 468 ;) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) @@ -30641,6 +30614,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -30691,13 +30665,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 2 @@ -30708,19 +30682,18 @@ f32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -30737,6 +30710,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -30783,13 +30757,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 2 @@ -30800,19 +30774,18 @@ f32.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -30825,7 +30798,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -30848,6 +30821,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -30860,15 +30834,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -30880,9 +30854,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 f32.const 0 @@ -31020,7 +30993,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 f32.const 0 i32.const 0 @@ -31037,7 +31010,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 f32.const 11 i32.const 0 @@ -31054,7 +31027,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 f32.const -1 i32.const 0 @@ -31071,7 +31044,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 f32.const 3 i32.const 0 @@ -31181,8 +31154,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Float32Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 f32.const 3 i32.const 0 call $~lib/typedarray/Float32Array#indexOf @@ -31197,7 +31170,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f32.const 4 i32.const 0 call $~lib/typedarray/Float32Array#indexOf @@ -31212,7 +31185,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f32.const 5 i32.const 0 call $~lib/typedarray/Float32Array#indexOf @@ -31227,7 +31200,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f32.const 9 i32.const 0 call $~lib/typedarray/Float32Array#indexOf @@ -31242,7 +31215,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f32.const 10 i32.const 0 call $~lib/typedarray/Float32Array#indexOf @@ -31257,7 +31230,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f32.const 11 i32.const 0 call $~lib/typedarray/Float32Array#indexOf @@ -31272,7 +31245,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f32.const 5 i32.const 1 call $~lib/typedarray/Float32Array#indexOf @@ -31287,7 +31260,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f32.const 5 i32.const 2 call $~lib/typedarray/Float32Array#indexOf @@ -31308,7 +31281,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float64Array#indexOf (; 472 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) @@ -31319,6 +31292,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -31369,13 +31343,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 3 @@ -31386,19 +31360,18 @@ f64.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -31415,6 +31388,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -31461,13 +31435,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - i32.const 0 - i32.ge_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + i32.const 0 + i32.ge_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 3 @@ -31478,19 +31452,18 @@ f64.eq if local.get $6 - local.set $9 + local.set $10 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $10 br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $6 i32.const 1 i32.sub local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const -1 local.set $9 @@ -31503,7 +31476,7 @@ block $1of1 block $0of1 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of1 $1of1 $outOfRange @@ -31526,6 +31499,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues call $~lib/rt/pure/__retain local.set $0 @@ -31538,15 +31512,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -31558,9 +31532,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 f64.const 0 @@ -31698,7 +31671,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 f64.const 0 i32.const 0 @@ -31715,7 +31688,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 f64.const 11 i32.const 0 @@ -31732,7 +31705,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 f64.const -1 i32.const 0 @@ -31749,7 +31722,7 @@ unreachable end i32.const 1 - global.set $~lib/argc + global.set $~argumentsLength local.get $3 f64.const 3 i32.const 0 @@ -31859,8 +31832,8 @@ i32.const 4 i32.const 9 call $~lib/typedarray/Float64Array#subarray - local.set $5 - local.get $5 + local.set $6 + local.get $6 f64.const 3 i32.const 0 call $~lib/typedarray/Float64Array#indexOf @@ -31875,7 +31848,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f64.const 4 i32.const 0 call $~lib/typedarray/Float64Array#indexOf @@ -31890,7 +31863,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f64.const 5 i32.const 0 call $~lib/typedarray/Float64Array#indexOf @@ -31905,7 +31878,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f64.const 9 i32.const 0 call $~lib/typedarray/Float64Array#indexOf @@ -31920,7 +31893,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f64.const 10 i32.const 0 call $~lib/typedarray/Float64Array#indexOf @@ -31935,7 +31908,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f64.const 11 i32.const 0 call $~lib/typedarray/Float64Array#indexOf @@ -31950,7 +31923,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f64.const 5 i32.const 1 call $~lib/typedarray/Float64Array#indexOf @@ -31965,7 +31938,7 @@ call $~lib/builtins/abort unreachable end - local.get $5 + local.get $6 f64.const 5 i32.const 2 call $~lib/typedarray/Float64Array#indexOf @@ -31986,7 +31959,7 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 + local.get $6 call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float64Array#includes (; 476 ;) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) @@ -31998,6 +31971,7 @@ (local $8 i32) (local $9 i32) (local $10 f64) + (local $11 i32) block $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -32048,13 +32022,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 3 @@ -32078,19 +32052,18 @@ end if i32.const 1 - local.set $9 + local.set $11 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $11 br $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 local.set $9 @@ -32109,6 +32082,7 @@ (local $8 i32) (local $9 i32) (local $10 f32) + (local $11 i32) block $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32) local.get $0 call $~lib/rt/pure/__retain @@ -32159,13 +32133,13 @@ local.get $5 i32.load offset=4 local.set $8 - block $break|0 - loop $continue|0 - local.get $6 - local.get $7 - i32.lt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $6 + local.get $7 + i32.lt_s + local.set $9 + local.get $9 + if local.get $8 local.get $6 i32.const 2 @@ -32189,19 +32163,18 @@ end if i32.const 1 - local.set $9 + local.set $11 local.get $5 call $~lib/rt/pure/__release - local.get $9 + local.get $11 br $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0 end local.get $6 i32.const 1 i32.add local.set $6 - br $continue|0 + br $while-continue|0 end - unreachable end i32.const 0 local.set $9 @@ -32283,50 +32256,53 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i64) + (local $8 i32) (local $9 i64) + (local $10 i64) + (local $11 i32) + (local $12 i32) i32.const 2432 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i32.const 10000 - i32.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + local.set $4 + local.get $4 + if local.get $1 i32.const 10000 i32.div_u - local.set $4 + local.set $5 local.get $1 i32.const 10000 i32.rem_u - local.set $5 - local.get $4 - local.set $1 + local.set $6 local.get $5 + local.set $1 + local.get $6 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $7 + local.get $6 i32.const 100 i32.rem_u - local.set $7 + local.set $8 local.get $3 - local.get $6 + local.get $7 i32.const 2 i32.shl i32.add i64.load32_u - local.set $8 + local.set $9 local.get $3 - local.get $7 + local.get $8 i32.const 2 i32.shl i32.add i64.load32_u - local.set $9 + local.set $10 local.get $2 i32.const 4 i32.sub @@ -32336,15 +32312,14 @@ i32.const 1 i32.shl i32.add - local.get $8 local.get $9 + local.get $10 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $1 i32.const 100 @@ -32353,30 +32328,30 @@ local.get $1 i32.const 100 i32.div_u - local.set $7 + local.set $4 local.get $1 i32.const 100 i32.rem_u - local.set $6 - local.get $7 + local.set $11 + local.get $4 local.set $1 local.get $2 i32.const 2 i32.sub local.set $2 local.get $3 - local.get $6 + local.get $11 i32.const 2 i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store end local.get $1 @@ -32393,13 +32368,13 @@ i32.shl i32.add i32.load - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store else local.get $2 @@ -32409,13 +32384,13 @@ i32.const 48 local.get $1 i32.add - local.set $5 + local.set $12 local.get $0 local.get $2 i32.const 1 i32.shl i32.add - local.get $5 + local.get $12 i32.store16 end ) @@ -32730,15 +32705,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 0 @@ -32774,9 +32749,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -32836,6 +32810,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -32870,15 +32845,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -32895,39 +32870,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $9 + local.get $10 return end local.get $5 @@ -32938,17 +32915,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 488 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -33241,15 +33217,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 0 @@ -33285,9 +33261,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -33647,15 +33622,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -33691,9 +33666,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -33931,15 +33905,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -33975,9 +33949,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -34227,15 +34200,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 2 @@ -34271,9 +34244,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -34503,15 +34475,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 2 @@ -34547,9 +34519,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -34752,77 +34723,78 @@ ) (func $~lib/util/number/utoa64_lut (; 526 ;) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) - (local $4 i64) - (local $5 i32) + (local $4 i32) + (local $5 i64) (local $6 i32) (local $7 i32) (local $8 i32) (local $9 i32) (local $10 i32) (local $11 i32) - (local $12 i64) + (local $12 i32) (local $13 i64) + (local $14 i64) i32.const 2432 i32.load offset=4 local.set $3 - block $break|0 - loop $continue|0 - local.get $1 - i64.const 100000000 - i64.ge_u - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $1 + i64.const 100000000 + i64.ge_u + local.set $4 + local.get $4 + if local.get $1 i64.const 100000000 i64.div_u - local.set $4 + local.set $5 local.get $1 - local.get $4 + local.get $5 i64.const 100000000 i64.mul i64.sub i32.wrap_i64 - local.set $5 - local.get $4 - local.set $1 - local.get $5 - i32.const 10000 - i32.div_u local.set $6 local.get $5 - i32.const 10000 - i32.rem_u - local.set $7 + local.set $1 local.get $6 - i32.const 100 + i32.const 10000 i32.div_u - local.set $8 + local.set $7 local.get $6 - i32.const 100 + i32.const 10000 i32.rem_u - local.set $9 + local.set $8 local.get $7 i32.const 100 i32.div_u - local.set $10 + local.set $9 local.get $7 i32.const 100 i32.rem_u + local.set $10 + local.get $8 + i32.const 100 + i32.div_u local.set $11 + local.get $8 + i32.const 100 + i32.rem_u + local.set $12 local.get $3 - local.get $10 + local.get $11 i32.const 2 i32.shl i32.add i64.load32_u - local.set $12 + local.set $13 local.get $3 - local.get $11 + local.get $12 i32.const 2 i32.shl i32.add i64.load32_u - local.set $13 + local.set $14 local.get $2 i32.const 4 i32.sub @@ -34832,26 +34804,26 @@ i32.const 1 i32.shl i32.add - local.get $12 local.get $13 + local.get $14 i64.const 32 i64.shl i64.or i64.store local.get $3 - local.get $8 + local.get $9 i32.const 2 i32.shl i32.add i64.load32_u - local.set $12 + local.set $13 local.get $3 - local.get $9 + local.get $10 i32.const 2 i32.shl i32.add i64.load32_u - local.set $13 + local.set $14 local.get $2 i32.const 4 i32.sub @@ -34861,15 +34833,14 @@ i32.const 1 i32.shl i32.add - local.get $12 local.get $13 + local.get $14 i64.const 32 i64.shl i64.or i64.store - br $continue|0 + br $while-continue|0 end - unreachable end local.get $0 local.get $1 @@ -35115,15 +35086,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 3 @@ -35159,9 +35130,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -35483,15 +35453,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 3 @@ -35527,9 +35497,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -35688,14 +35657,17 @@ (local $16 i32) (local $17 i32) (local $18 i32) - (local $19 i64) + (local $19 i32) (local $20 i64) (local $21 i64) (local $22 i64) (local $23 i64) - (local $24 i32) + (local $24 i64) (local $25 i32) (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i64) i32.const 0 local.get $4 i32.sub @@ -35733,13 +35705,13 @@ i32.const 3728 i32.load offset=4 local.set $16 - block $break|0 - loop $continue|0 - local.get $14 - i32.const 0 - i32.gt_s - i32.eqz - br_if $break|0 + loop $while-continue|0 + local.get $14 + i32.const 0 + i32.gt_s + local.set $17 + local.get $17 + if block $break|1 block $case10|1 block $case9|1 @@ -35753,44 +35725,44 @@ block $case1|1 block $case0|1 local.get $14 - local.set $18 - local.get $18 + local.set $19 + local.get $19 i32.const 10 i32.eq br_if $case0|1 - local.get $18 + local.get $19 i32.const 9 i32.eq br_if $case1|1 - local.get $18 + local.get $19 i32.const 8 i32.eq br_if $case2|1 - local.get $18 + local.get $19 i32.const 7 i32.eq br_if $case3|1 - local.get $18 + local.get $19 i32.const 6 i32.eq br_if $case4|1 - local.get $18 + local.get $19 i32.const 5 i32.eq br_if $case5|1 - local.get $18 + local.get $19 i32.const 4 i32.eq br_if $case6|1 - local.get $18 + local.get $19 i32.const 3 i32.eq br_if $case7|1 - local.get $18 + local.get $19 i32.const 2 i32.eq br_if $case8|1 - local.get $18 + local.get $19 i32.const 1 i32.eq br_if $case9|1 @@ -35799,7 +35771,7 @@ local.get $12 i32.const 1000000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000000 i32.rem_u @@ -35809,7 +35781,7 @@ local.get $12 i32.const 100000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000000 i32.rem_u @@ -35819,7 +35791,7 @@ local.get $12 i32.const 10000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000000 i32.rem_u @@ -35829,7 +35801,7 @@ local.get $12 i32.const 1000000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000000 i32.rem_u @@ -35839,7 +35811,7 @@ local.get $12 i32.const 100000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100000 i32.rem_u @@ -35849,7 +35821,7 @@ local.get $12 i32.const 10000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10000 i32.rem_u @@ -35859,7 +35831,7 @@ local.get $12 i32.const 1000 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 1000 i32.rem_u @@ -35869,7 +35841,7 @@ local.get $12 i32.const 100 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 100 i32.rem_u @@ -35879,7 +35851,7 @@ local.get $12 i32.const 10 i32.div_u - local.set $17 + local.set $18 local.get $12 i32.const 10 i32.rem_u @@ -35887,31 +35859,31 @@ br $break|1 end local.get $12 - local.set $17 + local.set $18 i32.const 0 local.set $12 br $break|1 end i32.const 0 - local.set $17 + local.set $18 br $break|1 end - local.get $17 + local.get $18 local.get $15 i32.or if local.get $0 local.get $15 - local.tee $18 + local.tee $19 i32.const 1 i32.add local.set $15 - local.get $18 + local.get $19 i32.const 1 i32.shl i32.add i32.const 48 - local.get $17 + local.get $18 i32.const 65535 i32.and i32.add @@ -35928,8 +35900,8 @@ i64.shl local.get $13 i64.add - local.set $19 - local.get $19 + local.set $20 + local.get $20 local.get $5 i64.le_u if @@ -35938,13 +35910,13 @@ i32.add global.set $~lib/util/number/_K local.get $0 - local.set $24 + local.set $25 local.get $15 - local.set $18 + local.set $19 local.get $5 + local.set $24 + local.get $20 local.set $23 - local.get $19 - local.set $22 local.get $16 local.get $14 i32.const 2 @@ -35954,228 +35926,230 @@ local.get $7 i64.extend_i32_s i64.shl - local.set $21 + local.set $22 local.get $10 - local.set $20 - local.get $24 - local.get $18 + local.set $21 + local.get $25 + local.get $19 i32.const 1 i32.sub i32.const 1 i32.shl i32.add - local.set $25 - local.get $25 - i32.load16_u local.set $26 - block $break|2 - loop $continue|2 + local.get $26 + i32.load16_u + local.set $27 + loop $while-continue|3 + local.get $23 + local.get $21 + i64.lt_u + if (result i32) + local.get $24 + local.get $23 + i64.sub local.get $22 - local.get $20 + i64.ge_u + else + i32.const 0 + end + if (result i32) + local.get $23 + local.get $22 + i64.add + local.get $21 i64.lt_u if (result i32) + i32.const 1 + else + local.get $21 local.get $23 - local.get $22 i64.sub - local.get $21 - i64.ge_u - else - i32.const 0 - end - if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 - i64.lt_u - if (result i32) - i32.const 1 - else - local.get $20 - local.get $22 - i64.sub - local.get $22 - local.get $21 - i64.add - local.get $20 - i64.sub - i64.gt_u - end - else - i32.const 0 + local.get $21 + i64.sub + i64.gt_u end - i32.eqz - br_if $break|2 - local.get $26 + else + i32.const 0 + end + local.set $28 + local.get $28 + if + local.get $27 i32.const 1 i32.sub - local.set $26 + local.set $27 + local.get $23 local.get $22 - local.get $21 i64.add - local.set $22 - br $continue|2 + local.set $23 + br $while-continue|3 end - unreachable end - local.get $25 local.get $26 + local.get $27 i32.store16 local.get $15 return end - br $continue|0 + br $while-continue|0 end - unreachable end - loop $continue|3 - local.get $13 - i64.const 10 - i64.mul - local.set $13 - local.get $5 - i64.const 10 - i64.mul - local.set $5 - local.get $13 - local.get $7 - i64.extend_i32_s - i64.shr_u - local.set $19 - local.get $19 - local.get $15 - i64.extend_i32_s - i64.or - i64.const 0 - i64.ne - if - local.get $0 - local.get $15 - local.tee $17 - i32.const 1 - i32.add - local.set $15 - local.get $17 - i32.const 1 - i32.shl - i32.add - i32.const 48 - local.get $19 - i32.wrap_i64 - i32.const 65535 - i32.and - i32.add - i32.store16 - end - local.get $13 - local.get $9 - i64.and - local.set $13 - local.get $14 + loop $while-continue|4 i32.const 1 - i32.sub - local.set $14 - local.get $13 - local.get $5 - i64.lt_u + local.set $17 + local.get $17 if - global.get $~lib/util/number/_K - local.get $14 - i32.add - global.set $~lib/util/number/_K - local.get $10 - local.get $16 - i32.const 0 - local.get $14 - i32.sub - i32.const 2 - i32.shl - i32.add - i64.load32_u + local.get $13 + i64.const 10 i64.mul - local.set $10 - local.get $0 - local.set $24 - local.get $15 - local.set $18 + local.set $13 local.get $5 - local.set $23 + i64.const 10 + i64.mul + local.set $5 local.get $13 - local.set $22 - local.get $8 - local.set $21 - local.get $10 - local.set $20 + local.get $7 + i64.extend_i32_s + i64.shr_u + local.set $24 local.get $24 - local.get $18 + local.get $15 + i64.extend_i32_s + i64.or + i64.const 0 + i64.ne + if + local.get $0 + local.get $15 + local.tee $27 + i32.const 1 + i32.add + local.set $15 + local.get $27 + i32.const 1 + i32.shl + i32.add + i32.const 48 + local.get $24 + i32.wrap_i64 + i32.const 65535 + i32.and + i32.add + i32.store16 + end + local.get $13 + local.get $9 + i64.and + local.set $13 + local.get $14 i32.const 1 i32.sub - i32.const 1 - i32.shl - i32.add - local.set $17 - local.get $17 - i32.load16_u - local.set $26 - block $break|4 - loop $continue|4 - local.get $22 - local.get $20 + local.set $14 + local.get $13 + local.get $5 + i64.lt_u + if + global.get $~lib/util/number/_K + local.get $14 + i32.add + global.set $~lib/util/number/_K + local.get $10 + local.get $16 + i32.const 0 + local.get $14 + i32.sub + i32.const 2 + i32.shl + i32.add + i64.load32_u + i64.mul + local.set $10 + local.get $0 + local.set $19 + local.get $15 + local.set $28 + local.get $5 + local.set $29 + local.get $13 + local.set $23 + local.get $8 + local.set $22 + local.get $10 + local.set $21 + local.get $19 + local.get $28 + i32.const 1 + i32.sub + i32.const 1 + i32.shl + i32.add + local.set $27 + local.get $27 + i32.load16_u + local.set $26 + loop $while-continue|6 + local.get $23 + local.get $21 i64.lt_u if (result i32) + local.get $29 local.get $23 - local.get $22 i64.sub - local.get $21 + local.get $22 i64.ge_u else i32.const 0 end if (result i32) + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.lt_u if (result i32) i32.const 1 else - local.get $20 - local.get $22 + local.get $21 + local.get $23 i64.sub + local.get $23 local.get $22 - local.get $21 i64.add - local.get $20 + local.get $21 i64.sub i64.gt_u end else i32.const 0 end - i32.eqz - br_if $break|4 - local.get $26 - i32.const 1 - i32.sub - local.set $26 - local.get $22 - local.get $21 - i64.add - local.set $22 - br $continue|4 + local.set $25 + local.get $25 + if + local.get $26 + i32.const 1 + i32.sub + local.set $26 + local.get $23 + local.get $22 + i64.add + local.set $23 + br $while-continue|6 + end end - unreachable + local.get $27 + local.get $26 + i32.store16 + local.get $15 + return end - local.get $17 - local.get $26 - i32.store16 - local.get $15 - return + br $while-continue|4 end - br $continue|3 end - unreachable + local.get $15 ) (func $~lib/util/number/prettify (; 544 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -36221,15 +36195,15 @@ i32.const 0 end if - block $break|0 - local.get $1 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + local.get $1 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 1 @@ -36241,9 +36215,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -36332,15 +36305,15 @@ i32.shl i32.or i32.store - block $break|1 - i32.const 2 - local.set $5 - loop $loop|1 - local.get $5 - local.get $4 - i32.lt_s - i32.eqz - br_if $break|1 + i32.const 2 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $4 + i32.lt_s + local.set $6 + local.get $6 + if local.get $0 local.get $5 i32.const 1 @@ -36352,9 +36325,8 @@ i32.const 1 i32.add local.set $5 - br $loop|1 + br $for-loop|1 end - unreachable end local.get $1 local.get $4 @@ -36371,30 +36343,30 @@ local.get $0 i32.const 4 i32.add - local.set $4 + local.set $5 local.get $3 i32.const 1 i32.sub - local.set $5 - local.get $5 - i32.const 0 - i32.lt_s local.set $6 local.get $6 + i32.const 0 + i32.lt_s + local.set $4 + local.get $4 if i32.const 0 - local.get $5 + local.get $6 i32.sub - local.set $5 + local.set $6 end - local.get $5 + local.get $6 call $~lib/util/number/decimalCount32 i32.const 1 i32.add local.set $7 - local.get $4 - local.set $10 local.get $5 + local.set $10 + local.get $6 local.set $9 local.get $7 local.set $8 @@ -36402,10 +36374,10 @@ local.get $9 local.get $8 call $~lib/util/number/utoa32_lut - local.get $4 + local.get $5 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 local.get $7 @@ -36451,8 +36423,8 @@ local.get $8 i32.const 0 i32.lt_s - local.set $6 - local.get $6 + local.set $4 + local.get $4 if i32.const 0 local.get $8 @@ -36463,24 +36435,24 @@ call $~lib/util/number/decimalCount32 i32.const 1 i32.add - local.set $4 + local.set $5 local.get $9 local.set $11 local.get $8 - local.set $5 - local.get $4 + local.set $6 + local.get $5 local.set $10 local.get $11 - local.get $5 + local.get $6 local.get $10 call $~lib/util/number/utoa32_lut local.get $9 i32.const 45 i32.const 43 - local.get $6 + local.get $4 select i32.store16 - local.get $4 + local.get $5 i32.add local.set $1 local.get $1 @@ -37114,15 +37086,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 2 @@ -37159,9 +37131,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -37350,15 +37321,15 @@ local.set $8 i32.const 0 local.set $9 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $3 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $3 + i32.lt_s + local.set $5 + local.get $5 + if local.get $0 local.get $4 i32.const 3 @@ -37394,9 +37365,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 local.get $3 @@ -37737,7 +37707,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -37776,15 +37746,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -37799,9 +37769,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -37813,59 +37782,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Int8Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Int8Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Int8Array#__get i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -37873,10 +37834,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8Array.wrap (; 561 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -38002,7 +37963,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -38041,15 +38002,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -38062,9 +38023,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -38076,59 +38036,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Uint8Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Uint8Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Uint8Array#__get i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -38136,10 +38088,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint8ClampedArray.wrap (; 564 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -38265,7 +38217,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -38304,15 +38256,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -38325,9 +38277,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -38339,59 +38290,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Uint8ClampedArray.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Uint8ClampedArray#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Uint8ClampedArray#__get i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -38399,10 +38342,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int16Array.wrap (; 567 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -38528,7 +38471,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -38567,15 +38510,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -38590,9 +38533,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -38604,59 +38546,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Int16Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Int16Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Int16Array#__get i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -38664,10 +38598,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint16Array.wrap (; 570 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -38793,7 +38727,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -38832,15 +38766,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -38853,9 +38787,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -38867,59 +38800,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Uint16Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Uint16Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Uint16Array#__get i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -38927,10 +38852,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int32Array.wrap (; 573 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -39056,7 +38981,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -39095,15 +39020,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -39114,9 +39039,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -39128,59 +39052,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Int32Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Int32Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Int32Array#__get i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -39188,10 +39104,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint32Array.wrap (; 576 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -39317,7 +39233,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -39356,15 +39272,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -39375,9 +39291,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -39389,59 +39304,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Uint32Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Uint32Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Uint32Array#__get i32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -39449,10 +39356,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int64Array.wrap (; 579 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -39578,7 +39485,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -39617,15 +39524,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -39637,9 +39544,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -39651,59 +39557,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Int64Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Int64Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Int64Array#__get i64.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -39711,10 +39609,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Uint64Array.wrap (; 582 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -39840,7 +39738,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -39879,15 +39777,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -39899,9 +39797,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -39913,59 +39810,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Uint64Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Uint64Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Uint64Array#__get i64.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -39973,10 +39862,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float32Array.wrap (; 585 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -40102,7 +39991,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -40141,15 +40030,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -40161,9 +40050,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -40175,59 +40063,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Float32Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Float32Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Float32Array#__get f32.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -40235,10 +40115,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Float64Array.wrap (; 588 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -40364,7 +40244,7 @@ block $1of2 block $0of2 block $outOfRange - global.get $~lib/argc + global.get $~argumentsLength i32.const 1 i32.sub br_table $0of2 $1of2 $2of2 $outOfRange @@ -40403,15 +40283,15 @@ local.tee $2 call $~lib/rt/pure/__retain local.set $3 - block $break|0 - i32.const 0 - local.set $4 - loop $loop|0 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $5 + local.get $5 + if local.get $3 local.get $4 local.get $0 @@ -40423,9 +40303,8 @@ i32.const 1 i32.add local.set $4 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $3 i32.load @@ -40437,59 +40316,51 @@ i32.load offset=8 i32.add call $~lib/arraybuffer/ArrayBuffer#slice - local.set $5 - i32.const 0 - call $~lib/rt/pure/__retain local.set $6 + i32.const 0 + local.set $7 i32.const 1 - global.set $~lib/argc - local.get $5 + global.set $~argumentsLength + local.get $6 i32.const 0 i32.const 0 call $~lib/typedarray/Float64Array.wrap|trampoline - local.set $4 - local.get $6 + local.set $5 + local.get $7 call $~lib/rt/pure/__release - local.get $4 - local.set $6 - block $break|1 - i32.const 0 + local.get $5 + local.set $7 + i32.const 0 + local.set $5 + loop $for-loop|1 + local.get $5 + local.get $1 + i32.lt_s local.set $4 - loop $loop|1 - local.get $4 - local.get $1 - i32.lt_s - i32.eqz - br_if $break|1 + local.get $4 + if local.get $3 - local.get $4 + local.get $5 call $~lib/typedarray/Float64Array#__get - local.get $6 - local.tee $7 - if (result i32) - local.get $7 - else - unreachable - end - local.get $4 + local.get $7 + local.get $5 call $~lib/typedarray/Float64Array#__get f64.eq i32.eqz if i32.const 0 i32.const 416 - i32.const 681 + i32.const 684 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 - br $loop|1 + local.set $5 + br $for-loop|1 end - unreachable end local.get $2 call $~lib/rt/pure/__release @@ -40497,10 +40368,10 @@ call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release - local.get $5 - call $~lib/rt/pure/__release local.get $6 call $~lib/rt/pure/__release + local.get $7 + call $~lib/rt/pure/__release ) (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (; 591 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -40510,6 +40381,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -40568,15 +40440,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 0 @@ -40593,9 +40465,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -40609,6 +40480,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -40626,40 +40498,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Int8Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i32.ne if i32.const 4224 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i32_s local.get $5 f64.convert_i32_s + local.get $6 + f64.convert_i32_s f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -40668,7 +40540,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -40678,9 +40550,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -40699,7 +40570,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -40758,34 +40630,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f32_s else i32.const 0 @@ -40795,9 +40667,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -40814,6 +40685,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -40872,15 +40744,15 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 0 @@ -40897,9 +40769,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -40920,7 +40791,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -40979,34 +40851,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f64_s else i32.const 0 @@ -41016,9 +40888,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -41102,6 +40973,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -41160,15 +41032,15 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 0 @@ -41185,9 +41057,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -41434,6 +41305,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -41492,15 +41364,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 0 @@ -41517,9 +41389,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -41546,6 +41417,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -41563,40 +41435,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Uint8Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i32.ne if i32.const 4432 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i32_u local.get $5 f64.convert_i32_u + local.get $6 + f64.convert_i32_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -41605,7 +41477,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -41615,9 +41487,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -41632,7 +41503,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -41691,34 +41563,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f32_u else i32.const 0 @@ -41728,9 +41600,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -41747,6 +41618,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -41805,15 +41677,15 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 0 @@ -41830,9 +41702,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -41849,7 +41720,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -41908,34 +41780,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f64_u else i32.const 0 @@ -41945,9 +41817,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -42031,6 +41902,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -42089,15 +41961,15 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 0 @@ -42114,9 +41986,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -42364,6 +42235,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -42422,38 +42294,38 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add i32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 + local.get $11 i32.const 31 i32.shr_s i32.const -1 i32.xor i32.const 255 - local.get $10 + local.get $11 i32.sub i32.const 31 i32.shr_s - local.get $10 + local.get $11 i32.or i32.and i32.store8 @@ -42461,9 +42333,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -42477,6 +42348,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -42494,40 +42366,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Uint8ClampedArray#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i32.ne if i32.const 4640 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i32_u local.get $5 f64.convert_i32_u + local.get $6 + f64.convert_i32_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -42536,7 +42408,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -42546,9 +42418,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -42563,7 +42434,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -42622,36 +42494,36 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i32) f32.const 0 f32.const 255 - local.get $10 + local.get $11 f32.min f32.max i32.trunc_f32_u @@ -42663,9 +42535,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -42682,7 +42553,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i64) + (local $10 i32) + (local $11 i64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -42741,28 +42613,28 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add i64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 + local.get $11 i32.wrap_i64 i32.const 31 i32.shr_s @@ -42770,13 +42642,13 @@ i32.xor i64.extend_i32_s i32.const 255 - local.get $10 + local.get $11 i32.wrap_i64 i32.sub i32.const 31 i32.shr_s i64.extend_i32_s - local.get $10 + local.get $11 i64.or i64.and i64.store8 @@ -42784,9 +42656,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -42803,7 +42674,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -42862,36 +42734,36 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i32) f64.const 0 f64.const 255 - local.get $10 + local.get $11 f64.min f64.max i32.trunc_f64_u @@ -42903,9 +42775,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -42990,6 +42861,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -43048,38 +42920,38 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 1 i32.shl i32.add i32.load16_s - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 + local.get $11 i32.const 31 i32.shr_s i32.const -1 i32.xor i32.const 255 - local.get $10 + local.get $11 i32.sub i32.const 31 i32.shr_s - local.get $10 + local.get $11 i32.or i32.and i32.store8 @@ -43087,9 +42959,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -43107,6 +42978,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -43165,38 +43037,38 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 0 i32.shl i32.add i32.load8_s - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 + local.get $11 i32.const 31 i32.shr_s i32.const -1 i32.xor i32.const 255 - local.get $10 + local.get $11 i32.sub i32.const 31 i32.shr_s - local.get $10 + local.get $11 i32.or i32.and i32.store8 @@ -43204,9 +43076,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -43386,6 +43257,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -43444,15 +43316,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 1 @@ -43469,9 +43341,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -43489,6 +43360,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -43506,40 +43378,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Int16Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i32.ne if i32.const 4880 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i32_s local.get $5 f64.convert_i32_s + local.get $6 + f64.convert_i32_s f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -43548,7 +43420,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -43558,9 +43430,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -43575,7 +43446,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -43634,34 +43506,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 1 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f32_s else i32.const 0 @@ -43671,9 +43543,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -43690,6 +43561,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -43748,15 +43620,15 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 1 @@ -43773,9 +43645,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -43792,7 +43663,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -43851,34 +43723,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 1 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f64_s else i32.const 0 @@ -43888,9 +43760,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -43907,6 +43778,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -43965,15 +43837,15 @@ local.get $4 call $~lib/typedarray/Uint8Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 1 @@ -43990,9 +43862,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -44076,6 +43947,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -44134,15 +44006,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 1 @@ -44159,9 +44031,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -44341,6 +44212,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -44399,15 +44271,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 1 @@ -44424,9 +44296,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -44453,6 +44324,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -44470,40 +44342,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Uint16Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i32.ne if i32.const 5168 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i32_u local.get $5 f64.convert_i32_u + local.get $6 + f64.convert_i32_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -44512,7 +44384,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -44522,9 +44394,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -44539,7 +44410,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -44598,34 +44470,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 1 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f32_u else i32.const 0 @@ -44635,9 +44507,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -44654,6 +44525,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -44712,15 +44584,15 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 1 @@ -44737,9 +44609,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -44756,7 +44627,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -44815,34 +44687,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 1 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f64_u else i32.const 0 @@ -44852,9 +44724,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -44871,6 +44742,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -44929,15 +44801,15 @@ local.get $4 call $~lib/typedarray/Uint8Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 1 @@ -44954,9 +44826,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -45040,6 +44911,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -45098,15 +44970,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 1 @@ -45123,9 +44995,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -45369,6 +45240,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -45386,40 +45258,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Int32Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i32.ne if i32.const 5472 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i32_s local.get $5 f64.convert_i32_s + local.get $6 + f64.convert_i32_s f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -45428,7 +45300,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -45438,9 +45310,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -45455,7 +45326,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -45514,34 +45386,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f32_s else i32.const 0 @@ -45551,9 +45423,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -45570,6 +45441,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -45628,15 +45500,15 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -45653,9 +45525,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -45672,7 +45543,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -45731,34 +45603,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f64_s else i32.const 0 @@ -45768,9 +45640,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -45787,6 +45658,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -45845,15 +45717,15 @@ local.get $4 call $~lib/typedarray/Uint8Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -45870,9 +45742,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -45889,6 +45760,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -45947,15 +45819,15 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -45972,9 +45844,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -45991,6 +45862,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -46049,15 +45921,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -46074,9 +45946,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -46333,6 +46204,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -46350,40 +46222,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Uint32Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i32.ne if i32.const 5840 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i32_u local.get $5 f64.convert_i32_u + local.get $6 + f64.convert_i32_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -46392,7 +46264,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -46402,9 +46274,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -46419,7 +46290,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -46478,34 +46350,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f32_u else i32.const 0 @@ -46515,9 +46387,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -46534,6 +46405,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -46592,15 +46464,15 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -46617,9 +46489,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -46636,7 +46507,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -46695,34 +46567,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i32) - local.get $10 + local.get $11 i32.trunc_f64_u else i32.const 0 @@ -46732,9 +46604,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -46751,6 +46622,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -46809,15 +46681,15 @@ local.get $4 call $~lib/typedarray/Uint8Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -46834,9 +46706,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -46853,6 +46724,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -46911,15 +46783,15 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -46936,9 +46808,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -46955,6 +46826,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -47013,15 +46885,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -47038,9 +46910,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -47220,6 +47091,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -47278,15 +47150,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -47303,9 +47175,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -47330,8 +47201,9 @@ (func $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> (; 666 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) - (local $4 i64) + (local $4 i32) (local $5 i64) + (local $6 i64) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -47349,40 +47221,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Int64Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i64.ne if i32.const 6240 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i64_s local.get $5 f64.convert_i64_s + local.get $6 + f64.convert_i64_s f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -47391,7 +47263,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -47401,9 +47273,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -47418,7 +47289,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -47477,34 +47349,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 3 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i64) - local.get $10 + local.get $11 i64.trunc_f32_s else i64.const 0 @@ -47514,9 +47386,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -47600,7 +47471,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -47659,34 +47531,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 3 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i64) - local.get $10 + local.get $11 i64.trunc_f64_s else i64.const 0 @@ -47696,9 +47568,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -47715,6 +47586,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -47773,15 +47645,15 @@ local.get $4 call $~lib/typedarray/Uint8Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -47798,9 +47670,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -47817,6 +47688,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -47875,15 +47747,15 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -47900,9 +47772,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -47919,6 +47790,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -47977,15 +47849,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -48002,9 +47874,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -48184,6 +48055,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -48242,15 +48114,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -48267,9 +48139,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -48285,8 +48156,9 @@ (func $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> (; 676 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) - (local $4 i64) + (local $4 i32) (local $5 i64) + (local $6 i64) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -48304,40 +48176,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Uint64Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 i64.ne if i32.const 6768 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.convert_i64_u local.get $5 f64.convert_i64_u + local.get $6 + f64.convert_i64_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -48346,7 +48218,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -48356,9 +48228,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -48373,7 +48244,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -48432,34 +48304,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 3 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i64) - local.get $10 + local.get $11 i64.trunc_f32_u else i64.const 0 @@ -48469,9 +48341,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -48555,7 +48426,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f64) + (local $10 i32) + (local $11 f64) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -48614,34 +48486,34 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 3 i32.shl i32.add f64.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 3 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f64.sub f64.const 0 f64.eq if (result i64) - local.get $10 + local.get $11 i64.trunc_f64_u else i64.const 0 @@ -48651,9 +48523,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -48670,6 +48541,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -48728,15 +48600,15 @@ local.get $4 call $~lib/typedarray/Uint8Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -48753,9 +48625,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -48772,6 +48643,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -48830,15 +48702,15 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -48855,9 +48727,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -48874,6 +48745,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -48932,15 +48804,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -48957,9 +48829,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -49139,6 +49010,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -49197,15 +49069,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -49223,9 +49095,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -49246,8 +49117,9 @@ (func $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> (; 686 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) - (local $4 f32) + (local $4 i32) (local $5 f32) + (local $6 f32) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -49265,40 +49137,40 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Float32Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 f32.ne if i32.const 7264 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 - f64.promote_f32 local.get $5 f64.promote_f32 + local.get $6 + f64.promote_f32 f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -49307,7 +49179,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -49317,9 +49189,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -49401,6 +49272,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -49459,15 +49331,15 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -49485,9 +49357,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -49504,6 +49375,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -49562,15 +49434,15 @@ local.get $4 call $~lib/typedarray/Uint8Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -49588,9 +49460,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -49607,6 +49478,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -49665,15 +49537,15 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -49691,9 +49563,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -49710,6 +49581,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -49768,15 +49640,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 2 @@ -49794,9 +49666,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -49961,6 +49832,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -50019,15 +49891,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -50045,9 +49917,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -50068,8 +49939,9 @@ (func $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> (; 695 ;) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) - (local $4 f64) + (local $4 i32) (local $5 f64) + (local $6 f64) local.get $0 call $~lib/rt/pure/__retain local.set $0 @@ -50087,38 +49959,38 @@ if i32.const 0 i32.const 416 - i32.const 699 + i32.const 702 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|0 - i32.const 0 - local.set $3 - loop $loop|0 - local.get $3 - local.get $2 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $3 + loop $for-loop|0 + local.get $3 + local.get $2 + i32.lt_s + local.set $4 + local.get $4 + if local.get $0 local.get $3 call $~lib/typedarray/Float64Array#__get - local.set $4 + local.set $5 local.get $1 local.get $3 call $~lib/array/Array#__unchecked_get - local.set $5 - local.get $4 + local.set $6 local.get $5 + local.get $6 f64.ne if i32.const 7600 i32.const 3 local.get $3 f64.convert_i32_s - local.get $4 local.get $5 + local.get $6 f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -50127,7 +49999,7 @@ if i32.const 0 i32.const 416 - i32.const 705 + i32.const 708 i32.const 6 call $~lib/builtins/abort unreachable @@ -50137,9 +50009,8 @@ i32.const 1 i32.add local.set $3 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $0 call $~lib/rt/pure/__release @@ -50154,6 +50025,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -50212,15 +50084,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -50238,9 +50110,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -50257,6 +50128,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -50315,15 +50187,15 @@ local.get $4 call $~lib/typedarray/Int64Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -50341,9 +50213,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -50360,6 +50231,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -50418,15 +50290,15 @@ local.get $4 call $~lib/typedarray/Uint8Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -50444,9 +50316,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -50463,6 +50334,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -50521,15 +50393,15 @@ local.get $4 call $~lib/typedarray/Int16Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -50547,9 +50419,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -50566,6 +50437,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -50624,15 +50496,15 @@ local.get $4 call $~lib/array/Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $6 local.get $9 i32.const 3 @@ -50650,9 +50522,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -50817,7 +50688,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 f32) + (local $10 i32) + (local $11 f32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -50876,36 +50748,36 @@ local.get $4 call $~lib/typedarray/Float32Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add f32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 - local.get $10 + local.get $11 + local.get $11 f32.sub f32.const 0 f32.eq if (result i32) f32.const 0 f32.const 255 - local.get $10 + local.get $11 f32.min f32.max i32.trunc_f32_u @@ -50917,9 +50789,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -50937,6 +50808,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -50995,38 +50867,38 @@ local.get $4 call $~lib/typedarray/Int32Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add i32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add - local.get $10 + local.get $11 i32.const 31 i32.shr_s i32.const -1 i32.xor i32.const 255 - local.get $10 + local.get $11 i32.sub i32.const 31 i32.shr_s - local.get $10 + local.get $11 i32.or i32.and i32.store8 @@ -51034,9 +50906,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -51056,6 +50927,7 @@ (local $10 i32) (local $11 i32) (local $12 i32) + (local $13 i32) local.get $1 call $~lib/rt/pure/__retain local.set $1 @@ -51114,33 +50986,33 @@ local.get $4 call $~lib/typedarray/Uint32Array#get:length local.set $8 - block $break|0 - i32.const 0 - local.set $9 - loop $loop|0 - local.get $9 - local.get $8 - i32.lt_s - i32.eqz - br_if $break|0 + i32.const 0 + local.set $9 + loop $for-loop|0 + local.get $9 + local.get $8 + i32.lt_s + local.set $10 + local.get $10 + if local.get $7 local.get $9 i32.const 2 i32.shl i32.add i32.load - local.set $10 + local.set $11 local.get $6 local.get $9 i32.const 0 i32.shl i32.add i32.const 255 - local.tee $11 - local.get $10 local.tee $12 local.get $11 + local.tee $13 local.get $12 + local.get $13 i32.lt_u select i32.store8 @@ -51148,9 +51020,8 @@ i32.const 1 i32.add local.set $9 - br $loop|0 + br $for-loop|0 end - unreachable end local.get $4 call $~lib/rt/pure/__release @@ -51437,7 +51308,7 @@ unreachable end i32.const 0 - global.set $~lib/argc + global.set $~argumentsLength local.get $0 i32.const 0 call $~lib/typedarray/Float64Array#sort|trampoline @@ -53348,13 +53219,13 @@ local.get $18 call $~lib/rt/pure/__release ) - (func $start (; 706 ;) - global.get $~lib/started + (func $~start (; 706 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:std/typedarray ) diff --git a/tests/compiler/switch.optimized.wat b/tests/compiler/switch.optimized.wat index 85d4ade310..0202f18225 100644 --- a/tests/compiler/switch.optimized.wat +++ b/tests/compiler/switch.optimized.wat @@ -6,7 +6,7 @@ (memory $0 1) (data (i32.const 16) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s") (export "memory" (memory $0)) - (start $start) + (start $~start) (func $switch/doSwitch (; 1 ;) (param $0 i32) (result i32) block $case4|0 block $case2|0 @@ -394,7 +394,7 @@ unreachable end ) - (func $start (; 6 ;) + (func $~start (; 6 ;) call $start:switch ) ) diff --git a/tests/compiler/switch.untouched.wat b/tests/compiler/switch.untouched.wat index 4183fc3738..e10b4d7006 100644 --- a/tests/compiler/switch.untouched.wat +++ b/tests/compiler/switch.untouched.wat @@ -7,7 +7,7 @@ (data (i32.const 16) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s\00") (table $0 1 funcref) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $switch/doSwitch (; 1 ;) (param $0 i32) (result i32) (local $1 i32) block $case4|0 @@ -548,7 +548,7 @@ unreachable end ) - (func $start (; 9 ;) + (func $~start (; 9 ;) call $start:switch ) ) diff --git a/tests/compiler/ternary.optimized.wat b/tests/compiler/ternary.optimized.wat index a8cf7e6479..b0e8026db7 100644 --- a/tests/compiler/ternary.optimized.wat +++ b/tests/compiler/ternary.optimized.wat @@ -3,8 +3,8 @@ (memory $0 0) (global $ternary/a (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) - (func $start (; 0 ;) + (start $~start) + (func $~start (; 0 ;) i32.const 1 global.set $ternary/a i32.const 1 diff --git a/tests/compiler/ternary.untouched.wat b/tests/compiler/ternary.untouched.wat index b426c324ec..ce4e978dd6 100644 --- a/tests/compiler/ternary.untouched.wat +++ b/tests/compiler/ternary.untouched.wat @@ -4,7 +4,7 @@ (table $0 1 funcref) (global $ternary/a (mut i32) (i32.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:ternary (; 0 ;) i32.const 1 drop @@ -19,7 +19,7 @@ i32.const 1 global.set $ternary/a ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:ternary ) ) diff --git a/tests/compiler/typeof.optimized.wat b/tests/compiler/typeof.optimized.wat index 8e91b607a9..95ef342a17 100644 --- a/tests/compiler/typeof.optimized.wat +++ b/tests/compiler/typeof.optimized.wat @@ -19,8 +19,8 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $typeof/c (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) - (export "_start" (func $start)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/string/String#get:length (; 1 ;) (param $0 i32) (result i32) local.get $0 @@ -47,7 +47,7 @@ i32.ge_u select if - loop $continue|0 + loop $do-continue|0 local.get $0 i64.load local.get $1 @@ -68,20 +68,18 @@ local.tee $2 i32.const 4 i32.ge_u - br_if $continue|0 + br_if $do-continue|0 end end end - loop $continue|1 - block $break|1 - local.get $2 - local.tee $3 - i32.const 1 - i32.sub - local.set $2 - local.get $3 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $2 + local.tee $3 + i32.const 1 + i32.sub + local.set $2 + local.get $3 + if local.get $1 i32.load16_u local.tee $3 @@ -94,18 +92,16 @@ local.get $3 i32.sub return - else - local.get $0 - i32.const 2 - i32.add - local.set $0 - local.get $1 - i32.const 2 - i32.add - local.set $1 - br $continue|1 end - unreachable + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 end end i32.const 0 @@ -495,13 +491,13 @@ unreachable end ) - (func $start (; 7 ;) - global.get $~lib/started + (func $~start (; 7 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:typeof ) diff --git a/tests/compiler/typeof.untouched.wat b/tests/compiler/typeof.untouched.wat index 2d8115eb12..d1c59de29b 100644 --- a/tests/compiler/typeof.untouched.wat +++ b/tests/compiler/typeof.untouched.wat @@ -29,9 +29,9 @@ (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $typeof/c (mut i32) (i32.const 0)) - (global $~lib/started (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 292)) - (export "_start" (func $start)) + (export "_start" (func $~start)) (export "memory" (memory $0)) (func $~lib/rt/stub/__retain (; 1 ;) (param $0 i32) (result i32) local.get $0 @@ -53,6 +53,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) local.get $0 call $~lib/rt/stub/__retain local.set $0 @@ -87,15 +88,15 @@ i32.const 0 end if - block $break|0 - loop $continue|0 + block $do-break|0 + loop $do-continue|0 local.get $5 i64.load local.get $6 i64.load i64.ne if - br $break|0 + br $do-break|0 end local.get $5 i32.const 8 @@ -112,39 +113,41 @@ local.get $4 i32.const 4 i32.ge_u - br_if $continue|0 + local.set $7 + local.get $7 + br_if $do-continue|0 end end end - block $break|1 - loop $continue|1 - local.get $4 - local.tee $7 - i32.const 1 - i32.sub - local.set $4 - local.get $7 - i32.eqz - br_if $break|1 + loop $while-continue|1 + local.get $4 + local.tee $7 + i32.const 1 + i32.sub + local.set $4 + local.get $7 + local.set $7 + local.get $7 + if local.get $5 i32.load16_u - local.set $7 + local.set $8 local.get $6 i32.load16_u - local.set $8 - local.get $7 + local.set $9 local.get $8 + local.get $9 i32.ne if - local.get $7 local.get $8 + local.get $9 i32.sub - local.set $9 + local.set $10 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $9 + local.get $10 return end local.get $5 @@ -155,17 +158,16 @@ i32.const 2 i32.add local.set $6 - br $continue|1 + br $while-continue|1 end - unreachable end i32.const 0 - local.set $8 + local.set $7 local.get $0 call $~lib/rt/stub/__release local.get $2 call $~lib/rt/stub/__release - local.get $8 + local.get $7 ) (func $~lib/string/String.__eq (; 5 ;) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -653,13 +655,13 @@ unreachable end ) - (func $start (; 11 ;) - global.get $~lib/started + (func $~start (; 11 ;) + global.get $~started if return else i32.const 1 - global.set $~lib/started + global.set $~started end call $start:typeof ) diff --git a/tests/compiler/unary.optimized.wat b/tests/compiler/unary.optimized.wat index add7b9071d..87540b0edb 100644 --- a/tests/compiler/unary.optimized.wat +++ b/tests/compiler/unary.optimized.wat @@ -6,7 +6,7 @@ (global $unary/f (mut f32) (f32.const 0)) (global $unary/F (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:unary (; 0 ;) (local $0 i32) (local $1 i64) @@ -209,7 +209,7 @@ local.get $3 global.set $unary/F ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:unary ) ) diff --git a/tests/compiler/unary.untouched.wat b/tests/compiler/unary.untouched.wat index 4fbdd9f38b..1ae9eab211 100644 --- a/tests/compiler/unary.untouched.wat +++ b/tests/compiler/unary.untouched.wat @@ -7,7 +7,7 @@ (global $unary/f (mut f32) (f32.const 0)) (global $unary/F (mut f64) (f64.const 0)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:unary (; 0 ;) (local $0 f64) (local $1 i32) @@ -379,7 +379,7 @@ local.get $0 global.set $unary/F ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:unary ) ) diff --git a/tests/compiler/void.untouched.wat b/tests/compiler/void.untouched.wat index 5c047ea730..45d8645e79 100644 --- a/tests/compiler/void.untouched.wat +++ b/tests/compiler/void.untouched.wat @@ -6,7 +6,7 @@ (global $void/u8Val1 (mut i32) (i32.const 1)) (global $void/u8Val2 (mut i32) (i32.const 255)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $void/anInt (; 0 ;) (result i32) i32.const 2 ) @@ -20,7 +20,7 @@ i32.add drop ) - (func $start (; 2 ;) + (func $~start (; 2 ;) call $start:void ) ) diff --git a/tests/compiler/wasi-snapshot.optimized.wat b/tests/compiler/wasi-snapshot.optimized.wat index cd0c60d446..3c61110b69 100644 --- a/tests/compiler/wasi-snapshot.optimized.wat +++ b/tests/compiler/wasi-snapshot.optimized.wat @@ -3,8 +3,8 @@ (memory $0 0) (global $wasi-snapshot/sig (mut i32) (i32.const 1)) (export "memory" (memory $0)) - (start $start) - (func $start (; 0 ;) + (start $~start) + (func $~start (; 0 ;) i32.const 9 global.set $wasi-snapshot/sig ) diff --git a/tests/compiler/wasi-snapshot.untouched.wat b/tests/compiler/wasi-snapshot.untouched.wat index 96de47fe13..94c6f7484f 100644 --- a/tests/compiler/wasi-snapshot.untouched.wat +++ b/tests/compiler/wasi-snapshot.untouched.wat @@ -8,12 +8,12 @@ (global $~lib/ASC_TARGET i32 (i32.const 0)) (global $wasi-snapshot/sig (mut i32) (i32.const 1)) (export "memory" (memory $0)) - (start $start) + (start $~start) (func $start:wasi-snapshot (; 0 ;) i32.const 9 global.set $wasi-snapshot/sig ) - (func $start (; 1 ;) + (func $~start (; 1 ;) call $start:wasi-snapshot ) ) diff --git a/tests/compiler/while.json b/tests/compiler/while.json index b1da366ff4..59c251c705 100644 --- a/tests/compiler/while.json +++ b/tests/compiler/while.json @@ -1,5 +1,7 @@ { "asc_flags": [ - "--runtime none" + "--runtime half", + "--explicitStart", + "--use ASC_RTRACE=1" ] } \ No newline at end of file diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index d0df6d2846..7298eb4246 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -1,177 +1,2410 @@ (module + (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $none_=>_i32 (func (result i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) + (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) + (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) + (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) (memory $0 1) (data (i32.const 16) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00w\00h\00i\00l\00e\00.\00t\00s") - (global $while/n (mut i32) (i32.const 10)) - (global $while/m (mut i32) (i32.const 0)) - (global $while/o (mut i32) (i32.const 0)) + (data (i32.const 48) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 96) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 208) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 272) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 320) "\04\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10") + (global $while/ran (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) + (export "_start" (func $~start)) (export "memory" (memory $0)) - (start $start) - (func $start:while (; 1 ;) + (func $while/testSimple (; 5 ;) (local $0 i32) - loop $continue|0 - global.get $while/n + (local $1 i32) + i32.const 10 + local.set $0 + loop $while-continue|0 + local.get $0 if - global.get $while/n + local.get $0 i32.const 1 i32.sub - global.set $while/n - global.get $while/m + local.set $0 + local.get $1 i32.const 1 i32.add - global.set $while/m - br $continue|0 + local.set $1 + br $while-continue|0 end end - global.get $while/n + local.get $0 if i32.const 0 i32.const 32 - i32.const 8 - i32.const 0 + i32.const 10 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $while/m + local.get $1 i32.const 10 i32.ne if i32.const 0 i32.const 32 - i32.const 9 - i32.const 0 + i32.const 11 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $while/ran + ) + (func $while/testNested (; 6 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) i32.const 10 - global.set $while/n - i32.const 0 - global.set $while/m - loop $continue|1 - global.get $while/n + local.set $0 + loop $while-continue|0 + local.get $0 if - global.get $while/n + local.get $0 i32.const 1 i32.sub - global.set $while/n - global.get $while/m + local.set $0 + local.get $2 i32.const 1 i32.add - global.set $while/m - loop $continue|2 - global.get $while/n + local.set $2 + loop $while-continue|1 + local.get $0 if - global.get $while/n + local.get $0 i32.const 1 i32.sub - global.set $while/n - global.get $while/o + local.set $0 + local.get $1 i32.const 1 i32.add - global.set $while/o - br $continue|2 + local.set $1 + br $while-continue|1 end end - global.get $while/n + local.get $0 if i32.const 0 i32.const 32 - i32.const 21 - i32.const 2 + i32.const 29 + i32.const 4 call $~lib/builtins/abort unreachable end - global.get $while/o + local.get $1 i32.const 9 - i32.eq - br_if $continue|1 - i32.const 0 - i32.const 32 - i32.const 22 - i32.const 2 - call $~lib/builtins/abort - unreachable + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 30 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + br $while-continue|0 end end - global.get $while/n + local.get $0 if i32.const 0 i32.const 32 - i32.const 24 - i32.const 0 + i32.const 32 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $while/m + local.get $2 i32.const 1 i32.ne if i32.const 0 i32.const 32 - i32.const 25 - i32.const 0 + i32.const 33 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $while/o + local.get $1 i32.const 9 i32.ne if i32.const 0 i32.const 32 - i32.const 26 - i32.const 0 + i32.const 34 + i32.const 2 call $~lib/builtins/abort unreachable end i32.const 1 - global.set $while/n - i32.const 0 - global.set $while/m - loop $continue|3 - global.get $while/n - local.tee $0 + global.set $while/ran + ) + (func $while/testEmpty (; 7 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + i32.const 1 + local.set $0 + loop $while-continue|0 + local.get $0 + local.tee $2 i32.const 1 i32.sub - global.set $while/n - local.get $0 + local.set $0 + local.get $2 if (result i32) - global.get $while/m + local.get $1 i32.const 1 i32.add - global.set $while/m - global.get $while/m + local.tee $1 else i32.const 0 end - br_if $continue|3 + br_if $while-continue|0 end - global.get $while/n + local.get $0 i32.const -1 i32.ne if i32.const 0 i32.const 32 - i32.const 31 + i32.const 45 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.ne + if i32.const 0 + i32.const 32 + i32.const 46 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $while/m i32.const 1 + global.set $while/ran + ) + (func $while/testAlwaysTrue (; 8 ;) + (local $0 i32) + loop $while-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.ne + br_if $while-continue|0 + end + local.get $0 + i32.const 10 i32.ne if i32.const 0 i32.const 32 + i32.const 58 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + ) + (func $while/testContinue (; 9 ;) + (local $0 i32) + i32.const 10 + local.set $0 + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.const 1 + i32.sub + local.set $0 + br $while-continue|0 + end + end + local.get $0 + if + i32.const 0 + i32.const 32 + i32.const 108 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + ) + (func $while/testNestedContinue (; 10 ;) + (local $0 i32) + (local $1 i32) + i32.const 10 + local.set $0 + i32.const 10 + local.set $1 + loop $while-continue|0 + local.get $0 + if + loop $while-continue|1 + local.get $1 + if + local.get $1 + i32.const 1 + i32.sub + local.set $1 + br $while-continue|1 + end + end + local.get $0 + i32.const 1 + i32.sub + local.set $0 + br $while-continue|0 + end + end + local.get $0 + if + i32.const 0 i32.const 32 + i32.const 126 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + if i32.const 0 + i32.const 32 + i32.const 127 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $while/ran ) - (func $start (; 2 ;) - call $start:while + (func $~lib/rt/tlsf/removeBlock (; 11 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 277 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 16 + i32.ge_u + if (result i32) + local.get $2 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 279 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + local.set $2 + i32.const 0 + else + local.get $2 + i32.const 31 + local.get $2 + i32.clz + i32.sub + local.tee $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $2 + local.get $3 + i32.const 7 + i32.sub + end + local.tee $3 + i32.const 23 + i32.lt_u + if (result i32) + local.get $2 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 292 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=20 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 + if + local.get $5 + local.get $4 + i32.store offset=20 + end + local.get $4 + if + local.get $4 + local.get $5 + i32.store offset=16 + end + local.get $1 + local.get $0 + local.get $2 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + i32.eq + if + local.get $0 + local.get $2 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + local.get $4 + i32.store offset=96 + local.get $4 + i32.eqz + if + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $1 + i32.store offset=4 + local.get $1 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $3 + i32.shl + i32.const -1 + i32.xor + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (; 12 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 207 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 + i32.const 1 + i32.and + if + local.get $3 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $2 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + local.get $3 + i32.const 3 + i32.and + i32.or + local.tee $3 + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $5 + end + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $2 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 228 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $7 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + local.get $7 + local.get $6 + i32.const 3 + i32.and + i32.or + local.tee $3 + i32.store + local.get $2 + local.set $1 + end + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 16 + i32.ge_u + if (result i32) + local.get $2 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 243 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i32.const 16 + i32.add + i32.add + local.get $4 + i32.ne + if + i32.const 0 + i32.const 64 + i32.const 244 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + local.set $4 + i32.const 0 + else + local.get $2 + i32.const 31 + local.get $2 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $4 + local.get $2 + i32.const 7 + i32.sub + end + local.tee $3 + i32.const 23 + i32.lt_u + if (result i32) + local.get $4 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 260 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $4 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $2 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + local.get $2 + i32.store offset=20 + local.get $2 + if + local.get $2 + local.get $1 + i32.store offset=16 + end + local.get $0 + local.get $4 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $3 + i32.shl + i32.or + i32.store + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (; 13 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $1 + local.get $2 + i32.le_u + select + select + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 386 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $1 + local.get $3 + i32.const 16 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 396 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $1 + i32.const 16 + i32.sub + local.set $1 + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 408 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $2 + i32.const 32 + i32.sub + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $2 + i32.add + i32.const 16 + i32.sub + local.tee $2 + i32.const 2 + i32.store + local.get $0 + local.get $2 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/maybeInitialize (; 14 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $0 + i32.eqz + if + i32.const 1 + memory.size + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 368 + local.tee $0 + i32.const 0 + i32.store + i32.const 1936 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $1 + i32.const 23 + i32.lt_u + if + local.get $1 + i32.const 2 + i32.shl + i32.const 368 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $2 + loop $for-loop|1 + local.get $2 + i32.const 16 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.const 368 + i32.add + i32.const 0 + i32.store offset=96 + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 + end + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + i32.const 368 + i32.const 1952 + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 368 + global.set $~lib/rt/tlsf/ROOT + end + local.get $0 + ) + (func $~lib/rt/tlsf/prepareSize (; 15 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 112 + i32.const 64 + i32.const 457 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.add + i32.const -16 + i32.and + local.tee $0 + i32.const 16 + local.get $0 + i32.const 16 + i32.gt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (; 16 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if (result i32) + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + i32.const 0 + else + local.get $1 + i32.const 536870904 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + end + local.tee $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $1 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 338 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 351 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/pure/markGray (; 17 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne + if + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.const 268435456 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 2 + call $~lib/rt/__visit_members + end + ) + (func $~lib/rt/tlsf/freeBlock (; 18 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 64 + i32.const 569 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/rtrace/onfree + ) + (func $~lib/rt/pure/scanBlack (; 19 ;) (param $0 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const -1879048193 + i32.and + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 4 + call $~lib/rt/__visit_members + ) + (func $~lib/rt/pure/scan (; 20 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.eq + if + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + if + local.get $0 + call $~lib/rt/pure/scanBlack + else + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.const 536870912 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 3 + call $~lib/rt/__visit_members + end + end + ) + (func $~lib/rt/pure/collectWhite (; 21 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 536870912 + i32.eq + if (result i32) + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + else + i32.const 0 + end + if + local.get $0 + local.get $1 + i32.const -1879048193 + i32.and + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + ) + (func $~lib/rt/pure/__collect (; 22 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/rt/pure/ROOTS + local.tee $5 + local.tee $2 + local.set $3 + global.get $~lib/rt/pure/CUR + local.set $0 + loop $for-loop|0 + local.get $3 + local.get $0 + i32.lt_u + if + local.get $3 + i32.load + local.tee $4 + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 805306368 + i32.eq + if (result i32) + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + else + i32.const 0 + end + if + local.get $4 + call $~lib/rt/pure/markGray + local.get $2 + local.get $4 + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + else + i32.const 0 + local.get $1 + i32.const 268435455 + i32.and + i32.eqz + local.get $1 + i32.const 1879048192 + i32.and + select + if + global.get $~lib/rt/tlsf/ROOT + local.get $4 + call $~lib/rt/tlsf/freeBlock + else + local.get $4 + local.get $1 + i32.const 2147483647 + i32.and + i32.store offset=4 + end + end + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|0 + end + end + local.get $2 + global.set $~lib/rt/pure/CUR + local.get $5 + local.set $0 + loop $for-loop|1 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/pure/scan + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $for-loop|1 + end + end + local.get $5 + local.set $0 + loop $for-loop|2 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.load + local.tee $1 + local.get $1 + i32.load offset=4 + i32.const 2147483647 + i32.and + i32.store offset=4 + local.get $1 + call $~lib/rt/pure/collectWhite + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $for-loop|2 + end + end + local.get $5 + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/tlsf/growMemory (; 23 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + memory.size + local.tee $2 + i32.const 16 + local.get $0 + i32.load offset=1568 + local.get $2 + i32.const 16 + i32.shl + i32.const 16 + i32.sub + i32.ne + i32.shl + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.get $1 + local.get $1 + i32.const 536870904 + i32.lt_u + select + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $1 + local.get $2 + local.get $1 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $1 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 24 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + if + i32.const 0 + i32.const 64 + i32.const 365 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.get $2 + i32.sub + local.tee $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store + local.get $2 + local.get $1 + i32.const 16 + i32.add + i32.add + local.tee $1 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + i32.load + i32.const -3 + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 25 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/collectLock + if + i32.const 0 + i32.const 64 + i32.const 490 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 1 + global.set $~lib/rt/tlsf/collectLock + call $~lib/rt/pure/__collect + i32.const 0 + global.set $~lib/rt/tlsf/collectLock + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $0 + local.get $3 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 502 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 64 + i32.const 510 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $2 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $2 + call $~lib/rt/rtrace/onalloc + local.get $2 + ) + (func $~lib/rt/tlsf/__alloc (; 26 ;) (param $0 i32) (param $1 i32) (result i32) + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + local.get $1 + i32.store offset=8 + local.get $0 + i32.const 16 + i32.add + ) + (func $~lib/rt/pure/increment (; 27 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 176 + i32.const 104 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/rtrace/onincrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 176 + i32.const 107 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $while/Ref#constructor (; 28 ;) (result i32) + (local $0 i32) + i32.const 0 + i32.const 3 + call $~lib/rt/tlsf/__alloc + local.tee $0 + i32.const 356 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/__typeinfo (; 29 ;) (param $0 i32) (result i32) + local.get $0 + i32.const 320 + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 324 + i32.add + i32.load + ) + (func $~lib/memory/memory.copy (; 30 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $2 + local.set $3 + local.get $0 + local.get $1 + i32.eq + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 + i32.lt_u + if + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $0 + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $1 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + br $while-continue|1 + end + end + end + loop $while-continue|2 + local.get $3 + if + local.get $0 + local.tee $2 + i32.const 1 + i32.add + local.set $0 + local.get $1 + local.tee $4 + i32.const 1 + i32.add + local.set $1 + local.get $2 + local.get $4 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $while-continue|2 + end + end + else + local.get $1 + i32.const 7 + i32.and + local.get $0 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|3 + local.get $0 + local.get $3 + i32.add + i32.const 7 + i32.and + if + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 + end + end + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $while-continue|4 + end + end + end + loop $while-continue|5 + local.get $3 + if + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + local.get $0 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|5 + end + end + end + end + ) + (func $~lib/rt/tlsf/__free (; 31 ;) (param $0 i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + i32.const 0 + local.get $0 + select + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 593 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/growRoots (; 32 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS + local.tee $1 + i32.sub + local.tee $2 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 + i32.gt_u + select + local.tee $3 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $0 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onfree + local.get $0 + local.get $1 + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onalloc + local.get $1 + call $~lib/rt/tlsf/__free + end + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $2 + i32.add + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 33 ;) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 4 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 34 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 268435455 + i32.and + local.set $1 + local.get $0 + call $~lib/rt/rtrace/ondecrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 176 + i32.const 115 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $2 + i32.const -2147483648 + i32.and + if + local.get $0 + i32.const -2147483648 + i32.store offset=4 + else + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + else + local.get $1 + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 176 + i32.const 124 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 16 + i32.and + if + local.get $0 + local.get $1 + i32.const 1 + i32.sub + local.get $2 + i32.const -268435456 + i32.and + i32.or + i32.store offset=4 + else + local.get $0 + local.get $1 + i32.const 1 + i32.sub + i32.const -1342177280 + i32.or + i32.store offset=4 + local.get $2 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + end + end + ) + (func $~lib/rt/pure/__release (; 35 ;) (param $0 i32) + local.get $0 + i32.const 356 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $while/testRef (; 36 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + call $while/Ref#constructor + local.set $0 + loop $while-continue|0 + local.get $0 + if + local.get $1 + i32.const 1 + i32.add + local.tee $1 + i32.const 10 + i32.eq + if + i32.const 0 + local.set $2 + local.get $0 + if + local.get $0 + call $~lib/rt/pure/__release + end + else + call $while/Ref#constructor + local.set $2 + local.get $0 + call $~lib/rt/pure/__release + end + local.get $2 + local.set $0 + br $while-continue|0 + end + end + local.get $1 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 142 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + if + i32.const 0 + i32.const 32 + i32.const 143 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + local.get $0 + call $~lib/rt/pure/__release + ) + (func $while/testRefAutorelease (; 37 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + call $while/Ref#constructor + local.set $0 + loop $while-continue|0 + block $while-break|0 + call $while/Ref#constructor + local.tee $1 + call $~lib/rt/pure/__release + local.get $1 + if + local.get $2 + i32.const 1 + i32.add + local.tee $2 + i32.const 10 + i32.eq + if + i32.const 0 + local.set $1 + local.get $0 + if + local.get $0 + call $~lib/rt/pure/__release + end + i32.const 0 + local.set $0 + br $while-break|0 + end + br $while-continue|0 + end + end + end + local.get $2 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 32 + i32.const 162 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + if + i32.const 0 + i32.const 32 + i32.const 163 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + local.get $0 + call $~lib/rt/pure/__release + ) + (func $start:while (; 38 ;) + i32.const 0 + global.set $while/ran + call $while/testSimple + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 16 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testNested + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 39 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testEmpty + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 51 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testAlwaysTrue + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 63 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + i32.const 1 + global.set $while/ran + i32.const 0 + global.set $while/ran + i32.const 1 + global.set $while/ran + i32.const 0 + global.set $while/ran + i32.const 1 + global.set $while/ran + i32.const 0 + global.set $while/ran + call $while/testContinue + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 113 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testNestedContinue + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 132 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testRef + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 148 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testRefAutorelease + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 168 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 39 ;) + global.get $~started + if + return + else + i32.const 1 + global.set $~started + end + call $start:while + ) + (func $~lib/rt/pure/__visit (; 40 ;) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 356 + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $0 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + local.get $1 + i32.const 1 + i32.ne + if + local.get $1 + i32.const 2 + i32.sub + br_table $case1|0 $case2|0 $case3|0 $case4|0 $case5|0 + end + local.get $0 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $0 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.le_u + if + i32.const 0 + i32.const 176 + i32.const 75 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $0 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $0 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.ne + if + i32.const 0 + i32.const 176 + i32.const 86 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $1 + i32.const 1879048192 + i32.and + if + local.get $0 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 176 + i32.const 97 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 41 ;) (param $0 i32) (param $1 i32) + block $switch$1$default + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + unreachable ) ) diff --git a/tests/compiler/while.ts b/tests/compiler/while.ts index 4f2d3f389c..1a8e98548c 100644 --- a/tests/compiler/while.ts +++ b/tests/compiler/while.ts @@ -1,32 +1,168 @@ -var n = 10; -var m = 0; - -while (n) { - n--; - m++; -} -assert(n == 0); -assert(m == 10); - -n = 10; -m = 0; -var o = 0; -while (n) { - n--; - m++; - while (n) { - n--; - o++; - } - assert(n == 0); - assert(o == 9); -} -assert(n == 0); -assert(m == 1); -assert(o == 9); - -n = 1; -m = 0; -while (n-- && ++m); -assert(n == -1); -assert(m == 1); +var ran: bool; + +function testSimple(): void { + var i = 10; + var j = 0; + while (i) { + i--; + j++; + } + assert(i == 0); + assert(j == 10); + ran = true; +} +ran = false; +testSimple(); +assert(ran); + +function testNested(): void { + var i = 10; + var j = 0; + var k = 0; + while (i) { + i--; + j++; + while (i) { + i--; + k++; + } + assert(i == 0); + assert(k == 9); + } + assert(i == 0); + assert(j == 1); + assert(k == 9); + ran = true; +} +ran = false; +testNested(); +assert(ran); + +function testEmpty(): void { + var i = 1; + var j = 0; + while (i-- && ++j); + assert(i == -1); + assert(j == 1); + ran = true; +} +ran = false; +testEmpty(); +assert(ran); + +function testAlwaysTrue(): void { + var i = 0; + while (true) { + if (++i == 10) break; + } + assert(i == 10); + ran = true; +} +ran = false; +testAlwaysTrue(); +assert(ran); + +function testAlwaysFalse(): void { + var i = 0; + while (false) { + ++i; + assert(false); + } + assert(i == 0); + ran = true; +} +ran = false; +testAlwaysFalse(); +assert(ran); + +function testAlwaysBreaks(): void { + var i = 0; + while (++i) { + break; + } + assert(i == 1); + ran = true; +} +ran = false; +testAlwaysBreaks(); +assert(ran); + +function testAlwaysReturns(): void { + var i = 0; + while (++i) { + ran = true; + return; + } + assert(false); +} +ran = false; +testAlwaysReturns(); +assert(ran); + +function testContinue(): void { + var i = 10; + while (i) { + --i; + continue; + } + assert(i == 0); + ran = true; +} +ran = false; +testContinue(); +assert(ran); + +function testNestedContinue(): void { + var i = 10; + var j = 10; + while (i) { + while (j) { + --j; + continue; + } + --i; + continue; + } + assert(i == 0); + assert(j == 0); + ran = true; +} +ran = false; +testNestedContinue(); +assert(ran); + +class Ref {} +function testRef(): void { + var i = 0; + var ref: Ref | null = new Ref(); + while (ref) { + if (++i == 10) ref = null; + else ref = new Ref(); + } + assert(i == 10); + assert(!ref); + ran = true; +} +ran = false; +testRef(); +assert(ran); + +function getRef(): Ref { + return new Ref(); +} +function testRefAutorelease(): void { + var i = 0; + var ref: Ref | null = new Ref(); + while (getRef()) { // must not leak + if (++i == 10) { + ref = null; + break; + } + } + assert(i == 10); + assert(!ref); + ran = true; +} +ran = false; +testRefAutorelease(); +assert(ran); diff --git a/tests/compiler/while.untouched.wat b/tests/compiler/while.untouched.wat index 8df4e89ea7..48d5103b3e 100644 --- a/tests/compiler/while.untouched.wat +++ b/tests/compiler/while.untouched.wat @@ -1,210 +1,4148 @@ (module (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "onfree" (func $~lib/rt/rtrace/onfree (param i32))) + (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) + (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) + (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) (memory $0 1) (data (i32.const 16) "\10\00\00\00\01\00\00\00\01\00\00\00\10\00\00\00w\00h\00i\00l\00e\00.\00t\00s\00") + (data (i32.const 48) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00") + (data (i32.const 96) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") + (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") + (data (i32.const 208) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") + (data (i32.const 272) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 320) "\04\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00") (table $0 1 funcref) - (global $while/n (mut i32) (i32.const 10)) - (global $while/m (mut i32) (i32.const 0)) - (global $while/o (mut i32) (i32.const 0)) + (global $while/ran (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~started (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 320)) + (global $~lib/heap/__heap_base i32 (i32.const 356)) + (export "_start" (func $~start)) (export "memory" (memory $0)) - (start $start) - (func $start:while (; 1 ;) + (func $while/testSimple (; 5 ;) (local $0 i32) - block $break|0 - loop $continue|0 - global.get $while/n - i32.eqz - br_if $break|0 - global.get $while/n + (local $1 i32) + (local $2 i32) + i32.const 10 + local.set $0 + i32.const 0 + local.set $1 + loop $while-continue|0 + local.get $0 + local.set $2 + local.get $2 + if + local.get $0 i32.const 1 i32.sub - global.set $while/n - global.get $while/m + local.set $0 + local.get $1 i32.const 1 i32.add - global.set $while/m - br $continue|0 + local.set $1 + br $while-continue|0 end - unreachable end - global.get $while/n + local.get $0 i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 8 - i32.const 0 + i32.const 10 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $while/m + local.get $1 i32.const 10 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 9 - i32.const 0 + i32.const 11 + i32.const 2 call $~lib/builtins/abort unreachable end + i32.const 1 + global.set $while/ran + ) + (func $while/testNested (; 6 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) i32.const 10 - global.set $while/n + local.set $0 i32.const 0 - global.set $while/m - block $break|1 - loop $continue|1 - global.get $while/n - i32.eqz - br_if $break|1 - global.get $while/n + local.set $1 + i32.const 0 + local.set $2 + loop $while-continue|0 + local.get $0 + local.set $3 + local.get $3 + if + local.get $0 i32.const 1 i32.sub - global.set $while/n - global.get $while/m + local.set $0 + local.get $1 i32.const 1 i32.add - global.set $while/m - block $break|2 - loop $continue|2 - global.get $while/n - i32.eqz - br_if $break|2 - global.get $while/n + local.set $1 + loop $while-continue|1 + local.get $0 + local.set $4 + local.get $4 + if + local.get $0 i32.const 1 i32.sub - global.set $while/n - global.get $while/o + local.set $0 + local.get $2 i32.const 1 i32.add - global.set $while/o - br $continue|2 + local.set $2 + br $while-continue|1 end - unreachable end - global.get $while/n + local.get $0 i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 21 - i32.const 2 + i32.const 29 + i32.const 4 call $~lib/builtins/abort unreachable end - global.get $while/o + local.get $2 i32.const 9 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 22 - i32.const 2 + i32.const 30 + i32.const 4 call $~lib/builtins/abort unreachable end - br $continue|1 + br $while-continue|0 end - unreachable end - global.get $while/n + local.get $0 i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 24 - i32.const 0 + i32.const 32 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $while/m + local.get $1 i32.const 1 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 25 - i32.const 0 + i32.const 33 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $while/o + local.get $2 i32.const 9 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 26 + i32.const 34 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + ) + (func $while/testEmpty (; 7 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + i32.const 1 + local.set $0 + i32.const 0 + local.set $1 + loop $while-continue|0 + local.get $0 + local.tee $2 + i32.const 1 + i32.sub + local.set $0 + local.get $2 + if (result i32) + local.get $1 + i32.const 1 + i32.add + local.tee $1 + else + i32.const 0 + end + local.set $2 + local.get $2 + if + nop + br $while-continue|0 + end + end + local.get $0 + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 45 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.eq + i32.eqz + if i32.const 0 + i32.const 32 + i32.const 46 + i32.const 2 call $~lib/builtins/abort unreachable end i32.const 1 - global.set $while/n + global.set $while/ran + ) + (func $while/testAlwaysTrue (; 8 ;) + (local $0 i32) + (local $1 i32) i32.const 0 - global.set $while/m - block $break|3 - loop $continue|3 - global.get $while/n - local.tee $0 + local.set $0 + block $while-break|0 + loop $while-continue|0 i32.const 1 - i32.sub - global.set $while/n - local.get $0 - if (result i32) - global.get $while/m + local.set $1 + local.get $1 + if + local.get $0 i32.const 1 i32.add - global.set $while/m - global.get $while/m - else - i32.const 0 + local.tee $0 + i32.const 10 + i32.eq + if + br $while-break|0 + end + br $while-continue|0 end - i32.eqz - br_if $break|3 - nop - br $continue|3 end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 58 + i32.const 2 + call $~lib/builtins/abort unreachable end - global.get $while/n - i32.const -1 + i32.const 1 + global.set $while/ran + ) + (func $while/testAlwaysFalse (; 9 ;) + (local $0 i32) + i32.const 0 + local.set $0 + local.get $0 + i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 31 + i32.const 71 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + ) + (func $while/testAlwaysBreaks (; 10 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + block $while-break|0 + loop $while-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + local.set $1 + local.get $1 + if + br $while-break|0 + end + end + end + local.get $0 + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 83 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + ) + (func $while/testAlwaysReturns (; 11 ;) + (local $0 i32) + (local $1 i32) + i32.const 0 + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 1 + i32.add + local.tee $0 + local.set $1 + local.get $1 + if + i32.const 1 + global.set $while/ran + return + end + end + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 96 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + ) + (func $while/testContinue (; 12 ;) + (local $0 i32) + (local $1 i32) + i32.const 10 + local.set $0 + loop $while-continue|0 + local.get $0 + local.set $1 + local.get $1 + if + local.get $0 + i32.const 1 + i32.sub + local.set $0 + br $while-continue|0 + end + end + local.get $0 + i32.const 0 + i32.eq + i32.eqz + if i32.const 0 + i32.const 32 + i32.const 108 + i32.const 2 call $~lib/builtins/abort unreachable end - global.get $while/m i32.const 1 + global.set $while/ran + ) + (func $while/testNestedContinue (; 13 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 10 + local.set $0 + i32.const 10 + local.set $1 + loop $while-continue|0 + local.get $0 + local.set $2 + local.get $2 + if + loop $while-continue|1 + local.get $1 + local.set $3 + local.get $3 + if + local.get $1 + i32.const 1 + i32.sub + local.set $1 + br $while-continue|1 + end + end + local.get $0 + i32.const 1 + i32.sub + local.set $0 + br $while-continue|0 + end + end + local.get $0 + i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 32 + i32.const 126 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 i32.const 32 + i32.const 127 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + ) + (func $~lib/rt/tlsf/removeBlock (; 14 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 277 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $3 + local.get $3 + i32.const 16 + i32.ge_u + if (result i32) + local.get $3 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 279 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if i32.const 0 + local.set $4 + local.get $3 + i32.const 4 + i32.shr_u + local.set $5 + else + i32.const 31 + local.get $3 + i32.clz + i32.sub + local.set $4 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $5 + local.get $4 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $4 + end + local.get $4 + i32.const 23 + i32.lt_u + if (result i32) + local.get $5 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 292 + i32.const 13 call $~lib/builtins/abort unreachable end + local.get $1 + i32.load offset=16 + local.set $6 + local.get $1 + i32.load offset=20 + local.set $7 + local.get $6 + if + local.get $6 + local.get $7 + i32.store offset=20 + end + local.get $7 + if + local.get $7 + local.get $6 + i32.store offset=16 + end + local.get $1 + local.get $0 + local.set $10 + local.get $4 + local.set $9 + local.get $5 + local.set $8 + local.get $10 + local.get $9 + i32.const 4 + i32.shl + local.get $8 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + i32.eq + if + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $5 + local.set $9 + local.get $7 + local.set $8 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $9 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $8 + i32.store offset=96 + local.get $7 + i32.eqz + if + local.get $0 + local.set $9 + local.get $4 + local.set $8 + local.get $9 + local.get $8 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $9 + local.get $0 + local.set $8 + local.get $4 + local.set $11 + local.get $9 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $9 + local.set $10 + local.get $8 + local.get $11 + i32.const 2 + i32.shl + i32.add + local.get $10 + i32.store offset=4 + local.get $9 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $4 + i32.shl + i32.const -1 + i32.xor + i32.and + i32.store + end + end + end ) - (func $start (; 2 ;) - call $start:while + (func $~lib/rt/tlsf/insertBlock (; 15 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 207 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.set $3 + local.get $3 + i32.const 16 + i32.add + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $4 + local.get $4 + i32.load + local.set $5 + local.get $5 + i32.const 1 + i32.and + if + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $3 + local.get $3 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + i32.const 3 + i32.and + local.get $3 + i32.or + local.tee $2 + i32.store + local.get $1 + local.set $6 + local.get $6 + i32.const 16 + i32.add + local.get $6 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $4 + local.get $4 + i32.load + local.set $5 + end + end + local.get $2 + i32.const 2 + i32.and + if + local.get $1 + local.set $6 + local.get $6 + i32.const 4 + i32.sub + i32.load + local.set $6 + local.get $6 + i32.load + local.set $3 + local.get $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 228 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $7 + local.get $7 + i32.const 1073741808 + i32.lt_u + if + local.get $0 + local.get $6 + call $~lib/rt/tlsf/removeBlock + local.get $6 + local.get $3 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $2 + i32.store + local.get $6 + local.set $1 + end + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + i32.store + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $8 + local.get $8 + i32.const 16 + i32.ge_u + if (result i32) + local.get $8 + i32.const 1073741808 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 243 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.add + local.get $8 + i32.add + local.get $4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 244 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $8 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $9 + local.get $8 + i32.const 4 + i32.shr_u + local.set $10 + else + i32.const 31 + local.get $8 + i32.clz + i32.sub + local.set $9 + local.get $8 + local.get $9 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $10 + local.get $9 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $9 + end + local.get $9 + i32.const 23 + i32.lt_u + if (result i32) + local.get $10 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 260 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $7 + local.get $9 + local.set $3 + local.get $10 + local.set $6 + local.get $7 + local.get $3 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $11 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + local.get $11 + i32.store offset=20 + local.get $11 + if + local.get $11 + local.get $1 + i32.store offset=16 + end + local.get $0 + local.set $12 + local.get $9 + local.set $7 + local.get $10 + local.set $3 + local.get $1 + local.set $6 + local.get $12 + local.get $7 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $9 + i32.shl + i32.or + i32.store + local.get $0 + local.set $13 + local.get $9 + local.set $12 + local.get $0 + local.set $3 + local.get $9 + local.set $6 + local.get $3 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $10 + i32.shl + i32.or + local.set $7 + local.get $13 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $1 + local.get $2 + i32.le_u + if (result i32) + local.get $1 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $2 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 386 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + local.set $4 + i32.const 0 + local.set $5 + local.get $4 + if + local.get $1 + local.get $4 + i32.const 16 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 396 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $4 + i32.eq + if + local.get $1 + i32.const 16 + i32.sub + local.set $1 + local.get $4 + i32.load + local.set $5 + else + nop + end + else + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 408 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.set $6 + local.get $6 + i32.const 48 + i32.lt_u + if + i32.const 0 + return + end + local.get $6 + i32.const 16 + i32.const 1 + i32.shl + i32.sub + local.set $7 + local.get $1 + local.set $8 + local.get $8 + local.get $7 + i32.const 1 + i32.or + local.get $5 + i32.const 2 + i32.and + i32.or + i32.store + local.get $8 + i32.const 0 + i32.store offset=16 + local.get $8 + i32.const 0 + i32.store offset=20 + local.get $1 + local.get $6 + i32.add + i32.const 16 + i32.sub + local.set $4 + local.get $4 + i32.const 0 + i32.const 2 + i32.or + i32.store + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/maybeInitialize (; 17 ;) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $0 + local.get $0 + i32.eqz + if + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const -16 + i32.and + local.set $1 + memory.size + local.set $2 + local.get $1 + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $3 + local.get $2 + i32.gt_s + if (result i32) + local.get $3 + local.get $2 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $1 + local.set $0 + local.get $0 + i32.const 0 + i32.store + local.get $0 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $0 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $8 + local.get $7 + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=4 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u + local.set $7 + local.get $7 + if + local.get $0 + local.set $11 + local.get $5 + local.set $10 + local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $9 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + local.get $8 + i32.const 1 + i32.add + local.set $8 + br $for-loop|1 + end + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|0 + end + end + local.get $0 + local.get $1 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $0 + global.set $~lib/rt/tlsf/ROOT + end + local.get $0 + ) + (func $~lib/rt/tlsf/prepareSize (; 18 ;) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 112 + i32.const 64 + i32.const 457 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.tee $1 + i32.const 16 + local.tee $2 + local.get $1 + local.get $2 + i32.gt_u + select + ) + (func $~lib/rt/tlsf/searchBlock (; 19 ;) (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 $8 i32) + (local $9 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $2 + local.get $1 + i32.const 4 + i32.shr_u + local.set $3 + else + local.get $1 + i32.const 536870904 + i32.lt_u + if (result i32) + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $1 + end + local.set $4 + i32.const 31 + local.get $4 + i32.clz + i32.sub + local.set $2 + local.get $4 + local.get $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $3 + local.get $2 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $2 + end + local.get $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $3 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 338 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $5 + local.get $2 + local.set $4 + local.get $5 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + i32.const 0 + local.set $7 + local.get $6 + i32.eqz + if + local.get $0 + i32.load + i32.const 0 + i32.const -1 + i32.xor + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.set $5 + local.get $5 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $5 + i32.ctz + local.set $2 + local.get $0 + local.set $8 + local.get $2 + local.set $4 + local.get $8 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 351 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $4 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $7 + end + else + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $4 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/pure/markGray (; 20 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne + if + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 268435456 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 2 + call $~lib/rt/__visit_members + end + ) + (func $~lib/rt/tlsf/freeBlock (; 21 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.load + local.set $2 + local.get $2 + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 569 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/rtrace/onfree + ) + (func $~lib/rt/pure/scanBlack (; 22 ;) (param $0 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 0 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 4 + call $~lib/rt/__visit_members + ) + (func $~lib/rt/pure/scan (; 23 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.eq + if + local.get $1 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + if + local.get $0 + call $~lib/rt/pure/scanBlack + else + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 536870912 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 3 + call $~lib/rt/__visit_members + end + end + ) + (func $~lib/rt/pure/collectWhite (; 24 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 1879048192 + i32.and + i32.const 536870912 + i32.eq + if (result i32) + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + else + i32.const 0 + end + if + local.get $0 + local.get $1 + i32.const 1879048192 + i32.const -1 + i32.xor + i32.and + i32.const 0 + i32.or + i32.store offset=4 + local.get $0 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + end + ) + (func $~lib/rt/pure/__collect (; 25 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/rt/pure/ROOTS + local.set $0 + local.get $0 + local.set $1 + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + loop $for-loop|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $2 + i32.load + local.set $5 + local.get $5 + i32.load offset=4 + local.set $6 + local.get $6 + i32.const 1879048192 + i32.and + i32.const 805306368 + i32.eq + if (result i32) + local.get $6 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + else + i32.const 0 + end + if + local.get $5 + call $~lib/rt/pure/markGray + local.get $1 + local.get $5 + i32.store + local.get $1 + i32.const 4 + i32.add + local.set $1 + else + local.get $6 + i32.const 1879048192 + i32.and + i32.const 0 + i32.eq + if (result i32) + local.get $6 + i32.const 268435455 + i32.and + i32.eqz + else + i32.const 0 + end + if + global.get $~lib/rt/tlsf/ROOT + local.get $5 + call $~lib/rt/tlsf/freeBlock + else + local.get $5 + local.get $6 + i32.const -2147483648 + i32.const -1 + i32.xor + i32.and + i32.store offset=4 + end + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $for-loop|0 + end + end + local.get $1 + global.set $~lib/rt/pure/CUR + local.get $0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if + local.get $3 + i32.load + call $~lib/rt/pure/scan + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|1 + end + end + local.get $0 + local.set $3 + loop $for-loop|2 + local.get $3 + local.get $1 + i32.lt_u + local.set $2 + local.get $2 + if + local.get $3 + i32.load + local.set $4 + local.get $4 + local.get $4 + i32.load offset=4 + i32.const -2147483648 + i32.const -1 + i32.xor + i32.and + i32.store offset=4 + local.get $4 + call $~lib/rt/pure/collectWhite + local.get $3 + i32.const 4 + i32.add + local.set $3 + br $for-loop|2 + end + end + local.get $0 + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/tlsf/growMemory (; 26 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + local.get $1 + i32.const 536870904 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.set $1 + end + memory.size + local.set $2 + local.get $1 + i32.const 16 + local.get $2 + i32.const 16 + i32.shl + i32.const 16 + i32.sub + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + i32.ne + i32.shl + i32.add + local.set $1 + local.get $1 + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $4 + local.get $2 + local.tee $3 + local.get $4 + local.tee $5 + local.get $3 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $7 + local.get $0 + local.get $2 + i32.const 16 + i32.shl + local.get $7 + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.set $3 + local.get $2 + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 365 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.sub + local.set $4 + local.get $4 + i32.const 32 + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + local.set $5 + local.get $5 + local.get $4 + i32.const 16 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const 1 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.get $1 + local.set $5 + local.get $5 + i32.const 16 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 28 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/collectLock + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 490 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + global.get $~lib/gc/gc.auto + if + i32.const 1 + global.set $~lib/rt/tlsf/collectLock + call $~lib/rt/pure/__collect + i32.const 0 + global.set $~lib/rt/tlsf/collectLock + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 502 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + end + else + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 507 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + end + end + local.get $3 + i32.load + i32.const -4 + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 510 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 0 + i32.store offset=4 + local.get $3 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $3 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $3 + local.get $2 + call $~lib/rt/tlsf/prepareBlock + local.get $3 + call $~lib/rt/rtrace/onalloc + local.get $3 + ) + (func $~lib/rt/tlsf/__alloc (; 29 ;) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $2 + local.get $2 + local.get $1 + i32.store offset=8 + local.get $2 + i32.const 16 + i32.add + ) + (func $~lib/rt/pure/increment (; 30 ;) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const -268435456 + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 104 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + call $~lib/rt/rtrace/onincrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 107 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 31 ;) (param $0 i32) (result i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $while/Ref#constructor (; 32 ;) (param $0 i32) (result i32) + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.set $0 + end + local.get $0 + ) + (func $~lib/rt/__typeinfo (; 33 ;) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/__rtti_base + local.set $1 + local.get $0 + local.get $1 + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $0 + i32.const 8 + i32.mul + i32.add + i32.load + ) + (func $~lib/util/memory/memcpy (; 34 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + loop $while-continue|0 + local.get $2 + if (result i32) + local.get $1 + i32.const 3 + i32.and + else + i32.const 0 + end + local.set $5 + local.get $5 + if + local.get $0 + local.tee $6 + i32.const 1 + i32.add + local.set $0 + local.get $6 + local.get $1 + local.tee $6 + i32.const 1 + i32.add + local.set $1 + local.get $6 + i32.load8_u + i32.store8 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + br $while-continue|0 + end + end + local.get $0 + i32.const 3 + i32.and + i32.const 0 + i32.eq + if + loop $while-continue|1 + local.get $2 + i32.const 16 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $1 + i32.const 4 + i32.add + i32.load + i32.store + local.get $0 + i32.const 8 + i32.add + local.get $1 + i32.const 8 + i32.add + i32.load + i32.store + local.get $0 + i32.const 12 + i32.add + local.get $1 + i32.const 12 + i32.add + i32.load + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|1 + end + end + local.get $2 + i32.const 8 + i32.and + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $1 + i32.const 4 + i32.add + i32.load + i32.store + local.get $0 + i32.const 8 + i32.add + local.set $0 + local.get $1 + i32.const 8 + i32.add + local.set $1 + end + local.get $2 + i32.const 4 + i32.and + if + local.get $0 + local.get $1 + i32.load + i32.store + local.get $0 + i32.const 4 + i32.add + local.set $0 + local.get $1 + i32.const 4 + i32.add + local.set $1 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $0 + local.get $1 + i32.load16_u + i32.store16 + local.get $0 + i32.const 2 + i32.add + local.set $0 + local.get $1 + i32.const 2 + i32.add + local.set $1 + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + return + end + local.get $2 + i32.const 32 + i32.ge_u + if + block $break|2 + block $case2|2 + block $case1|2 + block $case0|2 + local.get $0 + i32.const 3 + i32.and + local.set $5 + local.get $5 + i32.const 1 + i32.eq + br_if $case0|2 + local.get $5 + i32.const 2 + i32.eq + br_if $case1|2 + local.get $5 + i32.const 3 + i32.eq + br_if $case2|2 + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 3 + i32.sub + local.set $2 + loop $while-continue|3 + local.get $2 + i32.const 17 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 1 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 24 + i32.shr_u + local.get $4 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 5 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 24 + i32.shr_u + local.get $3 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 9 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 24 + i32.shr_u + local.get $4 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 13 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 24 + i32.shr_u + local.get $3 + i32.const 8 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|3 + end + end + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 2 + i32.sub + local.set $2 + loop $while-continue|4 + local.get $2 + i32.const 18 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 2 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 16 + i32.shr_u + local.get $4 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 6 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 16 + i32.shr_u + local.get $3 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 10 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 16 + i32.shr_u + local.get $4 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 14 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 16 + i32.shr_u + local.get $3 + i32.const 16 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|4 + end + end + br $break|2 + end + local.get $1 + i32.load + local.set $3 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $2 + i32.const 1 + i32.sub + local.set $2 + loop $while-continue|5 + local.get $2 + i32.const 19 + i32.ge_u + local.set $5 + local.get $5 + if + local.get $1 + i32.const 3 + i32.add + i32.load + local.set $4 + local.get $0 + local.get $3 + i32.const 8 + i32.shr_u + local.get $4 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 7 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 4 + i32.add + local.get $4 + i32.const 8 + i32.shr_u + local.get $3 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 11 + i32.add + i32.load + local.set $4 + local.get $0 + i32.const 8 + i32.add + local.get $3 + i32.const 8 + i32.shr_u + local.get $4 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 15 + i32.add + i32.load + local.set $3 + local.get $0 + i32.const 12 + i32.add + local.get $4 + i32.const 8 + i32.shr_u + local.get $3 + i32.const 24 + i32.shl + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.set $1 + local.get $0 + i32.const 16 + i32.add + local.set $0 + local.get $2 + i32.const 16 + i32.sub + local.set $2 + br $while-continue|5 + end + end + br $break|2 + end + end + local.get $2 + i32.const 16 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 8 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 4 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + local.get $2 + i32.const 1 + i32.and + if + local.get $0 + local.tee $5 + i32.const 1 + i32.add + local.set $0 + local.get $5 + local.get $1 + local.tee $5 + i32.const 1 + i32.add + local.set $1 + local.get $5 + i32.load8_u + i32.store8 + end + ) + (func $~lib/memory/memory.copy (; 35 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + block $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.set $5 + local.get $1 + local.set $4 + local.get $2 + local.set $3 + local.get $5 + local.get $4 + i32.eq + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $4 + local.get $3 + i32.add + local.get $5 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $5 + local.get $3 + i32.add + local.get $4 + i32.le_u + end + if + local.get $5 + local.get $4 + local.get $3 + call $~lib/util/memory/memcpy + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $4 + i32.lt_u + if + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $5 + i32.const 7 + i32.and + local.set $6 + local.get $6 + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $3 + i32.const 1 + i32.sub + local.set $3 + local.get $5 + local.tee $7 + i32.const 1 + i32.add + local.set $5 + local.get $7 + local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 + i32.load8_u + i32.store8 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if + local.get $5 + local.get $4 + i64.load + i64.store + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + i32.const 8 + i32.add + local.set $5 + local.get $4 + i32.const 8 + i32.add + local.set $4 + br $while-continue|1 + end + end + end + loop $while-continue|2 + local.get $3 + local.set $6 + local.get $6 + if + local.get $5 + local.tee $7 + i32.const 1 + i32.add + local.set $5 + local.get $7 + local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 + i32.load8_u + i32.store8 + local.get $3 + i32.const 1 + i32.sub + local.set $3 + br $while-continue|2 + end + end + else + local.get $4 + i32.const 7 + i32.and + local.get $5 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|3 + local.get $5 + local.get $3 + i32.add + i32.const 7 + i32.and + local.set $6 + local.get $6 + if + local.get $3 + i32.eqz + if + br $~lib/util/memory/memmove|inlined.0 + end + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|3 + end + end + loop $while-continue|4 + local.get $3 + i32.const 8 + i32.ge_u + local.set $6 + local.get $6 + if + local.get $3 + i32.const 8 + i32.sub + local.set $3 + local.get $5 + local.get $3 + i32.add + local.get $4 + local.get $3 + i32.add + i64.load + i64.store + br $while-continue|4 + end + end + end + loop $while-continue|5 + local.get $3 + local.set $6 + local.get $6 + if + local.get $5 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $4 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $while-continue|5 + end + end + end + end + ) + (func $~lib/rt/tlsf/__free (; 36 ;) (param $0 i32) + local.get $0 + i32.const 0 + i32.ne + if (result i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 64 + i32.const 593 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/growRoots (; 37 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/rt/pure/ROOTS + local.set $0 + global.get $~lib/rt/pure/CUR + local.get $0 + i32.sub + local.set $1 + local.get $1 + i32.const 2 + i32.mul + local.tee $2 + i32.const 64 + i32.const 2 + i32.shl + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + local.set $4 + local.get $4 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.set $5 + local.get $5 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onfree + local.get $5 + local.get $0 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/rtrace/onalloc + local.get $0 + call $~lib/rt/tlsf/__free + end + local.get $5 + global.set $~lib/rt/pure/ROOTS + local.get $5 + local.get $1 + i32.add + global.set $~lib/rt/pure/CUR + local.get $5 + local.get $4 + i32.add + global.set $~lib/rt/pure/END + ) + (func $~lib/rt/pure/appendRoot (; 38 ;) (param $0 i32) + (local $1 i32) + global.get $~lib/rt/pure/CUR + local.set $1 + local.get $1 + global.get $~lib/rt/pure/END + i32.ge_u + if + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR + local.set $1 + end + local.get $1 + local.get $0 + i32.store + local.get $1 + i32.const 4 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 39 ;) (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.and + local.set $2 + local.get $0 + call $~lib/rt/rtrace/ondecrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 115 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 1 + i32.eq + if + local.get $0 + i32.const 16 + i32.add + i32.const 1 + call $~lib/rt/__visit_members + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + else + local.get $0 + i32.const -2147483648 + i32.const 0 + i32.or + i32.const 0 + i32.or + i32.store offset=4 + end + else + local.get $2 + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 124 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 16 + i32.and + i32.eqz + if + local.get $0 + i32.const -2147483648 + i32.const 805306368 + i32.or + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + local.get $1 + i32.const -2147483648 + i32.and + i32.eqz + if + local.get $0 + call $~lib/rt/pure/appendRoot + end + else + local.get $0 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.const 1 + i32.sub + i32.or + i32.store offset=4 + end + end + ) + (func $~lib/rt/pure/__release (; 40 ;) (param $0 i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $while/testRef (; 41 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 0 + local.set $0 + i32.const 0 + call $while/Ref#constructor + local.set $1 + loop $while-continue|0 + local.get $1 + local.set $2 + local.get $2 + if + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + i32.const 0 + local.tee $3 + local.get $1 + local.tee $4 + i32.ne + if + local.get $3 + call $~lib/rt/pure/__retain + local.set $3 + local.get $4 + call $~lib/rt/pure/__release + end + local.get $3 + local.set $1 + else + i32.const 0 + call $while/Ref#constructor + local.set $4 + local.get $1 + call $~lib/rt/pure/__release + local.get $4 + local.set $1 + end + br $while-continue|0 + end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 142 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 143 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + local.get $1 + call $~lib/rt/pure/__release + ) + (func $while/getRef (; 42 ;) (result i32) + i32.const 0 + call $while/Ref#constructor + ) + (func $while/testRefAutorelease (; 43 ;) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 0 + local.set $0 + i32.const 0 + call $while/Ref#constructor + local.set $1 + block $while-break|0 + loop $while-continue|0 + call $while/getRef + local.tee $2 + local.set $3 + local.get $2 + call $~lib/rt/pure/__release + local.get $3 + if + local.get $0 + i32.const 1 + i32.add + local.tee $0 + i32.const 10 + i32.eq + if + i32.const 0 + local.tee $2 + local.get $1 + local.tee $4 + i32.ne + if + local.get $2 + call $~lib/rt/pure/__retain + local.set $2 + local.get $4 + call $~lib/rt/pure/__release + end + local.get $2 + local.set $1 + br $while-break|0 + end + br $while-continue|0 + end + end + end + local.get $0 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 162 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 163 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + global.set $while/ran + local.get $1 + call $~lib/rt/pure/__release + ) + (func $start:while (; 44 ;) + i32.const 0 + global.set $while/ran + call $while/testSimple + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 16 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testNested + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 39 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testEmpty + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 51 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testAlwaysTrue + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 63 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testAlwaysFalse + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 76 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testAlwaysBreaks + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 88 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testAlwaysReturns + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 100 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testContinue + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 113 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testNestedContinue + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 132 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testRef + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 148 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $while/ran + call $while/testRefAutorelease + global.get $while/ran + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 168 + i32.const 0 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start (; 45 ;) + global.get $~started + if + return + else + i32.const 1 + global.set $~started + end + call $start:while + ) + (func $~lib/rt/pure/__visit (; 46 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/heap/__heap_base + i32.lt_u + if + return + end + local.get $0 + i32.const 16 + i32.sub + local.set $2 + block $break|0 + block $case5|0 + block $case4|0 + block $case3|0 + block $case2|0 + block $case1|0 + block $case0|0 + local.get $1 + local.set $3 + local.get $3 + i32.const 1 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + local.get $3 + i32.const 3 + i32.eq + br_if $case2|0 + local.get $3 + i32.const 4 + i32.eq + br_if $case3|0 + local.get $3 + i32.const 5 + i32.eq + br_if $case4|0 + br $case5|0 + end + local.get $2 + call $~lib/rt/pure/decrement + br $break|0 + end + local.get $2 + i32.load offset=4 + i32.const 268435455 + i32.and + i32.const 0 + i32.gt_u + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 75 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + local.get $2 + call $~lib/rt/pure/markGray + br $break|0 + end + local.get $2 + call $~lib/rt/pure/scan + br $break|0 + end + local.get $2 + i32.load offset=4 + local.set $3 + local.get $3 + i32.const -268435456 + i32.and + local.get $3 + i32.const 1 + i32.add + i32.const -268435456 + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 86 + i32.const 6 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $3 + i32.const 1 + i32.add + i32.store offset=4 + local.get $3 + i32.const 1879048192 + i32.and + i32.const 0 + i32.ne + if + local.get $2 + call $~lib/rt/pure/scanBlack + end + br $break|0 + end + local.get $2 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 176 + i32.const 97 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + end + ) + (func $~lib/rt/__visit_members (; 47 ;) (param $0 i32) (param $1 i32) + (local $2 i32) + block $switch$1$default + block $switch$1$case$4 + block $switch$1$case$2 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + end + return + end + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + return + end + unreachable ) ) diff --git a/tests/compiler/wildcard-export.untouched.wat b/tests/compiler/wildcard-export.untouched.wat index a67d5ec370..03ecd3058b 100644 --- a/tests/compiler/wildcard-export.untouched.wat +++ b/tests/compiler/wildcard-export.untouched.wat @@ -11,7 +11,7 @@ (export "renamed_a" (global $export/a)) (export "renamed_b" (global $export/b)) (export "renamed_renamed_b" (global $export/b)) - (start $start) + (start $~start) (func $export/add (; 0 ;) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -38,7 +38,7 @@ (func $start:wildcard-export (; 4 ;) call $start:rereexport ) - (func $start (; 5 ;) + (func $~start (; 5 ;) call $start:wildcard-export ) )