From c92643832c86d742a9bc14d955be0ff8e3b3a905 Mon Sep 17 00:00:00 2001 From: dcode Date: Tue, 21 May 2019 15:02:39 +0200 Subject: [PATCH] move stuff, run both untouched and optimized --- src/builtins.ts | 130 +- src/compiler.ts | 86 +- src/diagnostics.ts | 4 +- src/program.ts | 8 +- std/assembly/builtins.ts | 36 +- std/assembly/diagnostics.ts | 11 + std/assembly/heap.ts | 3 + std/assembly/rt.ts | 84 + std/assembly/rt/README.md | 21 +- std/assembly/rt/common.ts | 45 - std/assembly/rt/index-full.ts | 4 +- std/assembly/rt/index-stub.ts | 2 +- std/assembly/rt/{purerc.ts => pure.ts} | 8 +- std/assembly/rt/stub.ts | 20 +- std/assembly/rt/tlsf.ts | 6 +- tests/.gitignore | 1 + tests/compiler.js | 257 +- tests/compiler/do.optimized.wat | 164 +- tests/compiler/empty.optimized.wat | 3 +- tests/compiler/rc/global-init.optimized.wat | 2694 ++-- tests/compiler/rc/global-init.untouched.wat | 1676 +-- tests/compiler/rc/local-init.optimized.wat | 3210 ++--- tests/compiler/rc/local-init.untouched.wat | 1830 +-- .../rc/logical-and-mismatch.optimized.wat | 1428 +- .../rc/logical-and-mismatch.untouched.wat | 1922 +-- .../rc/logical-or-mismatch.optimized.wat | 2839 ++-- .../rc/logical-or-mismatch.untouched.wat | 1922 +-- tests/compiler/rc/rereturn.optimized.wat | 3437 ++--- tests/compiler/rc/rereturn.untouched.wat | 2554 ++-- .../rc/ternary-mismatch.optimized.wat | 2803 ++-- .../rc/ternary-mismatch.untouched.wat | 1838 +-- tests/compiler/retain-release.optimized.wat | 541 +- tests/compiler/retain-release.untouched.wat | 4 +- tests/compiler/runtime-full.optimized.wat | 3347 ++--- tests/compiler/runtime-full.untouched.wat | 2488 ++-- tests/compiler/runtime-stub.optimized.wat | 430 +- tests/compiler/runtime-stub.untouched.wat | 391 +- tests/compiler/simd.optimized.wat | 2 +- tests/compiler/static-this.optimized.wat | 21 +- tests/compiler/std/array.optimized.wat | 6948 +++++----- tests/compiler/std/array.untouched.wat | 8696 ++++++------- tests/compiler/std/mod.optimized.wat | 682 +- tests/compiler/std/set.optimized.wat | 10831 ++++++---------- tests/compiler/std/set.untouched.wat | 3720 +++--- tests/compiler/std/string.optimized.wat | 4520 +++---- tests/compiler/std/string.untouched.wat | 5440 ++++---- tests/compiler/switch.optimized.wat | 429 +- tests/compiler/wasi.optimized.wat | 538 +- tests/compiler/while.optimized.wat | 184 +- 49 files changed, 34520 insertions(+), 43738 deletions(-) create mode 100644 std/assembly/diagnostics.ts create mode 100644 std/assembly/heap.ts create mode 100644 std/assembly/rt.ts rename std/assembly/rt/{purerc.ts => pure.ts} (98%) diff --git a/src/builtins.ts b/src/builtins.ts index d104a7a7..c3e3b7e7 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -5,7 +5,8 @@ import { Compiler, - ContextualFlags + ContextualFlags, + RuntimeFeatures } from "./compiler"; import { @@ -141,6 +142,7 @@ export namespace BuiltinSymbols { export const call_direct = "~lib/builtins/call_direct"; export const call_indirect = "~lib/builtins/call_indirect"; export const instantiate = "~lib/builtins/instantiate"; + export const idof = "~lib/builtins/idof"; export const i8 = "~lib/builtins/i8"; export const i16 = "~lib/builtins/i16"; @@ -464,11 +466,10 @@ export namespace BuiltinSymbols { export const v8x16_shuffle = "~lib/builtins/v8x16.shuffle"; // internals - export const HEAP_BASE = "~lib/builtins/HEAP_BASE"; - export const RTTI_BASE = "~lib/builtins/RTTI_BASE"; - export const idof = "~lib/builtins/idof"; - export const visit_globals = "~lib/builtins/__visit_globals"; - export const visit_members = "~lib/builtins/__visit_members"; + export const HEAP_BASE = "~lib/heap/HEAP_BASE"; + export const RTTI_BASE = "~lib/rt/RTTI_BASE"; + export const visit_globals = "~lib/rt/__visit_globals"; + export const visit_members = "~lib/rt/__visit_members"; // std/diagnostics.ts export const ERROR = "~lib/diagnostics/ERROR"; @@ -3557,7 +3558,7 @@ export function compileCall( return module.createUnreachable(); } let arg0 = compiler.compileExpression(operands[0], Type.u32, ContextualFlags.IMPLICIT); - compiler.needsVisitGlobals = true; + compiler.runtimeFeatures |= RuntimeFeatures.visitGlobals; compiler.currentType = Type.void; return module.createCall(BuiltinSymbols.visit_globals, [ arg0 ], NativeType.None); } @@ -3571,10 +3572,123 @@ export function compileCall( } let arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, ContextualFlags.IMPLICIT); let arg1 = compiler.compileExpression(operands[1], Type.u32, ContextualFlags.IMPLICIT); - compiler.needsVisitMembers = true; + compiler.runtimeFeatures |= RuntimeFeatures.visitMembers; compiler.currentType = Type.void; return module.createCall(BuiltinSymbols.visit_members, [ arg0, arg1 ], NativeType.None); } + // The following simply intercept the respective runtime calls in order to force + // compilation of runtime functionality to the bottom of generated binaries. + case compiler.program.visitInstance.internalName: { + if ( + checkTypeAbsent(typeArguments, reportNode, prototype) | + checkArgsRequired(operands, 2, reportNode, compiler) // ref, cookie + ) { + compiler.currentType = Type.void; + return module.createUnreachable(); + } + let arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, ContextualFlags.IMPLICIT); + let arg1 = compiler.compileExpression(operands[1], Type.u32, ContextualFlags.IMPLICIT); + compiler.runtimeFeatures |= RuntimeFeatures.visit; + compiler.currentType = Type.void; + return module.createCall(compiler.program.visitInstance.internalName, [ arg0, arg1 ], NativeType.None); + } + case compiler.program.retainInstance.internalName: { + let usizeType = compiler.options.usizeType; + if ( + checkTypeAbsent(typeArguments, reportNode, prototype) | + checkArgsRequired(operands, 1, reportNode, compiler) // ref + ) { + compiler.currentType = usizeType; + return module.createUnreachable(); + } + let arg0 = compiler.compileExpression(operands[0], usizeType, ContextualFlags.IMPLICIT); + compiler.runtimeFeatures |= RuntimeFeatures.retain; + compiler.currentType = usizeType; + return module.createCall(compiler.program.retainInstance.internalName, [ arg0 ], compiler.options.nativeSizeType); + } + case compiler.program.retainReleaseInstance.internalName: { + let usizeType = compiler.options.usizeType; + if ( + checkTypeAbsent(typeArguments, reportNode, prototype) | + checkArgsRequired(operands, 2, reportNode, compiler) // newRef, oldRef + ) { + compiler.currentType = usizeType; + return module.createUnreachable(); + } + let arg0 = compiler.compileExpression(operands[0], usizeType, ContextualFlags.IMPLICIT); + let arg1 = compiler.compileExpression(operands[1], usizeType, ContextualFlags.IMPLICIT); + compiler.runtimeFeatures |= RuntimeFeatures.retainRelease; + compiler.currentType = usizeType; + return module.createCall(compiler.program.retainReleaseInstance.internalName, [ arg0, arg1 ], compiler.options.nativeSizeType); + } + case compiler.program.releaseInstance.internalName: { + if ( + checkTypeAbsent(typeArguments, reportNode, prototype) | + checkArgsRequired(operands, 1, reportNode, compiler) // ref + ) { + compiler.currentType = Type.void; + return module.createUnreachable(); + } + let arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, ContextualFlags.IMPLICIT); + compiler.runtimeFeatures |= RuntimeFeatures.release; + compiler.currentType = Type.void; + return module.createCall(compiler.program.releaseInstance.internalName, [ arg0 ], NativeType.None); + } + case compiler.program.allocInstance.internalName: { + let usizeType = compiler.options.usizeType; + if ( + checkTypeAbsent(typeArguments, reportNode, prototype) | + checkArgsRequired(operands, 2, reportNode, compiler) // size, id + ) { + compiler.currentType = usizeType; + return module.createUnreachable(); + } + let arg0 = compiler.compileExpression(operands[0], usizeType, ContextualFlags.IMPLICIT); + let arg1 = compiler.compileExpression(operands[1], Type.u32, ContextualFlags.IMPLICIT); + compiler.runtimeFeatures |= RuntimeFeatures.alloc; + compiler.currentType = usizeType; + return module.createCall(compiler.program.allocInstance.internalName, [ arg0, arg1 ], compiler.options.nativeSizeType); + } + case compiler.program.reallocInstance.internalName: { + let usizeType = compiler.options.usizeType; + if ( + checkTypeAbsent(typeArguments, reportNode, prototype) | + checkArgsRequired(operands, 2, reportNode, compiler) // ref, size + ) { + compiler.currentType = usizeType; + return module.createUnreachable(); + } + let arg0 = compiler.compileExpression(operands[0], usizeType, ContextualFlags.IMPLICIT); + let arg1 = compiler.compileExpression(operands[1], usizeType, ContextualFlags.IMPLICIT); + compiler.runtimeFeatures |= RuntimeFeatures.realloc; + compiler.currentType = usizeType; + return module.createCall(compiler.program.reallocInstance.internalName, [ arg0, arg1 ], compiler.options.nativeSizeType); + } + case compiler.program.freeInstance.internalName: { + if ( + checkTypeAbsent(typeArguments, reportNode, prototype) | + checkArgsRequired(operands, 1, reportNode, compiler) // ref + ) { + compiler.currentType = Type.void; + return module.createUnreachable(); + } + let arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, ContextualFlags.IMPLICIT); + compiler.runtimeFeatures |= RuntimeFeatures.free; + compiler.currentType = Type.void; + return module.createCall(compiler.program.freeInstance.internalName, [ arg0 ], NativeType.None); + } + case compiler.program.collectInstance.internalName: { + if ( + checkTypeAbsent(typeArguments, reportNode, prototype) | + checkArgsRequired(operands, 0, reportNode, compiler) + ) { + compiler.currentType = Type.void; + return module.createUnreachable(); + } + compiler.runtimeFeatures |= RuntimeFeatures.collect; + compiler.currentType = Type.void; + return module.createCall(compiler.program.collectInstance.internalName, null, NativeType.None); + } } // try to defer inline asm to a concrete built-in diff --git a/src/compiler.ts b/src/compiler.ts index b6eb370a..820c3399 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -250,6 +250,35 @@ export const enum ContextualFlags { STATIC_CAPABLE = 1 << 6 } +/** Runtime features to be activated by the compiler. */ +export const enum RuntimeFeatures { + NONE = 0, + /** Requires HEAP_BASE and heap setup. */ + HEAP = 1 << 0, + /** Requires RTTI_BASE and RTTI setup. */ + RTTI = 1 << 1, + /** Requires the alloc function. */ + alloc = 1 << 2, + /** Requires the realloc function. */ + realloc = 1 << 3, + /** Requires the free function. */ + free = 1 << 4, + /** Requires the retain function. */ + retain = 1 << 5, + /** Requires the retainRelease functino. */ + retainRelease = 1 << 6, + /** Requires the release function. */ + release = 1 << 7, + /** Requires the collect function. */ + collect = 1 << 8, + /** Requires the visit function. */ + visit = 1 << 9, + /** Requires the built-in globals visitor. */ + visitGlobals = 1 << 10, + /** Requires the built-in members visitor. */ + visitMembers = 1 << 11 +} + /** Compiler interface. */ export class Compiler extends DiagnosticEmitter { @@ -283,22 +312,8 @@ export class Compiler extends DiagnosticEmitter { argcVar: GlobalRef = 0; /** Argument count helper setter. */ argcSet: FunctionRef = 0; - /** Whether HEAP_BASE is required. */ - needsHeap: bool = false; - /** Indicates whether the __visit_globals function must be generated. */ - needsVisitGlobals: bool = false; - /** Indicated whether the __visit_members function must be generated. */ - needsVisitMembers: bool = false; - /** Whether RTTI is required. */ - needsRTTI: bool = false; - /** Whether the alloc function is required. */ - needsAlloc: bool = false; - /** Whether the retain function is required. */ - needsRetain: bool = false; - /** Whether the retainRelease function is required. */ - needsRetainRelease: bool = false; - /** Whether the release function is required. */ - needsRelease: bool = false; + /** Requires runtime features. */ + runtimeFeatures: RuntimeFeatures = RuntimeFeatures.NONE; /** Expressions known to have skipped an autorelease. Usually function returns. */ skippedAutoreleases: Set = new Set(); @@ -347,7 +362,7 @@ export class Compiler extends DiagnosticEmitter { this.currentFlow = startFunctionInstance.flow; this.currentBody = startFunctionBody; - // add a mutable heap base dummy + // add a mutable heap and rtti base dummies if (options.isWasm64) { module.addGlobal(BuiltinSymbols.HEAP_BASE, NativeType.I64, true, module.createI64(0)); module.addGlobal(BuiltinSymbols.RTTI_BASE, NativeType.I64, true, module.createI64(0)); @@ -383,26 +398,28 @@ export class Compiler extends DiagnosticEmitter { if (!explicitStartFunction) module.setStart(funcRef); } - // compile gc features if utilized. has two uses: first, whenever the compiler - // uses these, all it has to do is set a flag to true. second, when inspecting - // generated WATs, it's quite useful that these functions come last. - if (this.needsAlloc) this.compileFunction(program.allocInstance); - if (this.needsRetain) this.compileFunction(program.retainInstance); - if (this.needsRetainRelease) this.compileFunction(program.retainReleaseInstance); - if (this.needsRelease) this.compileFunction(program.releaseInstance); - if (this.needsVisitGlobals) compileVisitGlobals(this); - if (this.needsVisitMembers) compileVisitMembers(this); // called by release + // compile runtime implementation (after actual code). note that these may modify features and order is important. + if (this.runtimeFeatures & RuntimeFeatures.visit) this.compileFunction(program.visitInstance); + if (this.runtimeFeatures & RuntimeFeatures.retain) this.compileFunction(program.retainInstance); + if (this.runtimeFeatures & RuntimeFeatures.retainRelease) this.compileFunction(program.retainReleaseInstance); + if (this.runtimeFeatures & RuntimeFeatures.release) this.compileFunction(program.releaseInstance); + if (this.runtimeFeatures & RuntimeFeatures.collect) this.compileFunction(program.collectInstance); + if (this.runtimeFeatures & RuntimeFeatures.visitGlobals) compileVisitGlobals(this); + if (this.runtimeFeatures & RuntimeFeatures.visitMembers) compileVisitMembers(this); // called by release + if (this.runtimeFeatures & RuntimeFeatures.realloc) this.compileFunction(program.reallocInstance); + if (this.runtimeFeatures & RuntimeFeatures.alloc) this.compileFunction(program.allocInstance); + if (this.runtimeFeatures & RuntimeFeatures.free) this.compileFunction(program.freeInstance); // compile runtime type information module.removeGlobal(BuiltinSymbols.RTTI_BASE); - if (this.needsRTTI) compileRTTI(this); + 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); - if (this.needsHeap) { + if (this.runtimeFeatures & RuntimeFeatures.HEAP) { if (options.isWasm64) { module.addGlobal( BuiltinSymbols.HEAP_BASE, @@ -833,8 +850,8 @@ export class Compiler extends DiagnosticEmitter { // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) { - if (global.internalName == BuiltinSymbols.HEAP_BASE) this.needsHeap = true; - else if (global.internalName == BuiltinSymbols.RTTI_BASE) this.needsRTTI = true; + if (global.internalName == BuiltinSymbols.HEAP_BASE) this.runtimeFeatures |= RuntimeFeatures.HEAP; + else if (global.internalName == BuiltinSymbols.RTTI_BASE) this.runtimeFeatures |= RuntimeFeatures.RTTI; return true; } @@ -2333,6 +2350,7 @@ export class Compiler extends DiagnosticEmitter { } // Switch back to the parent flow + if (!innerFlow.isAny(FlowFlags.ANY_TERMINATING)) this.performAutoreleases(innerFlow, stmts); innerFlow.unset( FlowFlags.BREAKS | FlowFlags.CONDITIONALLY_BREAKS @@ -6524,19 +6542,19 @@ export class Compiler extends DiagnosticEmitter { /** Makes retain call, retaining the expression's value. */ makeRetain(expr: ExpressionRef): ExpressionRef { - this.needsRetain = true; + this.runtimeFeatures |= RuntimeFeatures.retain; return this.module.createCall(this.program.retainInstance.internalName, [ expr ], this.options.nativeSizeType); } /** Makes a retainRelease call, retaining the new expression's value and releasing the old expression's value. */ makeRetainRelease(exprNew: ExpressionRef, exprOld: ExpressionRef): ExpressionRef { - this.needsRetainRelease = true; + this.runtimeFeatures |= RuntimeFeatures.retainRelease; return this.module.createCall(this.program.retainReleaseInstance.internalName, [ exprNew, exprOld ], this.options.nativeSizeType); } /** Makes a release call, releasing the expression's value. Changes the current type to void.*/ makeRelease(expr: ExpressionRef): ExpressionRef { - this.needsRelease = true; + this.runtimeFeatures |= RuntimeFeatures.release; return this.module.createCall(this.program.releaseInstance.internalName, [ expr ], NativeType.None); } @@ -8846,7 +8864,7 @@ export class Compiler extends DiagnosticEmitter { var module = this.module; var options = this.options; this.currentType = classInstance.type; - this.needsAlloc = true; + this.runtimeFeatures |= RuntimeFeatures.alloc; return module.createCall(program.allocInstance.internalName, [ options.isWasm64 ? module.createI64(classInstance.currentMemoryOffset) diff --git a/src/diagnostics.ts b/src/diagnostics.ts index 9368bf94..2eff86a3 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -280,8 +280,8 @@ export abstract class DiagnosticEmitter { var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range); if (relatedRange) message.relatedRange = relatedRange; this.diagnostics.push(message); - // console.log(formatDiagnosticMessage(message, true, true) + "\n"); // temporary - // console.log(new Error("stack").stack); + console.log(formatDiagnosticMessage(message, true, true) + "\n"); // temporary + console.log(new Error("stack").stack); } /** Emits an informatory diagnostic message. */ diff --git a/src/program.ts b/src/program.ts index 6e30e719..e2594355 100644 --- a/src/program.ts +++ b/src/program.ts @@ -1042,13 +1042,13 @@ export class Program extends DiagnosticEmitter { let flag = decoratorKindToFlag(kind); if (flag) { if (flag == DecoratorFlags.BUILTIN) { - if (decorator.range.source.isLibrary) { - flags |= flag; - } else { + if (!(acceptedFlags & flag) && !decorator.range.source.isLibrary) { this.error( DiagnosticCode.Decorator_0_is_not_valid_here, decorator.range, decorator.name.range.toString() ); + } else { + flags |= flag; } } else if (!(acceptedFlags & flag)) { this.error( @@ -1562,7 +1562,7 @@ export class Program extends DiagnosticEmitter { parent: Element ): void { var name = declaration.name.text; - var validDecorators = DecoratorFlags.UNSAFE; + var validDecorators = DecoratorFlags.UNSAFE | DecoratorFlags.BUILTIN; if (declaration.is(CommonFlags.AMBIENT)) { validDecorators |= DecoratorFlags.EXTERNAL; } else { diff --git a/std/assembly/builtins.ts b/std/assembly/builtins.ts index e1fcea82..8cc28782 100644 --- a/std/assembly/builtins.ts +++ b/std/assembly/builtins.ts @@ -152,6 +152,10 @@ export declare function alignof(): usize; // | u32 / u64 @builtin export declare function offsetof(fieldName?: string): usize; // | u32 / u64 +// @ts-ignore: decorator +@builtin +export declare function idof(): u32; + // @ts-ignore: decorator @builtin export declare function select(ifTrue: T, ifFalse: T, condition: bool): T; @@ -1708,18 +1712,6 @@ export namespace v8x16 { ): v128; } -// @ts-ignore: decorator -@builtin -export declare function ERROR(message?: string): void; - -// @ts-ignore: decorator -@builtin -export declare function WARNING(message?: string): void; - -// @ts-ignore: decorator -@builtin -export declare function INFO(message?: string): void; - // @ts-ignore: decorator @external("env", "abort") declare function abort( @@ -1740,23 +1732,3 @@ declare function trace( a3?: f64, a4?: f64 ): void; - -// @ts-ignore: decorator -@builtin -export declare const HEAP_BASE: usize; - -// @ts-ignore: decorator -@builtin -export declare const RTTI_BASE: usize; - -// @ts-ignore: decorator -@builtin -export declare function idof(): u32; - -// @ts-ignore: decorator -@builtin @unsafe -export declare function __visit_globals(cookie: u32): void; - -// @ts-ignore: decorator -@builtin @unsafe -export declare function __visit_members(ref: usize, cookie: u32): void; diff --git a/std/assembly/diagnostics.ts b/std/assembly/diagnostics.ts new file mode 100644 index 00000000..065364db --- /dev/null +++ b/std/assembly/diagnostics.ts @@ -0,0 +1,11 @@ +// @ts-ignore: decorator +@builtin +export declare function ERROR(message?: string): void; + +// @ts-ignore: decorator +@builtin +export declare function WARNING(message?: string): void; + +// @ts-ignore: decorator +@builtin +export declare function INFO(message?: string): void; diff --git a/std/assembly/heap.ts b/std/assembly/heap.ts new file mode 100644 index 00000000..8fc375ce --- /dev/null +++ b/std/assembly/heap.ts @@ -0,0 +1,3 @@ +// @ts-ignore: decorator +@builtin +export declare const HEAP_BASE: usize; diff --git a/std/assembly/rt.ts b/std/assembly/rt.ts new file mode 100644 index 00000000..533f8ddd --- /dev/null +++ b/std/assembly/rt.ts @@ -0,0 +1,84 @@ +import { idof } from "./builtins"; +import { RTTIData, RTTIFlags } from "./common/rtti"; +import { E_INDEXOUTOFRANGE } from "./util/error"; +import { BLOCK, BLOCK_OVERHEAD } from "./rt/common"; +import { ArrayBufferView } from "./arraybuffer"; + +// @ts-ignore: decorator +@builtin +export declare const RTTI_BASE: usize; + +// @ts-ignore: decorator +@builtin @unsafe +export declare function __visit_globals(cookie: u32): void; + +// @ts-ignore: decorator +@builtin @unsafe +export declare function __visit_members(ref: usize, cookie: u32): void; + +// @ts-ignore: decorator +@unsafe +export function __typeinfo(id: u32): RTTIFlags { + var ptr = RTTI_BASE; + if (!id || id > load(ptr)) throw new Error(E_INDEXOUTOFRANGE); + return changetype(ptr + id * offsetof()).flags; +} + +// @ts-ignore: decorator +@unsafe +export function __instanceof(ref: usize, superId: u32): bool { // keyword + var id = changetype(ref - BLOCK_OVERHEAD).rtId; + var ptr = RTTI_BASE; + if (id && id <= load(ptr)) { + do if (id == superId) return true; + while (id = changetype(ptr + id * offsetof()).base); + } + return false; +} + +// @ts-ignore: decorator +@unsafe +export function __allocArray(length: i32, alignLog2: usize, id: u32, data: usize = 0): usize { + var array = __alloc(offsetof(), id); + var bufferSize = length << alignLog2; + var buffer = __alloc(bufferSize, idof()); + store(array, __retain(buffer), offsetof("data")); + changetype(array).dataStart = buffer; + changetype(array).dataLength = bufferSize; + store(changetype(array), length, offsetof("length_")); + if (data) memory.copy(buffer, data, bufferSize); + return array; +} + +// These are provided by the respective implementation, included as another entry file by asc: + +// @builtin @unsafe +// export declare function __alloc(size: usize, id: u32): usize; + +// // @ts-ignore: decorator +// @builtin @unsafe +// export declare function __realloc(ref: usize, size: usize): usize; + +// // @ts-ignore: decorator +// @builtin @unsafe +// export declare function __free(ref: usize): void; + +// // @ts-ignore: decorator +// @builtin @unsafe +// export declare function __retain(ref: usize): usize; + +// // @ts-ignore: decorator +// @builtin @unsafe +// export declare function __retainRelease(ref: usize, oldRef: usize): usize; + +// // @ts-ignore: decorator +// @builtin @unsafe +// export declare function __release(ref: usize): void; + +// // @ts-ignore: decorator +// @builtin @unsafe +// export declare function __collect(): void; + +// // @ts-ignore: decorator +// @builtin @unsafe +// export declare function __visit(ref: usize, cookie: u32): void; diff --git a/std/assembly/rt/README.md b/std/assembly/rt/README.md index c6fa2949..7fa13138 100644 --- a/std/assembly/rt/README.md +++ b/std/assembly/rt/README.md @@ -17,10 +17,10 @@ Interface Frees a dynamically allocated chunk of memory by its address. * **__retain**(ref: `usize`): `usize`
- Retains a reference to an instance of a reference type. The instance doesn't become collected as long as there's at least one retained reference. Returns the retained reference. + Retains a reference to an object. The object doesn't become collected as long as there's at least one retained reference. Returns the retained reference. * **__release**(ref: `usize`): `void`
- Releases a reference to an instance of a reference type. The instance is considered for collection once all references to it have been released. + Releases a reference to an object. The object is considered for collection once all references to it have been released. * **__collect**(): `void`
Forces a full garbage collection cycle. By default this means that reference cycles are resolved and possibly collected. @@ -28,7 +28,7 @@ Interface ### Internals * **__retainRelease**(newRef: `usize`, oldRef: `usize`): `usize`
- Retains a reference to an instance of a reference type while releasing the reference it replaces. Returns the retained reference. + Retains a reference to an object type while releasing the reference it replaces. Returns the retained reference. * **__visit**(ref: `usize`, cookie: `u32`): `void`
Concrete visitor implementation called during traversal. Cookie can be used to indicate one of multiple operations. @@ -36,13 +36,13 @@ Interface ### Built-ins * **__typeinfo**(id: `u32`): `RTTIFlags`
- Obtains the runtime type information for objects with the specified runtime id. Runtime type information is a set of flags indicating whether a reference type is managed, an array or similar, and what the relevant alignments when creating an instance are etc. + Obtains the runtime type information for objects with the specified runtime id. Runtime type information is a set of flags indicating whether a reference type is managed, an array or similar, and what the relevant alignments when creating an instance externally are etc. * **__visit_globals**(cookie: `u32`): `void`
Calls `__visit` on each global that is of a reference type. Not used anymore (originally provided to support tracing GCs) but still here for possible future use. * **__visit_members**(ref: `usize`, cookie: `u32`): `void`
- Calls `__visit` on each member of the instance pointed to by `ref` that is of a reference type. + Calls `__visit` on each member of the object pointed to by `ref`. Full/half --------- @@ -57,7 +57,7 @@ The [stub](./index-stub.ts) runtime, though fully functional, provides minimal d Integration notes ----------------- -The underlying reference counting implementation works very similar to other implementations. When an object is stored in a local, global or field, its reference becomes retained (reference count is incremented by 1), respectively when it becomes deleted, it is released (reference count is decremented by 1). Once the reference count reaches zero, the object is considered for collection. Now, if an object is inherently acyclic (most objects are), it is free'd right away, while otherwise it is added to a cycle pool and considered for cycle collection on the next `__collect`. +The underlying reference counting implementation works very similar to other implementations. When an object is stored in a local, global or field, its reference becomes retained (reference count is incremented by 1), respectively when it becomes deleted, it is released (reference count is decremented by 1). Once the reference count reaches zero, the object is considered for collection and the reference count of all contained objects (fields, array elements etc.) is decremented by 1. Now, if an object is inherently acyclic (most objects are), it is free'd right away, while otherwise it is added to a cycle pool and considered for cycle collection on the next `__collect`. Differences to other implementations include: @@ -68,20 +68,19 @@ Differences to other implementations include: Even though the rules are simple, working with the runtime internals within standard library code can be tricky and requires knowledge of where the compiler will insert runtime calls automatically. For instance, when `changetype`ing a pointer to a reference type or vice-versa, the typechange is performed with no side effects. Means: No retains or releases are inserted and the user has to take care of the implications. -GOOD: In case of doubt, the following pattern is universal: +**GOOD:** In case of doubt, the following pattern is universal: ```ts var ref = changetype(__alloc(SIZE, idof())); // retains the object in `ref` +// here, the __retain is inserted by the assignment to ref, not by changetype or __alloc ... return ref; // knows `ref` is already retained and simply returns it ``` -BAD: One common pattern one shouldn't use is: +**BAD:** A pattern one shouldn't use is: ```ts someFunc(changetype(__alloc(SIZE, idof()))); // might free the object before the call returns ``` -You know the drill. - -BONUS: Beware of runtime calls in conditional expressions like a ternary IF, logical AND or OR. Each arm can be in either of two states (either in-flight if immediately retained/returned or not if the expression or the target doesn't support it). Don't fight the compiler there. +**BONUS:** Beware of runtime calls in conditional expressions like a ternary IF, logical AND or OR. Each arm can be in either of two states (either in-flight if immediately retained/returned or not if the expression or the target doesn't support it). Don't fight the compiler there. diff --git a/std/assembly/rt/common.ts b/std/assembly/rt/common.ts index 1d1270e0..0c046c77 100644 --- a/std/assembly/rt/common.ts +++ b/std/assembly/rt/common.ts @@ -41,48 +41,3 @@ // @ts-ignore: decorator @inline export const BLOCK_MAXSIZE: usize = (1 << 30) - BLOCK_OVERHEAD; - -/////////////////////////////////// Type information interface //////////////////////////////////// - -import { RTTI_BASE } from "builtins"; -import { RTTIData, RTTIFlags } from "common/rtti"; -import { E_INDEXOUTOFRANGE } from "../util/error"; - -// @ts-ignore: decorator -@unsafe @global -export function __typeinfo(id: u32): RTTIFlags { - var ptr = RTTI_BASE; - if (!id || id > load(ptr)) throw new Error(E_INDEXOUTOFRANGE); - return changetype(ptr + id * offsetof()).flags; -} - -// @ts-ignore: decorator -@unsafe @global -export function __instanceof(ref: usize, superId: u32): bool { // keyword - var id = changetype(ref - BLOCK_OVERHEAD).rtId; - var ptr = RTTI_BASE; - if (id && id <= load(ptr)) { - do if (id == superId) return true; - while (id = changetype(ptr + id * offsetof()).base); - } - return false; -} - -///////////////////////////////////////////// Helpers ///////////////////////////////////////////// - -import { idof } from "builtins"; -import { ArrayBufferView } from "arraybuffer"; - -// @ts-ignore: decorator -@unsafe @global -export function __allocArray(length: i32, alignLog2: usize, id: u32, data: usize = 0): usize { - var array = __alloc(offsetof(), id); - var bufferSize = length << alignLog2; - var buffer = __alloc(bufferSize, idof()); - store(array, __retain(buffer), offsetof("data")); - changetype(array).dataStart = buffer; - changetype(array).dataLength = bufferSize; - store(changetype(array), length, offsetof("length_")); - if (data) memory.copy(buffer, data, bufferSize); - return array; -} diff --git a/std/assembly/rt/index-full.ts b/std/assembly/rt/index-full.ts index f4af0c78..16acb279 100644 --- a/std/assembly/rt/index-full.ts +++ b/std/assembly/rt/index-full.ts @@ -1,3 +1,3 @@ export { __alloc, __realloc, __free } from "rt/tlsf"; -export { __retain, __release, __collect } from "rt/purerc"; -export { __instanceof, __typeinfo } from "rt/common"; +export { __retain, __release, __collect } from "rt/pure"; +export { __instanceof, __typeinfo } from "rt"; diff --git a/std/assembly/rt/index-stub.ts b/std/assembly/rt/index-stub.ts index 6822a518..01fffcb8 100644 --- a/std/assembly/rt/index-stub.ts +++ b/std/assembly/rt/index-stub.ts @@ -1,2 +1,2 @@ export { __alloc, __realloc, __free, __retain, __release, __collect } from "rt/stub"; -export { __instanceof, __typeinfo } from "rt/common"; +export { __instanceof, __typeinfo } from "rt"; diff --git a/std/assembly/rt/purerc.ts b/std/assembly/rt/pure.ts similarity index 98% rename from std/assembly/rt/purerc.ts rename to std/assembly/rt/pure.ts index 21767db1..6083ef3d 100644 --- a/std/assembly/rt/purerc.ts +++ b/std/assembly/rt/pure.ts @@ -61,7 +61,7 @@ import { RTTIFlags } from "common/rtti"; @inline const VISIT_COLLECTWHITE = 5; // @ts-ignore: decorator -@global +@global @unsafe @builtin function __visit(ref: usize, cookie: i32): void { if (ref < HEAP_BASE) return; var s = changetype(ref - BLOCK_OVERHEAD); @@ -243,20 +243,20 @@ function collectWhite(s: Block): void { } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __retain(ref: usize): usize { if (ref > HEAP_BASE) increment(changetype(ref - BLOCK_OVERHEAD)); return ref; } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __release(ref: usize): void { if (ref > HEAP_BASE) decrement(changetype(ref - BLOCK_OVERHEAD)); } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __retainRelease(ref: usize, oldRef: usize): usize { if (ref != oldRef) { let heapBase = HEAP_BASE; diff --git a/std/assembly/rt/stub.ts b/std/assembly/rt/stub.ts index 54d49087..3dfc6023 100644 --- a/std/assembly/rt/stub.ts +++ b/std/assembly/rt/stub.ts @@ -9,7 +9,7 @@ var startOffset: usize = (HEAP_BASE + AL_MASK) & ~AL_MASK; var offset: usize = startOffset; // @ts-ignore: decorator -@unsafe @global +@unsafe @global @builtin export function __alloc(size: usize, id: u32): usize { if (size > BLOCK_MAXSIZE) unreachable(); var ptr = offset + BLOCK_OVERHEAD; @@ -30,7 +30,7 @@ export function __alloc(size: usize, id: u32): usize { } // @ts-ignore: decorator -@unsafe @global +@unsafe @global @builtin export function __realloc(ref: usize, size: usize): usize { var block = changetype(ref - BLOCK_OVERHEAD); var oldSize = block.rtSize; @@ -45,7 +45,7 @@ export function __realloc(ref: usize, size: usize): usize { } // @ts-ignore: decorator -@unsafe @global +@unsafe @global @builtin export function __free(ref: usize): void { } @@ -56,28 +56,28 @@ export function __free(ref: usize): void { // } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __retain(ref: usize): usize { return ref; } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __release(ref: usize): void { } // @ts-ignore: decorator -@global @unsafe -function __visit(ref: usize, cookie: u32): void { +@global @unsafe @builtin +export function __visit(ref: usize, cookie: u32): void { } // @ts-ignore: decorator -@global @unsafe -function __retainRelease(ref: usize, oldRef: usize): usize { +@global @unsafe @builtin +export function __retainRelease(ref: usize, oldRef: usize): usize { return ref; } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __collect(): void { } diff --git a/std/assembly/rt/tlsf.ts b/std/assembly/rt/tlsf.ts index 165136f1..faab486b 100644 --- a/std/assembly/rt/tlsf.ts +++ b/std/assembly/rt/tlsf.ts @@ -534,7 +534,7 @@ export function freeBlock(root: Root, block: Block): void { } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __alloc(size: usize, id: u32): usize { var root = ROOT; if (!root) { @@ -547,7 +547,7 @@ export function __alloc(size: usize, id: u32): usize { } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __realloc(ref: usize, size: usize): usize { if (DEBUG) assert(ROOT); // must be initialized assert(ref != 0 && !(ref & AL_MASK)); // must exist and be aligned @@ -555,7 +555,7 @@ export function __realloc(ref: usize, size: usize): usize { } // @ts-ignore: decorator -@global @unsafe +@global @unsafe @builtin export function __free(ref: usize): void { if (DEBUG) assert(ROOT); // must be initialized assert(ref != 0 && !(ref & AL_MASK)); // must exist and be aligned diff --git a/tests/.gitignore b/tests/.gitignore index d873de2f..2b6e30ed 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,2 +1,3 @@ *.wasm *.wasm.map +temp.* diff --git a/tests/compiler.js b/tests/compiler.js index 229e524a..b478ac36 100644 --- a/tests/compiler.js +++ b/tests/compiler.js @@ -152,6 +152,8 @@ tests.forEach(filename => { Array.prototype.push.apply(cmd, asc_flags); if (args.createBinary) cmd.push("--binaryFile", basename + ".untouched.wasm"); + else + cmd.push("--binaryFile", "temp.wasm"); asc.main(cmd, { stdout: stdout, stderr: stderr @@ -212,7 +214,7 @@ tests.forEach(filename => { "--validate", "--measure", "--binaryFile", // -> stdout - // "-O3" + "-O3" ]; if (asc_flags) Array.prototype.push.apply(cmd, asc_flags); @@ -229,127 +231,18 @@ tests.forEach(filename => { failedTests.push(basename); return 1; } - - // Instantiate - try { - let memory = new WebAssembly.Memory({ initial: 10 }); - let exports = {}; - - function getString(ptr) { - const RUNTIME_HEADER_SIZE = 16; - if (!ptr) return "null"; - var U32 = new Uint32Array(exports.memory ? exports.memory.buffer : memory.buffer); - var U16 = new Uint16Array(exports.memory ? exports.memory.buffer : memory.buffer); - var len16 = U32[(ptr - RUNTIME_HEADER_SIZE + 12) >>> 2] >>> 1; - var ptr16 = ptr >>> 1; - return String.fromCharCode.apply(String, U16.subarray(ptr16, ptr16 + len16)); - } - - var binaryBuffer = stdout.toBuffer(); - if (args.createBinary) - fs.writeFileSync(path.join(basedir, basename + ".optimized.wasm"), binaryBuffer); - let rtrace = new Map(); - let rtraceEnabled = false; - let rtraceRetains = 0; - let rtraceReleases = 0; - let rtraceFrees = 0; - let rtraceUsesAfterFree = 0; - let runTime = asc.measure(() => { - exports = new WebAssembly.Instance(new WebAssembly.Module(binaryBuffer), { - env: { - memory, - abort: function(msg, file, line, column) { - console.log(colorsUtil.red(" abort: " + getString(msg) + " at " + getString(file) + ":" + line + ":" + column)); - }, - trace: function(msg, n) { - console.log(" trace: " + getString(msg) + (n ? " " : "") + Array.prototype.slice.call(arguments, 2, 2 + n).join(", ")); - }, - externalFunction: function() { }, - externalConstant: 1 - }, - math: { - mod: function(a, b) { return a % b; } - }, - Math, - Date, - - // tests/declare - declare: { - externalFunction: function() { }, - externalConstant: 1, - "my.externalFunction": function() { }, - "my.externalConstant": 2 - }, - - // tests/external - external: { - foo: function() {}, - "foo.bar": function() {}, - bar: function() {} - }, - foo: { - baz: function() {}, - "var": 3 - }, - - // runtime tracing - rtrace: { - retain: function(s) { - ++rtraceRetains; - let rc = rtrace.get(s) | 0; - rtrace.set(s, ++rc); - // console.log(" retain(" + s + ", RC=" + rc + ")"); - rtraceEnabled = true; - }, - release: function(s) { - ++rtraceReleases; - let rc = rtrace.get(s) | 0; - if (--rc <= 0) { - rtrace.delete(s); - if (rc < 0) { - ++rtraceUsesAfterFree; - console.log(" USEAFTERFREE(" + s + ", RC=" + rc + ")"); - } - } else rtrace.set(s, rc); - // console.log(" release(" + s + ", RC=" + rc + ")"); - rtraceEnabled = true; - }, - free: function(s) { - ++rtraceFrees; - let rc = rtrace.get(s) | 0; - // if (rc != 0) console.log(" free(" + s + ", RC=" + rc + ")"); - rtrace.delete(s); - rtraceEnabled = true; - } - } - }).exports; - if (exports.main) { - console.log(colorsUtil.white(" [main]")); - var code = exports.main(); - console.log(colorsUtil.white(" [exit " + code + "]\n")); - } - if (rtraceEnabled) { - console.log("- " + "rtrace: " + rtraceRetains + " retains, " + rtraceReleases + " releases, " + rtraceFrees + " explicit frees"); - if (rtrace.size || rtraceUsesAfterFree) { - let msg = "memory leak detected: " + rtrace.size + " leaking, " + rtraceUsesAfterFree + " uses after free"; - console.log(" " + colorsUtil.red("ERROR: ") + msg); - failed = true; - failedMessages.set(basename, msg); - } - console.log(); - } - }); - console.log("- " + colorsUtil.green("instantiate OK") + " (" + asc.formatTime(runTime) + ")"); - console.log("\n " + Object.keys(exports).map(key => { - return "[" + (typeof exports[key]).substring(0, 3) + "] " + key + " = " + exports[key] - }).join("\n ")); - } catch (e) { - console.log("- " + colorsUtil.red("instantiate ERROR: ") + e.stack); + let untouchedBuffer = fs.readFileSync(path.join(basedir, "temp.wasm")); + let optimizedBuffer = stdout.toBuffer(); + if (!testInstantiate(basename, untouchedBuffer, "untouched")) { failed = true; - failedMessages.set(basename, e.message); + failedTests.push(basename); + } else { + console.log(); + if (!testInstantiate(basename, optimizedBuffer, "optimized")) { + failed = true; + failedTests.push(basename); + } } - - if (failed) failedTests.push(basename); console.log(); }); if (failed) return 1; @@ -377,3 +270,127 @@ if (failedTests.length) { if (!process.exitCode) { console.log("[ " + colorsUtil.white("OK") + " ]"); } + +function testInstantiate(basename, binaryBuffer, name) { + var failed = false; + try { + let memory = new WebAssembly.Memory({ initial: 10 }); + let exports = {}; + + function getString(ptr) { + const RUNTIME_HEADER_SIZE = 16; + if (!ptr) return "null"; + var U32 = new Uint32Array(exports.memory ? exports.memory.buffer : memory.buffer); + var U16 = new Uint16Array(exports.memory ? exports.memory.buffer : memory.buffer); + var len16 = U32[(ptr - RUNTIME_HEADER_SIZE + 12) >>> 2] >>> 1; + var ptr16 = ptr >>> 1; + return String.fromCharCode.apply(String, U16.subarray(ptr16, ptr16 + len16)); + } + + let rtrace = new Map(); + let rtraceEnabled = false; + let rtraceRetains = 0; + let rtraceReleases = 0; + let rtraceFrees = 0; + let rtraceUsesAfterFree = 0; + + let runTime = asc.measure(() => { + exports = new WebAssembly.Instance(new WebAssembly.Module(binaryBuffer), { + env: { + memory, + abort: function(msg, file, line, column) { + console.log(colorsUtil.red(" abort: " + getString(msg) + " at " + getString(file) + ":" + line + ":" + column)); + }, + trace: function(msg, n) { + console.log(" trace: " + getString(msg) + (n ? " " : "") + Array.prototype.slice.call(arguments, 2, 2 + n).join(", ")); + }, + externalFunction: function() { }, + externalConstant: 1 + }, + math: { + mod: function(a, b) { return a % b; } + }, + Math, + Date, + + // tests/declare + declare: { + externalFunction: function() { }, + externalConstant: 1, + "my.externalFunction": function() { }, + "my.externalConstant": 2 + }, + + // tests/external + external: { + foo: function() {}, + "foo.bar": function() {}, + bar: function() {} + }, + foo: { + baz: function() {}, + "var": 3 + }, + + // runtime tracing + rtrace: { + retain: function(s) { + ++rtraceRetains; + let rc = rtrace.get(s) | 0; + rtrace.set(s, ++rc); + // console.log(" retain(" + s + ", RC=" + rc + ")"); + rtraceEnabled = true; + }, + release: function(s) { + ++rtraceReleases; + let rc = rtrace.get(s) | 0; + if (--rc <= 0) { + rtrace.delete(s); + if (rc < 0) { + ++rtraceUsesAfterFree; + console.log(" USEAFTERFREE(" + s + ", RC=" + rc + ")"); + } + } else rtrace.set(s, rc); + // console.log(" release(" + s + ", RC=" + rc + ")"); + rtraceEnabled = true; + }, + free: function(s) { + ++rtraceFrees; + let rc = rtrace.get(s) | 0; + // if (rc != 0) console.log(" free(" + s + ", RC=" + rc + ")"); + rtrace.delete(s); + rtraceEnabled = true; + } + } + }).exports; + if (exports.main) { + console.log(colorsUtil.white(" [main]")); + var code = exports.main(); + console.log(colorsUtil.white(" [exit " + code + "]\n")); + } + }); + if (rtraceEnabled) { + if (rtrace.size || rtraceUsesAfterFree) { + let msg = "memory leak detected: " + rtrace.size + " leaking, " + rtraceUsesAfterFree + " uses after free"; + console.log("- " + colorsUtil.red("rtrace " + name + " ERROR: ") + msg); + failed = true; + failedMessages.set(basename, msg); + } + } + if (!failed) { + console.log("- " + colorsUtil.green("instantiate " + name + " OK") + " (" + asc.formatTime(runTime) + ")"); + if (rtraceEnabled) { + console.log("\n " + rtraceRetains + " retains\n " + rtraceReleases + " releases\n " + rtraceFrees + " explicit frees"); + } + console.log("\n " + Object.keys(exports).map(key => { + return "[" + (typeof exports[key]).substring(0, 3) + "] " + key + " = " + exports[key] + }).join("\n ")); + return true; + } + } catch (e) { + console.log("- " + colorsUtil.red("instantiate " + name + " ERROR: ") + e.stack); + failed = true; + failedMessages.set(basename, e.message); + } + return false; +} diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index 71f240b0..d2cd3a8e 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -3,9 +3,7 @@ (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00o\00.\00t\00s\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 8) "\n\00\00\00\01\00\00\00\10\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)) @@ -13,26 +11,19 @@ (start $start) (func $start:do (; 1 ;) (type $FUNCSIG$v) (local $0 i32) - block $break|0 - loop $continue|0 - block - global.get $do/n - i32.const 1 - i32.sub - global.set $do/n - global.get $do/m - i32.const 1 - i32.add - global.set $do/m - end - global.get $do/n - br_if $continue|0 - end + loop $continue|0 + global.get $do/n + i32.const 1 + i32.sub + global.set $do/n + global.get $do/m + i32.const 1 + i32.add + global.set $do/m + global.get $do/n + br_if $continue|0 end global.get $do/n - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -43,8 +34,7 @@ end global.get $do/m i32.const 10 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -55,24 +45,18 @@ end i32.const 10 global.set $do/n - block $break|1 - loop $continue|1 - nop - block (result i32) - global.get $do/n - local.tee $0 - i32.const 1 - i32.sub - global.set $do/n - local.get $0 - end - br_if $continue|1 - end + loop $continue|1 + global.get $do/n + local.tee $0 + i32.const 1 + i32.sub + global.set $do/n + local.get $0 + br_if $continue|1 end global.get $do/n i32.const -1 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -85,66 +69,51 @@ global.set $do/n i32.const 0 global.set $do/m - block $break|2 - loop $continue|2 - block - global.get $do/n - i32.const 1 - i32.sub - global.set $do/n - global.get $do/m - i32.const 1 - i32.add - global.set $do/m - block $break|3 - loop $continue|3 - block - global.get $do/n - i32.const 1 - i32.sub - global.set $do/n - global.get $do/o - i32.const 1 - i32.add - global.set $do/o - end - global.get $do/n - br_if $continue|3 - end - end - global.get $do/n - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 24 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $do/o - i32.const 9 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 25 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - end + loop $continue|2 + global.get $do/n + i32.const 1 + i32.sub + global.set $do/n + global.get $do/m + i32.const 1 + i32.add + global.set $do/m + loop $continue|3 global.get $do/n - br_if $continue|2 + i32.const 1 + i32.sub + global.set $do/n + global.get $do/o + i32.const 1 + i32.add + global.set $do/o + global.get $do/n + br_if $continue|3 end + global.get $do/n + if + i32.const 0 + i32.const 24 + i32.const 24 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $do/o + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 24 + i32.const 25 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $do/n + br_if $continue|2 end global.get $do/n - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -155,8 +124,7 @@ end global.get $do/m i32.const 1 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -167,8 +135,7 @@ end global.get $do/o i32.const 9 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -182,5 +149,6 @@ call $start:do ) (func $null (; 3 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/empty.optimized.wat b/tests/compiler/empty.optimized.wat index 29ee81b8..bb456a11 100644 --- a/tests/compiler/empty.optimized.wat +++ b/tests/compiler/empty.optimized.wat @@ -1,9 +1,8 @@ (module (type $FUNCSIG$v (func)) (memory $0 0) - (table $0 1 funcref) - (elem (i32.const 0) $null) (export "memory" (memory $0)) (func $null (; 0 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/rc/global-init.optimized.wat b/tests/compiler/rc/global-init.optimized.wat index b6d82717..022f6a92 100644 --- a/tests/compiler/rc/global-init.optimized.wat +++ b/tests/compiler/rc/global-init.optimized.wat @@ -1,156 +1,69 @@ (module - (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$v (func)) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) (memory $0 1) - (data (i32.const 8) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00") - (data (i32.const 24) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 80) "\1e\00\00\00\01\00\00\00\10\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 128) "$\00\00\00\01\00\00\00\10\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 184) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 240) "(\00\00\00\01\00\00\00\10\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 296) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 12) "\01\00\00\00\10") + (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 72) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 120) "$\00\00\00\01\00\00\00\10\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 176) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 216) "(\00\00\00\01\00\00\00\10\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 272) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") (global $rc/global-init/a (mut i32) (i32.const 0)) (global $rc/global-init/b (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 296)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 432)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $start) - (func $rc/global-init/getRef (; 4 ;) (type $FUNCSIG$i) (result i32) + (func $start (; 3 ;) (type $FUNCSIG$v) i32.const 24 - call $~lib/rt/purerc/__retain - ) - (func $start:rc/global-init (; 5 ;) (type $FUNCSIG$v) - call $rc/global-init/getRef global.set $rc/global-init/a - call $rc/global-init/getRef + i32.const 24 global.set $rc/global-init/b - i32.const 0 global.get $rc/global-init/a - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease global.set $rc/global-init/a - i32.const 0 global.get $rc/global-init/b - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease global.set $rc/global-init/b ) - (func $start (; 6 ;) (type $FUNCSIG$v) - call $start:rc/global-init - ) - (func $~lib/rt/purerc/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 40 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 40 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/tlsf/removeBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (; 4 ;) (type $FUNCSIG$vii) (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 + local.tee $3 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 275 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 -4 + i32.and + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -159,50 +72,43 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 277 i32.const 13 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $4 - local.get $3 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $2 + i32.const 0 else + local.get $2 i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 - local.get $3 - local.get $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $5 - local.get $4 - i32.const 8 - i32.const 1 + local.set $2 + local.get $3 + i32.const 7 i32.sub - i32.sub - local.set $4 end - local.get $4 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 16 i32.lt_u else @@ -211,118 +117,83 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 290 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 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 if - local.get $6 - local.get $7 + local.get $5 + local.get $4 i32.store offset=20 end - local.get $7 + local.get $4 if - local.get $7 - local.get $6 + local.get $4 + local.get $5 i32.store offset=16 end + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 local.get $1 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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.eq + if + local.get $3 i32.const 4 i32.shl - local.get $8 + local.get $2 i32.add i32.const 2 i32.shl + local.get $0 i32.add - i32.load offset=96 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.0 - 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 - end - local.get $7 + local.get $4 + i32.store offset=96 + local.get $4 i32.eqz if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -332,24 +203,18 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 5 ;) (type $FUNCSIG$vii) (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 96 + i32.const 88 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -357,56 +222,42 @@ end local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $3 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 205 i32.const 13 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - local.set $4 - local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $1 i32.load - local.set $5 - local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 i32.const 1 i32.and if - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.const 16 i32.add local.get $5 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.add - local.set $3 - local.get $3 + local.tee $2 i32.const 1073741808 i32.lt_u if @@ -414,110 +265,91 @@ local.get $4 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $2 + local.get $3 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $3 i32.store - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 + 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 $2 + local.get $3 i32.const 2 i32.and if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 + local.get $1 + i32.const 4 + i32.sub i32.load - local.set $6 - local.get $6 + local.tee $2 + i32.load + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 226 i32.const 15 call $~lib/builtins/abort unreachable end local.get $6 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.const 16 i32.add - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.add - local.set $7 - local.get $7 + local.tee $7 i32.const 1073741808 i32.lt_u - if + if (result i32) local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $3 + local.get $2 local.get $6 i32.const 3 i32.and local.get $7 i32.or - local.tee $2 + local.tee $3 i32.store - local.get $3 - local.set $1 + local.get $2 + else + local.get $1 end + local.set $1 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 + local.get $3 + i32.const -4 i32.and - local.set $8 - local.get $8 + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -526,23 +358,22 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 241 i32.const 13 call $~lib/builtins/abort unreachable end + local.get $4 local.get $1 i32.const 16 i32.add - local.get $8 + local.get $2 i32.add - local.get $4 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 96 + i32.const 88 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -553,44 +384,37 @@ i32.sub local.get $1 i32.store - local.get $8 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $9 - local.get $8 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $10 + local.set $4 + i32.const 0 else + local.get $2 i32.const 31 - local.get $8 + local.get $2 i32.clz i32.sub - local.set $9 - local.get $8 - local.get $9 + local.tee $2 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $10 - local.get $9 - i32.const 8 - i32.const 1 + local.set $4 + local.get $2 + i32.const 7 i32.sub - i32.sub - local.set $9 end - local.get $9 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $4 i32.const 16 i32.lt_u else @@ -599,116 +423,81 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 258 i32.const 13 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $11 + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.set $2 local.get $1 i32.const 0 i32.store offset=16 local.get $1 - local.get $11 + local.get $2 i32.store offset=20 - local.get $11 + local.get $2 if - local.get $11 + local.get $2 local.get $1 i32.store offset=16 end - block $~lib/rt/tlsf/SETHEAD|inlined.1 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $1 + i32.store offset=96 local.get $0 local.get $0 i32.load i32.const 1 - local.get $9 + local.get $3 i32.shl i32.or i32.store - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 ) - (func $~lib/rt/tlsf/freeBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $2 i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -725,1057 +514,248 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 + (func $~lib/rt/__typeinfo (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.eqz if (result i32) - i32.const 1 - else local.get $0 - local.get $1 + i32.const 272 i32.load i32.gt_u + else + i32.const 1 end if - i32.const 144 - i32.const 200 - i32.const 55 + i32.const 136 + i32.const 192 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/tlsf/addMemory (; 13 ;) (type $FUNCSIG$iiii) (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 96 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 96 - i32.const 394 - 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 96 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 14 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 256 - i32.const 96 - i32.const 446 - 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 (; 16 ;) (type $FUNCSIG$iii) (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 96 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 96 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 18 ;) (type $FUNCSIG$viii) (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 96 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 96 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 96 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 + i32.shl + i32.const 272 i32.add + i32.load ) - (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 8 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 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 + local.get $0 + local.get $1 i32.eq - if - br $~lib/util/memory/memmove|inlined.0 - end - local.get $5 - local.get $4 + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 i32.lt_u if - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 + loop $continue|0 + local.get $0 + i32.const 7 + i32.and if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + 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 $continue|0 + end + end + loop $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 $continue|1 end end end + loop $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 $continue|2 + end + end else - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 + loop $continue|3 + local.get $0 local.get $3 + i32.add + i32.const 7 + i32.and if - local.get $5 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 local.get $3 i32.const 1 i32.sub local.tee $3 i32.add - local.get $4 + local.get $1 local.get $3 i32.add i32.load8_u i32.store8 - br $continue|5 + br $continue|3 end end + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end end end end ) - (func $~lib/rt/purerc/growRoots (; 22 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 9 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/CUR - local.get $0 - i32.sub - local.set $1 - local.get $1 - i32.const 2 - i32.mul + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS local.tee $2 - i32.const 64 - i32.const 2 + i32.sub + local.tee $1 + i32.const 1 i32.shl - local.tee $3 - local.get $2 - local.get $3 + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 i32.gt_u select - local.set $4 - local.get $4 - i32.const 0 + local.tee $3 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $5 - local.get $0 + local.tee $0 + local.get $2 local.get $1 call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 10 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1784,26 +764,23 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 11 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $2 i32.const 268435455 i32.and - local.set $2 + local.set $1 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 i32.const 40 @@ -1812,7 +789,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 1 i32.eq if @@ -1820,29 +797,23 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members - local.get $1 + call $~lib/rt/__visit_members + local.get $2 i32.const -2147483648 i32.and - i32.eqz 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 - 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 + local.get $1 i32.const 0 - i32.gt_u - i32.eqz + i32.le_u if i32.const 0 i32.const 40 @@ -1853,78 +824,58 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and - i32.eqz if local.get $0 - i32.const -2147483648 - i32.const 805306368 - i32.or - local.get $2 + 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/purerc/appendRoot + 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/purerc/__retainRelease (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/rt/pure/__retainRelease (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - local.get $1 - i32.ne if - global.get $~lib/builtins/HEAP_BASE - local.set $2 local.get $0 - local.get $2 + i32.const 408 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/increment - end - local.get $1 - local.get $2 - i32.gt_u - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end end - local.get $0 + i32.const 0 ) - (func $~lib/rt/purerc/markGray (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -1932,9 +883,7 @@ if local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 268435456 i32.or @@ -1943,32 +892,27 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and - i32.const 0 - i32.or i32.store offset=4 local.get $0 i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -1981,13 +925,11 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 536870912 i32.or @@ -1996,16 +938,15 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 536870912 @@ -2023,17 +964,15 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) + (func $~lib/rt/pure/__visit (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 408 i32.lt_u if return @@ -2041,205 +980,674 @@ local.get $0 i32.const 16 i32.sub - local.set $2 + local.set $0 block $break|0 block $case5|0 block $case4|0 block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if 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 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end br $case5|0 end - block - local.get $2 - call $~lib/rt/purerc/decrement - br $break|0 - unreachable - end - unreachable - end - block - 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 40 - i32.const 74 - 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/purerc/markGray + 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 40 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/scan + 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 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 40 - i32.const 85 - 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/purerc/scanBlack 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 40 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/collectWhite + 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 - unreachable + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 40 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $switch$1$case$16 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 1 + i32.sub + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$default end unreachable end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/tlsf/addMemory (; 19 ;) (type $FUNCSIG$viii) (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.eqz + i32.const 88 + i32.const 384 + 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 40 - i32.const 96 - i32.const 24 + i32.const 88 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 88 + i32.const 406 + i32.const 4 call $~lib/builtins/abort unreachable end end - ) - (func $~lib/builtins/__visit_members (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return end - block $switch$1$leave - block $switch$1$case$16 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$default - end - block - block - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - return - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - end - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - 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/initializeRoot (; 20 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if unreachable end + i32.const 416 + i32.const 0 + i32.store + i32.const 1984 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 416 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 416 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 416 + i32.const 2000 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 416 + global.set $~lib/rt/tlsf/ROOT ) - (func $null (; 32 ;) (type $FUNCSIG$v) + (func $~lib/rt/tlsf/prepareSize (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 232 + i32.const 88 + i32.const 446 + 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 (; 22 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 88 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 24 ;) (type $FUNCSIG$viii) (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 88 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 88 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 88 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $1 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $1 + end + local.get $1 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 16 + i32.add + ) + (func $null (; 27 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/rc/global-init.untouched.wat b/tests/compiler/rc/global-init.untouched.wat index b6d82717..67b31436 100644 --- a/tests/compiler/rc/global-init.untouched.wat +++ b/tests/compiler/rc/global-init.untouched.wat @@ -6,35 +6,35 @@ (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) (memory $0 1) (data (i32.const 8) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00") - (data (i32.const 24) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 80) "\1e\00\00\00\01\00\00\00\10\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 128) "$\00\00\00\01\00\00\00\10\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 184) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 240) "(\00\00\00\01\00\00\00\10\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 296) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\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 72) "\1e\00\00\00\01\00\00\00\10\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 120) "$\00\00\00\01\00\00\00\10\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 176) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 216) "(\00\00\00\01\00\00\00\10\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 272) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) (global $rc/global-init/a (mut i32) (i32.const 0)) (global $rc/global-init/b (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 296)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 432)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 272)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 408)) (export "memory" (memory $0)) (start $start) (func $rc/global-init/getRef (; 4 ;) (type $FUNCSIG$i) (result i32) i32.const 24 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) (func $start:rc/global-init (; 5 ;) (type $FUNCSIG$v) call $rc/global-init/getRef @@ -43,17 +43,17 @@ global.set $rc/global-init/b i32.const 0 global.get $rc/global-init/a - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease global.set $rc/global-init/a i32.const 0 global.get $rc/global-init/b - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease global.set $rc/global-init/b ) (func $start (; 6 ;) (type $FUNCSIG$v) call $start:rc/global-init ) - (func $~lib/rt/purerc/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -86,7 +86,7 @@ i32.add i32.store offset=4 local.get $0 - call $~lib/rt/purerc/onIncrement + call $~lib/rt/pure/onIncrement local.get $0 i32.load i32.const 1 @@ -102,15 +102,15 @@ unreachable end ) - (func $~lib/rt/purerc/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/increment + call $~lib/rt/pure/increment end local.get $0 ) @@ -134,7 +134,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 275 i32.const 13 call $~lib/builtins/abort @@ -159,7 +159,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 277 i32.const 13 call $~lib/builtins/abort @@ -211,7 +211,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 290 i32.const 13 call $~lib/builtins/abort @@ -349,7 +349,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -364,7 +364,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 205 i32.const 13 call $~lib/builtins/abort @@ -463,7 +463,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 226 i32.const 15 call $~lib/builtins/abort @@ -526,7 +526,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 241 i32.const 13 call $~lib/builtins/abort @@ -542,7 +542,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -599,7 +599,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 258 i32.const 13 call $~lib/builtins/abort @@ -708,7 +708,7 @@ i32.eqz if i32.const 0 - i32.const 96 + i32.const 88 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -725,9 +725,9 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 i32.eqz @@ -740,9 +740,9 @@ i32.gt_u end if - i32.const 144 - i32.const 200 - i32.const 55 + i32.const 136 + i32.const 192 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable @@ -754,768 +754,7 @@ i32.add i32.load ) - (func $~lib/rt/tlsf/addMemory (; 13 ;) (type $FUNCSIG$iiii) (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 96 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 96 - i32.const 394 - 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 96 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 14 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 256 - i32.const 96 - i32.const 446 - 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 (; 16 ;) (type $FUNCSIG$iii) (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 96 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 96 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 18 ;) (type $FUNCSIG$viii) (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 96 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 96 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 96 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1721,16 +960,16 @@ end end ) - (func $~lib/rt/purerc/growRoots (; 22 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 14 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.get $0 i32.sub local.set $1 @@ -1756,26 +995,26 @@ local.get $1 call $~lib/memory/memory.copy local.get $5 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $5 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.get $4 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $1 local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1784,9 +1023,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1797,7 +1036,7 @@ i32.and local.set $2 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 @@ -1820,7 +1059,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $1 i32.const -2147483648 i32.and @@ -1853,7 +1092,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and i32.eqz @@ -1873,7 +1112,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end else local.get $0 @@ -1890,13 +1129,13 @@ end end ) - (func $~lib/rt/purerc/__retainRelease (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/pure/__retainRelease (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 i32.ne if - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE local.set $2 local.get $0 local.get $2 @@ -1905,7 +1144,7 @@ local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/increment + call $~lib/rt/pure/increment end local.get $1 local.get $2 @@ -1914,12 +1153,12 @@ local.get $1 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end end local.get $0 ) - (func $~lib/rt/purerc/markGray (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1943,10 +1182,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -1961,9 +1200,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1981,7 +1220,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -1996,11 +1235,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -2023,17 +1262,17 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -2075,7 +1314,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -2104,7 +1343,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -2112,7 +1351,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -2156,7 +1395,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -2165,7 +1404,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -2183,7 +1422,7 @@ end end ) - (func $~lib/builtins/__visit_members (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block end @@ -2226,7 +1465,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable @@ -2240,6 +1479,767 @@ unreachable end ) + (func $~lib/rt/tlsf/addMemory (; 24 ;) (type $FUNCSIG$iiii) (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 88 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 88 + i32.const 394 + 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 88 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 25 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 232 + i32.const 88 + i32.const 446 + 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 (; 27 ;) (type $FUNCSIG$iii) (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 88 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 28 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 ;) (type $FUNCSIG$viii) (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 88 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 88 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) (func $null (; 32 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 14fe8e42..9f86cf3f 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -1,1442 +1,58 @@ (module - (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) - (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) (memory $0 1) - (data (i32.const 8) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00") - (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\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 72) "(\00\00\00\01\00\00\00\10\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 128) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 184) "$\00\00\00\01\00\00\00\10\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 240) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 296) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 12) "\01\00\00\00\10") + (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 72) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 120) "$\00\00\00\01\00\00\00\10\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 176) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 216) "(\00\00\00\01\00\00\00\10\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 272) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 296)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 440)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $start) - (func $rc/local-init/getRef (; 4 ;) (type $FUNCSIG$i) (result i32) + (func $start (; 4 ;) (type $FUNCSIG$v) i32.const 24 - call $~lib/rt/purerc/__retain - ) - (func $rc/local-init/Ref#constructor (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.eqz - if - i32.const 0 - i32.const 17 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - ) - (func $start:rc/local-init (; 6 ;) (type $FUNCSIG$v) - (local $0 i32) - block - i32.const 24 - call $~lib/rt/purerc/__retain - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - call $rc/local-init/getRef - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - i32.const 0 - call $rc/local-init/Ref#constructor - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - ) - (func $start (; 7 ;) (type $FUNCSIG$v) - call $start:rc/local-init - ) - (func $~lib/rt/tlsf/removeBlock (; 8 ;) (type $FUNCSIG$vii) (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 40 - i32.const 275 - 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 40 - i32.const 277 - 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 40 - i32.const 290 - 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 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.1 - 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 - end - local.get $7 - i32.eqz - if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 - 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 (; 9 ;) (type $FUNCSIG$vii) (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 40 - i32.const 203 - 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 40 - i32.const 205 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 - i32.load - local.set $5 - end - end - local.get $2 - i32.const 2 - i32.and - if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 - i32.load - local.set $6 - local.get $6 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 40 - i32.const 226 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $6 - 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 $3 - call $~lib/rt/tlsf/removeBlock - local.get $3 - local.get $6 - i32.const 3 - i32.and - local.get $7 - i32.or - local.tee $2 - i32.store - local.get $3 - 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 40 - i32.const 241 - 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 40 - i32.const 242 - 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 40 - i32.const 258 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $11 - local.get $1 + call $~lib/rt/pure/__retain + call $~lib/rt/pure/__release + i32.const 24 + call $~lib/rt/pure/__retain + call $~lib/rt/pure/__release 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 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $9 - i32.shl - i32.or - i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end + i32.const 17 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + call $~lib/rt/pure/__release ) - (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (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 40 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 40 - i32.const 394 - 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 40 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 88 - i32.const 40 - i32.const 446 - 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 (; 13 ;) (type $FUNCSIG$iii) (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 40 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 40 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 15 ;) (type $FUNCSIG$viii) (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 40 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 40 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 40 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/rt/purerc/increment (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/increment (; 5 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor + local.tee $1 + i32.const -268435456 i32.and local.get $1 i32.const 1 i32.add - i32.const 268435455 - i32.const -1 - i32.xor + i32.const -268435456 i32.and - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 144 + i32.const 40 i32.const 103 i32.const 2 call $~lib/builtins/abort @@ -1448,47 +64,493 @@ i32.add i32.store offset=4 local.get $0 - call $~lib/rt/purerc/onIncrement + call $~lib/rt/pure/onIncrement local.get $0 i32.load i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 - i32.const 144 + i32.const 40 i32.const 106 i32.const 13 call $~lib/builtins/abort unreachable end ) - (func $~lib/rt/purerc/__retain (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 416 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/increment + call $~lib/rt/pure/increment end local.get $0 ) - (func $~lib/rt/tlsf/freeBlock (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $3 i32.const 1 i32.and i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 275 + 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 40 + i32.const 88 + i32.const 277 + 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 88 + i32.const 290 + 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 $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.get $1 + i32.eq + if + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $4 + i32.store offset=96 + local.get $4 + i32.eqz + if + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 (; 8 ;) (type $FUNCSIG$vii) (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 88 + i32.const 203 + 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 88 + i32.const 205 + 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 $3 + i32.const 3 + i32.and + local.get $2 + 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 88 + i32.const 226 + 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 (result i32) + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $3 + i32.store + local.get $2 + else + local.get $1 + end + local.set $1 + 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 88 + i32.const 241 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 88 + i32.const 242 + 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 88 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/freeBlock (; 9 ;) (type $FUNCSIG$vii) (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 88 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -1505,296 +567,249 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 + (func $~lib/rt/__typeinfo (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.eqz if (result i32) - i32.const 1 - else local.get $0 - local.get $1 + i32.const 272 i32.load i32.gt_u + else + i32.const 1 end if - i32.const 200 - i32.const 256 - i32.const 55 + i32.const 136 + i32.const 192 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 - i32.const 8 - i32.mul + i32.const 3 + i32.shl + i32.const 272 i32.add i32.load ) - (func $~lib/memory/memory.copy (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 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 + local.get $0 + local.get $1 i32.eq - if - br $~lib/util/memory/memmove|inlined.0 - end - local.get $5 - local.get $4 + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 i32.lt_u if - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 + loop $continue|0 + local.get $0 + i32.const 7 + i32.and if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + 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 $continue|0 + end + end + loop $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 $continue|1 end end end + loop $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 $continue|2 + end + end else - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 + loop $continue|3 + local.get $0 local.get $3 + i32.add + i32.const 7 + i32.and if - local.get $5 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 local.get $3 i32.const 1 i32.sub local.tee $3 i32.add - local.get $4 + local.get $1 local.get $3 i32.add i32.load8_u i32.store8 - br $continue|5 + br $continue|3 end end + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end end end end ) - (func $~lib/rt/purerc/growRoots (; 23 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 12 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/CUR - local.get $0 - i32.sub - local.set $1 - local.get $1 - i32.const 2 - i32.mul + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS local.tee $2 - i32.const 64 - i32.const 2 + i32.sub + local.tee $1 + i32.const 1 i32.shl - local.tee $3 - local.get $2 - local.get $3 + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 i32.gt_u select - local.set $4 - local.get $4 + local.tee $3 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $5 - local.get $0 + local.tee $0 + local.get $2 local.get $1 call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1803,35 +818,32 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $2 i32.const 268435455 i32.and - local.set $2 + local.set $1 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 - i32.const 144 + i32.const 40 i32.const 114 i32.const 13 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 1 i32.eq if @@ -1839,32 +851,26 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members - local.get $1 + call $~lib/rt/__visit_members + local.get $2 i32.const -2147483648 i32.and - i32.eqz 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 - 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 + local.get $1 i32.const 0 - i32.gt_u - i32.eqz + i32.le_u if i32.const 0 - i32.const 144 + i32.const 40 i32.const 123 i32.const 15 call $~lib/builtins/abort @@ -1872,60 +878,54 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and - i32.eqz if local.get $0 - i32.const -2147483648 - i32.const 805306368 - i32.or - local.get $2 + 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/purerc/appendRoot + 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/purerc/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 416 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -1933,9 +933,7 @@ if local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 268435456 i32.or @@ -1944,32 +942,27 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and - i32.const 0 - i32.or i32.store offset=4 local.get $0 i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -1982,13 +975,11 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 536870912 i32.or @@ -1997,16 +988,15 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 536870912 @@ -2024,17 +1014,15 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) + (func $~lib/rt/pure/__visit (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 416 i32.lt_u if return @@ -2042,205 +1030,673 @@ local.get $0 i32.const 16 i32.sub - local.set $2 + local.set $0 block $break|0 block $case5|0 block $case4|0 block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if 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 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end br $case5|0 end - block - local.get $2 - call $~lib/rt/purerc/decrement - br $break|0 - unreachable - end - unreachable - end - block - 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 144 - i32.const 74 - 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/purerc/markGray + 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 40 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/scan + 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 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 144 - i32.const 85 - 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/purerc/scanBlack 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 40 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/collectWhite + 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 - unreachable + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 40 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $switch$1$case$16 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 1 + i32.sub + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default end unreachable end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/tlsf/addMemory (; 22 ;) (type $FUNCSIG$viii) (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.eqz + i32.const 88 + i32.const 384 + 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 144 - i32.const 96 - i32.const 24 + i32.const 88 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 88 + i32.const 406 + i32.const 4 call $~lib/builtins/abort unreachable end end - ) - (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return end - block $switch$1$leave - block $switch$1$case$16 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default - end - block - block - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - return - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - end - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - 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/initializeRoot (; 23 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if unreachable end + i32.const 416 + i32.const 0 + i32.store + i32.const 1984 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 416 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 416 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 416 + i32.const 2000 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 416 + global.set $~lib/rt/tlsf/ROOT ) - (func $null (; 33 ;) (type $FUNCSIG$v) + (func $~lib/rt/tlsf/prepareSize (; 24 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 232 + i32.const 88 + i32.const 446 + 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 (; 25 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 88 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 26 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 27 ;) (type $FUNCSIG$viii) (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 88 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 88 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 88 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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 $null (; 30 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/rc/local-init.untouched.wat b/tests/compiler/rc/local-init.untouched.wat index 14fe8e42..770a8cb1 100644 --- a/tests/compiler/rc/local-init.untouched.wat +++ b/tests/compiler/rc/local-init.untouched.wat @@ -2,37 +2,37 @@ (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) - (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) (memory $0 1) (data (i32.const 8) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00") - (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\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 72) "(\00\00\00\01\00\00\00\10\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 128) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 184) "$\00\00\00\01\00\00\00\10\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 240) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 296) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\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 72) "\1e\00\00\00\01\00\00\00\10\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 120) "$\00\00\00\01\00\00\00\10\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 176) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 216) "(\00\00\00\01\00\00\00\10\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 272) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 296)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 440)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 272)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 416)) (export "memory" (memory $0)) (start $start) (func $rc/local-init/getRef (; 4 ;) (type $FUNCSIG$i) (result i32) i32.const 24 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) (func $rc/local-init/Ref#constructor (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 @@ -41,7 +41,7 @@ i32.const 0 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -50,29 +50,90 @@ (local $0 i32) block i32.const 24 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block call $rc/local-init/getRef local.set $0 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 0 call $rc/local-init/Ref#constructor local.set $0 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end ) (func $start (; 7 ;) (type $FUNCSIG$v) call $start:rc/local-init ) - (func $~lib/rt/tlsf/removeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/increment (; 8 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 40 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 9 ;) (type $FUNCSIG$ii) (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 $~lib/rt/tlsf/removeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -92,7 +153,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 275 i32.const 13 call $~lib/builtins/abort @@ -117,7 +178,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 277 i32.const 13 call $~lib/builtins/abort @@ -169,7 +230,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 290 i32.const 13 call $~lib/builtins/abort @@ -214,7 +275,7 @@ end i32.eq if - block $~lib/rt/tlsf/SETHEAD|inlined.1 + block $~lib/rt/tlsf/SETHEAD|inlined.0 local.get $0 local.set $11 local.get $4 @@ -251,7 +312,7 @@ i32.load offset=4 end local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 + block $~lib/rt/tlsf/SETSL|inlined.0 local.get $0 local.set $11 local.get $4 @@ -290,7 +351,7 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -307,7 +368,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -322,7 +383,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 205 i32.const 13 call $~lib/builtins/abort @@ -421,7 +482,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 226 i32.const 15 call $~lib/builtins/abort @@ -484,7 +545,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 241 i32.const 13 call $~lib/builtins/abort @@ -500,7 +561,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -557,7 +618,7 @@ i32.eqz if i32.const 0 - i32.const 40 + i32.const 88 i32.const 258 i32.const 13 call $~lib/builtins/abort @@ -594,7 +655,7 @@ local.get $1 i32.store offset=16 end - block $~lib/rt/tlsf/SETHEAD|inlined.2 + block $~lib/rt/tlsf/SETHEAD|inlined.1 local.get $0 local.set $12 local.get $9 @@ -623,7 +684,7 @@ i32.shl i32.or i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 + block $~lib/rt/tlsf/SETSL|inlined.1 local.get $0 local.set $3 local.get $9 @@ -654,841 +715,19 @@ i32.store offset=4 end ) - (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (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) + (func $~lib/rt/tlsf/freeBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $1 + i32.load + local.set $2 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.const 1 + i32.and + i32.eqz i32.eqz if i32.const 0 - i32.const 40 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 40 - i32.const 394 - 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 40 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if i32.const 88 - i32.const 40 - i32.const 446 - 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 (; 13 ;) (type $FUNCSIG$iii) (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 40 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 40 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 15 ;) (type $FUNCSIG$viii) (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 40 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 40 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 40 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/rt/purerc/increment (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 144 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 144 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/tlsf/freeBlock (; 20 ;) (type $FUNCSIG$vii) (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 40 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -1505,9 +744,9 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 i32.eqz @@ -1520,9 +759,9 @@ i32.gt_u end if - i32.const 200 - i32.const 256 - i32.const 55 + i32.const 136 + i32.const 192 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable @@ -1534,7 +773,7 @@ i32.add i32.load ) - (func $~lib/memory/memory.copy (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1740,16 +979,16 @@ end end ) - (func $~lib/rt/purerc/growRoots (; 23 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 15 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.get $0 i32.sub local.set $1 @@ -1775,26 +1014,26 @@ local.get $1 call $~lib/memory/memory.copy local.get $5 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $5 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.get $4 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $1 local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1803,9 +1042,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1816,7 +1055,7 @@ i32.and local.set $2 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 @@ -1825,7 +1064,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 40 i32.const 114 i32.const 13 call $~lib/builtins/abort @@ -1839,7 +1078,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $1 i32.const -2147483648 i32.and @@ -1864,7 +1103,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 40 i32.const 123 i32.const 15 call $~lib/builtins/abort @@ -1872,7 +1111,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and i32.eqz @@ -1892,7 +1131,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end else local.get $0 @@ -1909,18 +1148,18 @@ end end ) - (func $~lib/rt/purerc/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1944,10 +1183,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -1962,9 +1201,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1982,7 +1221,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -1997,11 +1236,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -2024,17 +1263,17 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -2076,7 +1315,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -2092,7 +1331,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 40 i32.const 74 i32.const 17 call $~lib/builtins/abort @@ -2105,7 +1344,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -2113,7 +1352,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -2139,7 +1378,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 40 i32.const 85 i32.const 6 call $~lib/builtins/abort @@ -2157,7 +1396,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -2166,7 +1405,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -2176,7 +1415,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 40 i32.const 96 i32.const 24 call $~lib/builtins/abort @@ -2184,7 +1423,7 @@ end end ) - (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block end @@ -2227,7 +1466,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable @@ -2241,6 +1480,767 @@ unreachable end ) + (func $~lib/rt/tlsf/addMemory (; 25 ;) (type $FUNCSIG$iiii) (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 88 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 88 + i32.const 394 + 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 88 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 26 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 232 + i32.const 88 + i32.const 446 + 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 (; 28 ;) (type $FUNCSIG$iii) (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 88 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 30 ;) (type $FUNCSIG$viii) (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 88 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 88 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 88 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) (func $null (; 33 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index 233e54d6..1219008f 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -1,37 +1,139 @@ (module (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$i (func (result i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) (memory $0 1) - (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s") - (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") - (data (i32.const 112) "$\00\00\00\01\00\00\00\10\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 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s") - (data (i32.const 224) "(\00\00\00\01\00\00\00\10\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 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") + (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 104) "$\00\00\00\01\00\00\00\10\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 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") (global $rc/logical-and-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/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/rt/pure/ROOTS (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $start) (func $rc/logical-and-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$i) (result i32) i32.const 0 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $start:rc/logical-and-mismatch (; 5 ;) (type $FUNCSIG$v) + (local $0 i32) + call $rc/logical-and-mismatch/Ref#constructor + global.set $rc/logical-and-mismatch/gloRef + call $rc/logical-and-mismatch/Ref#constructor + local.tee $0 + if (result i32) + local.get $0 + call $~lib/rt/pure/__release + global.get $rc/logical-and-mismatch/gloRef + call $~lib/rt/pure/__retain + else + local.get $0 + end + call $~lib/rt/pure/__release + global.get $rc/logical-and-mismatch/gloRef + local.tee $0 + if (result i32) + call $rc/logical-and-mismatch/Ref#constructor + else + local.get $0 + call $~lib/rt/pure/__retain + end + call $~lib/rt/pure/__release + call $rc/logical-and-mismatch/Ref#constructor + local.tee $0 + if (result i32) + local.get $0 + call $~lib/rt/pure/__release + call $rc/logical-and-mismatch/Ref#constructor + else + local.get $0 + end + call $~lib/rt/pure/__release + global.get $rc/logical-and-mismatch/gloRef + local.tee $0 + if (result i32) + global.get $rc/logical-and-mismatch/gloRef + else + local.get $0 + end + call $~lib/rt/pure/__retain + call $~lib/rt/pure/__release + global.get $rc/logical-and-mismatch/gloRef + call $~lib/rt/pure/__release + ) + (func $start (; 6 ;) (type $FUNCSIG$v) + call $start:rc/logical-and-mismatch + ) + (func $~lib/rt/pure/increment (; 7 ;) (type $FUNCSIG$vi) (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 24 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 24 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 400 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/tlsf/removeBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -44,7 +146,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 275 i32.const 13 call $~lib/builtins/abort @@ -66,7 +168,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 277 i32.const 13 call $~lib/builtins/abort @@ -111,7 +213,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 290 i32.const 13 call $~lib/builtins/abort @@ -197,7 +299,7 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -208,7 +310,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -222,7 +324,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 205 i32.const 13 call $~lib/builtins/abort @@ -295,7 +397,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 226 i32.const 15 call $~lib/builtins/abort @@ -352,7 +454,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 241 i32.const 13 call $~lib/builtins/abort @@ -367,7 +469,7 @@ i32.ne if i32.const 0 - i32.const 80 + i32.const 72 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -417,7 +519,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 258 i32.const 13 call $~lib/builtins/abort @@ -482,7 +584,7 @@ i32.or i32.store offset=4 ) - (func $~lib/rt/tlsf/freeBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -491,7 +593,7 @@ i32.and if i32.const 0 - i32.const 80 + i32.const 72 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -508,20 +610,20 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 if (result i32) local.get $0 - i32.const 280 + i32.const 256 i32.load i32.gt_u else i32.const 1 end if - i32.const 128 - i32.const 184 - i32.const 55 + i32.const 120 + i32.const 176 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable @@ -529,552 +631,11 @@ local.get $0 i32.const 3 i32.shl - i32.const 280 - i32.add - i32.load - ) - (func $~lib/rt/tlsf/addMemory (; 9 ;) (type $FUNCSIG$viii) (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 80 - i32.const 384 - 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 80 - i32.const 394 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 16 - i32.sub - local.get $3 - 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 80 - i32.const 406 - 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/initializeRoot (; 10 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - i32.const 1 - current_memory - local.tee $0 - i32.gt_s - if (result i32) - i32.const 1 - local.get $0 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - i32.const 432 - i32.const 0 - i32.store - i32.const 2000 - i32.const 0 - i32.store - i32.const 0 - local.set $0 - loop $repeat|0 - block $break|0 - local.get $0 - i32.const 23 - i32.ge_u - br_if $break|0 - local.get $0 - i32.const 2 - i32.shl - i32.const 432 - i32.add - i32.const 0 - i32.store offset=4 - i32.const 0 - local.set $1 - loop $repeat|1 - block $break|1 - local.get $1 - i32.const 16 - i32.ge_u - br_if $break|1 - local.get $0 - i32.const 4 - i32.shl - local.get $1 - i32.add - i32.const 2 - i32.shl - i32.const 432 - i32.add - i32.const 0 - i32.store offset=96 - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 - end - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $repeat|0 - end - end - i32.const 432 - i32.const 2016 - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - i32.const 432 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 240 - i32.const 80 - i32.const 446 - 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 (; 12 ;) (type $FUNCSIG$iii) (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 - i32.const 1 - i32.const 27 - local.get $1 - i32.clz - i32.sub - i32.shl - local.get $1 - 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 80 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 2 - i32.shl - local.get $0 i32.add - i32.load offset=4 - i32.const -1 - local.get $1 - i32.shl - i32.and - local.tee $1 - if (result i32) - local.get $1 - i32.ctz - local.get $2 - i32.const 4 - i32.shl - i32.add - i32.const 2 - i32.shl - local.get $0 - 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 $1 - i32.ctz - local.tee $1 - i32.const 2 - i32.shl - local.get $0 - i32.add - i32.load offset=4 - local.tee $2 - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.ctz - local.get $1 - i32.const 4 - i32.shl - i32.add - i32.const 2 - i32.shl - local.get $0 - i32.add - i32.load offset=96 - else - i32.const 0 - end - end - ) - (func $~lib/rt/tlsf/growMemory (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - current_memory - local.tee $2 - local.get $1 - 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 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $1 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - local.get $0 - local.get $2 - i32.const 16 - i32.shl - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - ) - (func $~lib/rt/tlsf/prepareBlock (; 14 ;) (type $FUNCSIG$viii) (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 80 - i32.const 363 - 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 $3 - i32.const 2 - i32.and - local.get $2 - i32.or - i32.store - local.get $1 - i32.const 16 - i32.add - local.get $2 - 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 (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 80 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $2 - i32.load - i32.const -4 - i32.and - local.get $3 - i32.lt_u - if - i32.const 0 - i32.const 80 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $2 - if (result i32) - local.get $2 - else - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - end - 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/memory/memory.copy (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) block $~lib/util/memory/memmove|inlined.0 @@ -1247,13 +808,13 @@ end end ) - (func $~lib/rt/purerc/growRoots (; 18 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 14 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) - global.get $~lib/rt/purerc/CUR - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS local.tee $2 i32.sub local.tee $1 @@ -1273,25 +834,25 @@ local.get $1 call $~lib/memory/memory.copy local.get $0 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $0 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $0 local.get $3 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.tee $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1300,9 +861,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1312,7 +873,7 @@ i32.and local.set $1 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 @@ -1333,7 +894,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $2 i32.const -2147483648 i32.and @@ -1360,7 +921,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and if @@ -1387,125 +948,23 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end end end ) - (func $~lib/rt/purerc/__release (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - i32.const 424 + i32.const 400 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $start:rc/logical-and-mismatch (; 22 ;) (type $FUNCSIG$v) - (local $0 i32) - call $rc/logical-and-mismatch/Ref#constructor - global.set $rc/logical-and-mismatch/gloRef - call $rc/logical-and-mismatch/Ref#constructor - local.tee $0 - if (result i32) - local.get $0 - call $~lib/rt/purerc/__release - global.get $rc/logical-and-mismatch/gloRef - call $~lib/rt/purerc/__retain - else - local.get $0 - end - call $~lib/rt/purerc/__release - global.get $rc/logical-and-mismatch/gloRef - local.tee $0 - if (result i32) - call $rc/logical-and-mismatch/Ref#constructor - else - local.get $0 - call $~lib/rt/purerc/__retain - end - call $~lib/rt/purerc/__release - call $rc/logical-and-mismatch/Ref#constructor - local.tee $0 - if (result i32) - local.get $0 - call $~lib/rt/purerc/__release - call $rc/logical-and-mismatch/Ref#constructor - else - local.get $0 - end - call $~lib/rt/purerc/__release - global.get $rc/logical-and-mismatch/gloRef - local.tee $0 - if (result i32) - global.get $rc/logical-and-mismatch/gloRef - else - local.get $0 - end - call $~lib/rt/purerc/__retain - call $~lib/rt/purerc/__release - global.get $rc/logical-and-mismatch/gloRef - call $~lib/rt/purerc/__release - ) - (func $start (; 23 ;) (type $FUNCSIG$v) - call $start:rc/logical-and-mismatch - ) - (func $~lib/rt/purerc/increment (; 24 ;) (type $FUNCSIG$vi) (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 24 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 24 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 25 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 424 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/purerc/markGray (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1526,10 +985,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -1540,9 +999,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1559,7 +1018,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -1572,11 +1031,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1598,15 +1057,15 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 - i32.const 424 + i32.const 400 i32.lt_u if return @@ -1638,7 +1097,7 @@ br $case5|0 end local.get $0 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 end local.get $0 @@ -1662,11 +1121,11 @@ i32.sub i32.store offset=4 local.get $0 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 end local.get $0 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 end local.get $0 @@ -1698,12 +1157,12 @@ i32.and if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 end local.get $0 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 end i32.const 0 @@ -1714,7 +1173,7 @@ unreachable end ) - (func $~lib/builtins/__visit_members (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) block $switch$1$case$16 block $switch$1$case$3 block $switch$1$default @@ -1736,9 +1195,550 @@ if local.get $0 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end ) + (func $~lib/rt/tlsf/addMemory (; 24 ;) (type $FUNCSIG$viii) (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 72 + i32.const 384 + 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 72 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 72 + i32.const 406 + 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/initializeRoot (; 25 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 400 + i32.const 0 + i32.store + i32.const 1968 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 400 + i32.const 1984 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 400 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 72 + i32.const 446 + 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 (; 27 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 72 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 28 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 29 ;) (type $FUNCSIG$viii) (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 72 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 72 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 72 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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 $null (; 32 ;) (type $FUNCSIG$v) nop ) diff --git a/tests/compiler/rc/logical-and-mismatch.untouched.wat b/tests/compiler/rc/logical-and-mismatch.untouched.wat index 32b27886..334110a2 100644 --- a/tests/compiler/rc/logical-and-mismatch.untouched.wat +++ b/tests/compiler/rc/logical-and-mismatch.untouched.wat @@ -1,33 +1,33 @@ (module (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$v (func)) + (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) (memory $0 1) - (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\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 112) "$\00\00\00\01\00\00\00\10\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 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 224) "(\00\00\00\01\00\00\00\10\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 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\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 56) "\1e\00\00\00\01\00\00\00\10\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 104) "$\00\00\00\01\00\00\00\10\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 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) (global $rc/logical-and-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 424)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 256)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 400)) (export "memory" (memory $0)) (start $start) (func $rc/logical-and-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) @@ -37,7 +37,7 @@ i32.const 0 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -46,7 +46,134 @@ i32.const 0 call $rc/logical-and-mismatch/Ref#constructor ) - (func $~lib/rt/tlsf/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $start:rc/logical-and-mismatch (; 6 ;) (type $FUNCSIG$v) + (local $0 i32) + i32.const 0 + call $rc/logical-and-mismatch/Ref#constructor + global.set $rc/logical-and-mismatch/gloRef + block + call $rc/logical-and-mismatch/getRef + local.tee $0 + if (result i32) + local.get $0 + call $~lib/rt/pure/__release + global.get $rc/logical-and-mismatch/gloRef + call $~lib/rt/pure/__retain + else + local.get $0 + end + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + end + block + global.get $rc/logical-and-mismatch/gloRef + local.tee $0 + if (result i32) + call $rc/logical-and-mismatch/getRef + else + local.get $0 + call $~lib/rt/pure/__retain + end + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + end + block + call $rc/logical-and-mismatch/getRef + local.tee $0 + if (result i32) + local.get $0 + call $~lib/rt/pure/__release + call $rc/logical-and-mismatch/getRef + else + local.get $0 + end + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + end + block + global.get $rc/logical-and-mismatch/gloRef + local.tee $0 + if (result i32) + global.get $rc/logical-and-mismatch/gloRef + else + local.get $0 + end + call $~lib/rt/pure/__retain + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + end + global.get $rc/logical-and-mismatch/gloRef + call $~lib/rt/pure/__release + ) + (func $start (; 7 ;) (type $FUNCSIG$v) + call $start:rc/logical-and-mismatch + ) + (func $~lib/rt/pure/increment (; 8 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 9 ;) (type $FUNCSIG$ii) (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 $~lib/rt/tlsf/removeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -66,7 +193,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 275 i32.const 13 call $~lib/builtins/abort @@ -91,7 +218,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 277 i32.const 13 call $~lib/builtins/abort @@ -143,7 +270,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 290 i32.const 13 call $~lib/builtins/abort @@ -264,7 +391,7 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -281,7 +408,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -296,7 +423,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 205 i32.const 13 call $~lib/builtins/abort @@ -395,7 +522,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 226 i32.const 15 call $~lib/builtins/abort @@ -458,7 +585,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 241 i32.const 13 call $~lib/builtins/abort @@ -474,7 +601,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -531,7 +658,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 258 i32.const 13 call $~lib/builtins/abort @@ -628,7 +755,7 @@ i32.store offset=4 end ) - (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -640,7 +767,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -657,9 +784,9 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 i32.eqz @@ -672,9 +799,9 @@ i32.gt_u end if - i32.const 128 - i32.const 184 - i32.const 55 + i32.const 120 + i32.const 176 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable @@ -686,768 +813,7 @@ i32.add i32.load ) - (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (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 80 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 80 - i32.const 394 - 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 80 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 240 - i32.const 80 - i32.const 446 - 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 (; 13 ;) (type $FUNCSIG$iii) (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 80 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 15 ;) (type $FUNCSIG$viii) (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 80 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 80 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1653,16 +1019,16 @@ end end ) - (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 15 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.get $0 i32.sub local.set $1 @@ -1688,26 +1054,26 @@ local.get $1 call $~lib/memory/memory.copy local.get $5 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $5 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.get $4 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $1 local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1716,9 +1082,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1729,7 +1095,7 @@ i32.and local.set $2 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 @@ -1752,7 +1118,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $1 i32.const -2147483648 i32.and @@ -1785,7 +1151,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and i32.eqz @@ -1805,7 +1171,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end else local.get $0 @@ -1822,145 +1188,18 @@ end end ) - (func $~lib/rt/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $start:rc/logical-and-mismatch (; 23 ;) (type $FUNCSIG$v) - (local $0 i32) - i32.const 0 - call $rc/logical-and-mismatch/Ref#constructor - global.set $rc/logical-and-mismatch/gloRef - block - call $rc/logical-and-mismatch/getRef - local.tee $0 - if (result i32) - local.get $0 - call $~lib/rt/purerc/__release - global.get $rc/logical-and-mismatch/gloRef - call $~lib/rt/purerc/__retain - else - local.get $0 - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - global.get $rc/logical-and-mismatch/gloRef - local.tee $0 - if (result i32) - call $rc/logical-and-mismatch/getRef - else - local.get $0 - call $~lib/rt/purerc/__retain - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - call $rc/logical-and-mismatch/getRef - local.tee $0 - if (result i32) - local.get $0 - call $~lib/rt/purerc/__release - call $rc/logical-and-mismatch/getRef - else - local.get $0 - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - global.get $rc/logical-and-mismatch/gloRef - local.tee $0 - if (result i32) - global.get $rc/logical-and-mismatch/gloRef - else - local.get $0 - end - call $~lib/rt/purerc/__retain - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - global.get $rc/logical-and-mismatch/gloRef - call $~lib/rt/purerc/__release - ) - (func $start (; 24 ;) (type $FUNCSIG$v) - call $start:rc/logical-and-mismatch - ) - (func $~lib/rt/purerc/increment (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1984,10 +1223,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -2002,9 +1241,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -2022,7 +1261,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -2037,11 +1276,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -2064,17 +1303,17 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -2116,7 +1355,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -2145,7 +1384,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -2153,7 +1392,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -2197,7 +1436,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -2206,7 +1445,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -2224,7 +1463,7 @@ end end ) - (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block end @@ -2267,7 +1506,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable @@ -2281,6 +1520,767 @@ unreachable end ) + (func $~lib/rt/tlsf/addMemory (; 25 ;) (type $FUNCSIG$iiii) (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 72 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 72 + i32.const 394 + 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 72 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 26 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 72 + i32.const 446 + 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 (; 28 ;) (type $FUNCSIG$iii) (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 72 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 30 ;) (type $FUNCSIG$viii) (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 72 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 72 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) (func $null (; 33 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 8ecc6704..b3740784 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -1,88 +1,165 @@ (module (type $FUNCSIG$ii (func (param i32) (result i32))) - (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$i (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) (memory $0 1) - (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\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 112) "$\00\00\00\01\00\00\00\10\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 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 224) "(\00\00\00\01\00\00\00\10\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 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 104) "$\00\00\00\01\00\00\00\10\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 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") (global $rc/logical-or-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 424)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $start) - (func $rc/logical-or-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $rc/logical-or-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$i) (result i32) + i32.const 0 + i32.const 17 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + ) + (func $start:rc/logical-or-mismatch (; 5 ;) (type $FUNCSIG$v) + (local $0 i32) + call $rc/logical-or-mismatch/Ref#constructor + global.set $rc/logical-or-mismatch/gloRef + call $rc/logical-or-mismatch/Ref#constructor + local.tee $0 + if (result i32) + local.get $0 + else + local.get $0 + call $~lib/rt/pure/__release + global.get $rc/logical-or-mismatch/gloRef + call $~lib/rt/pure/__retain + end + call $~lib/rt/pure/__release + global.get $rc/logical-or-mismatch/gloRef + local.tee $0 + if (result i32) + local.get $0 + call $~lib/rt/pure/__retain + else + call $rc/logical-or-mismatch/Ref#constructor + end + call $~lib/rt/pure/__release + call $rc/logical-or-mismatch/Ref#constructor + local.tee $0 + if (result i32) + local.get $0 + else + local.get $0 + call $~lib/rt/pure/__release + call $rc/logical-or-mismatch/Ref#constructor + end + call $~lib/rt/pure/__release + global.get $rc/logical-or-mismatch/gloRef + local.tee $0 + if (result i32) + local.get $0 + else + global.get $rc/logical-or-mismatch/gloRef + end + call $~lib/rt/pure/__retain + call $~lib/rt/pure/__release + global.get $rc/logical-or-mismatch/gloRef + call $~lib/rt/pure/__release + ) + (func $start (; 6 ;) (type $FUNCSIG$v) + call $start:rc/logical-or-mismatch + ) + (func $~lib/rt/pure/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) local.get $0 - i32.eqz + 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 17 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 + i32.const 24 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 24 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 400 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment end local.get $0 ) - (func $rc/logical-or-mismatch/getRef (; 5 ;) (type $FUNCSIG$i) (result i32) - i32.const 0 - call $rc/logical-or-mismatch/Ref#constructor - ) - (func $~lib/rt/tlsf/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (; 9 ;) (type $FUNCSIG$vii) (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 + local.tee $3 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 275 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 -4 + i32.and + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -91,50 +168,43 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 277 i32.const 13 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $4 - local.get $3 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $2 + i32.const 0 else + local.get $2 i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 - local.get $3 - local.get $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $5 - local.get $4 - i32.const 8 - i32.const 1 + local.set $2 + local.get $3 + i32.const 7 i32.sub - i32.sub - local.set $4 end - local.get $4 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 16 i32.lt_u else @@ -143,118 +213,83 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 290 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 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 if - local.get $6 - local.get $7 + local.get $5 + local.get $4 i32.store offset=20 end - local.get $7 + local.get $4 if - local.get $7 - local.get $6 + local.get $4 + local.get $5 i32.store offset=16 end + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 local.get $1 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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.eq + if + local.get $3 i32.const 4 i32.shl - local.get $8 + local.get $2 i32.add i32.const 2 i32.shl + local.get $0 i32.add - i32.load offset=96 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.0 - 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 - end - local.get $7 + local.get $4 + i32.store offset=96 + local.get $4 i32.eqz if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -264,24 +299,18 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 10 ;) (type $FUNCSIG$vii) (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 80 + i32.const 72 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -289,56 +318,42 @@ end local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $3 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 205 i32.const 13 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - local.set $4 - local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $1 i32.load - local.set $5 - local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 i32.const 1 i32.and if - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.const 16 i32.add local.get $5 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.add - local.set $3 - local.get $3 + local.tee $2 i32.const 1073741808 i32.lt_u if @@ -346,110 +361,91 @@ local.get $4 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $2 + local.get $3 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $3 i32.store - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 + 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 $2 + local.get $3 i32.const 2 i32.and if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 + local.get $1 + i32.const 4 + i32.sub i32.load - local.set $6 - local.get $6 + local.tee $2 + i32.load + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 226 i32.const 15 call $~lib/builtins/abort unreachable end local.get $6 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.const 16 i32.add - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.add - local.set $7 - local.get $7 + local.tee $7 i32.const 1073741808 i32.lt_u - if + if (result i32) local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $3 + local.get $2 local.get $6 i32.const 3 i32.and local.get $7 i32.or - local.tee $2 + local.tee $3 i32.store - local.get $3 - local.set $1 + local.get $2 + else + local.get $1 end + local.set $1 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 + local.get $3 + i32.const -4 i32.and - local.set $8 - local.get $8 + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -458,23 +454,22 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 241 i32.const 13 call $~lib/builtins/abort unreachable end + local.get $4 local.get $1 i32.const 16 i32.add - local.get $8 + local.get $2 i32.add - local.get $4 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 80 + i32.const 72 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -485,44 +480,37 @@ i32.sub local.get $1 i32.store - local.get $8 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $9 - local.get $8 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $10 + local.set $4 + i32.const 0 else + local.get $2 i32.const 31 - local.get $8 + local.get $2 i32.clz i32.sub - local.set $9 - local.get $8 - local.get $9 + local.tee $2 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $10 - local.get $9 - i32.const 8 - i32.const 1 + local.set $4 + local.get $2 + i32.const 7 i32.sub - i32.sub - local.set $9 end - local.get $9 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $4 i32.const 16 i32.lt_u else @@ -531,116 +519,81 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 258 i32.const 13 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $11 + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.set $2 local.get $1 i32.const 0 i32.store offset=16 local.get $1 - local.get $11 + local.get $2 i32.store offset=20 - local.get $11 + local.get $2 if - local.get $11 + local.get $2 local.get $1 i32.store offset=16 end - block $~lib/rt/tlsf/SETHEAD|inlined.1 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $1 + i32.store offset=96 local.get $0 local.get $0 i32.load i32.const 1 - local.get $9 + local.get $3 i32.shl i32.or i32.store - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 ) - (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $2 i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -657,1057 +610,249 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 + (func $~lib/rt/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.eqz if (result i32) - i32.const 1 - else local.get $0 - local.get $1 + i32.const 256 i32.load i32.gt_u + else + i32.const 1 end if - i32.const 128 - i32.const 184 - i32.const 55 + i32.const 120 + i32.const 176 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (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 80 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 80 - i32.const 394 - 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 80 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 + i32.const 3 i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 240 - i32.const 80 - i32.const 446 - 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 (; 13 ;) (type $FUNCSIG$iii) (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 80 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 + i32.load ) - (func $~lib/rt/tlsf/prepareBlock (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 13 ;) (type $FUNCSIG$viii) (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 80 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 80 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 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 + local.get $0 + local.get $1 i32.eq - if - br $~lib/util/memory/memmove|inlined.0 - end - local.get $5 - local.get $4 + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 i32.lt_u if - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 + loop $continue|0 + local.get $0 + i32.const 7 + i32.and if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + 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 $continue|0 + end + end + loop $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 $continue|1 end end end + loop $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 $continue|2 + end + end else - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 + loop $continue|3 + local.get $0 local.get $3 + i32.add + i32.const 7 + i32.and if - local.get $5 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 local.get $3 i32.const 1 i32.sub local.tee $3 i32.add - local.get $4 + local.get $1 local.get $3 i32.add i32.load8_u i32.store8 - br $continue|5 + br $continue|3 end end + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end end end end ) - (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 14 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/CUR - local.get $0 - i32.sub - local.set $1 - local.get $1 - i32.const 2 - i32.mul + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS local.tee $2 - i32.const 64 - i32.const 2 + i32.sub + local.tee $1 + i32.const 1 i32.shl - local.tee $3 - local.get $2 - local.get $3 + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 i32.gt_u select - local.set $4 - local.get $4 + local.tee $3 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $5 - local.get $0 + local.tee $0 + local.get $2 local.get $1 call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1716,26 +861,23 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $2 i32.const 268435455 i32.and - local.set $2 + local.set $1 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 i32.const 24 @@ -1744,7 +886,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 1 i32.eq if @@ -1752,29 +894,23 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members - local.get $1 + call $~lib/rt/__visit_members + local.get $2 i32.const -2147483648 i32.and - i32.eqz 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 - 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 + local.get $1 i32.const 0 - i32.gt_u - i32.eqz + i32.le_u if i32.const 0 i32.const 24 @@ -1785,187 +921,54 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and - i32.eqz if local.get $0 - i32.const -2147483648 - i32.const 805306368 - i32.or - local.get $2 + 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/purerc/appendRoot + 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/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 400 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $start:rc/logical-or-mismatch (; 23 ;) (type $FUNCSIG$v) - (local $0 i32) - i32.const 0 - call $rc/logical-or-mismatch/Ref#constructor - global.set $rc/logical-or-mismatch/gloRef - block - call $rc/logical-or-mismatch/getRef - local.tee $0 - if (result i32) - local.get $0 - else - local.get $0 - call $~lib/rt/purerc/__release - global.get $rc/logical-or-mismatch/gloRef - call $~lib/rt/purerc/__retain - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - global.get $rc/logical-or-mismatch/gloRef - local.tee $0 - if (result i32) - local.get $0 - call $~lib/rt/purerc/__retain - else - call $rc/logical-or-mismatch/getRef - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - call $rc/logical-or-mismatch/getRef - local.tee $0 - if (result i32) - local.get $0 - else - local.get $0 - call $~lib/rt/purerc/__release - call $rc/logical-or-mismatch/getRef - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - global.get $rc/logical-or-mismatch/gloRef - local.tee $0 - if (result i32) - local.get $0 - else - global.get $rc/logical-or-mismatch/gloRef - end - call $~lib/rt/purerc/__retain - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - global.get $rc/logical-or-mismatch/gloRef - call $~lib/rt/purerc/__release - ) - (func $start (; 24 ;) (type $FUNCSIG$v) - call $start:rc/logical-or-mismatch - ) - (func $~lib/rt/purerc/increment (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -1973,9 +976,7 @@ if local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 268435456 i32.or @@ -1984,32 +985,27 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and - i32.const 0 - i32.or i32.store offset=4 local.get $0 i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -2022,13 +1018,11 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 536870912 i32.or @@ -2037,16 +1031,15 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 536870912 @@ -2064,17 +1057,15 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) + (func $~lib/rt/pure/__visit (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 400 i32.lt_u if return @@ -2082,205 +1073,673 @@ local.get $0 i32.const 16 i32.sub - local.set $2 + local.set $0 block $break|0 block $case5|0 block $case4|0 block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if 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 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end br $case5|0 end - block - local.get $2 - call $~lib/rt/purerc/decrement - br $break|0 - unreachable - end - unreachable - end - block - 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 24 - i32.const 74 - 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/purerc/markGray + 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 24 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/scan + 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 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 85 - 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/purerc/scanBlack 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 24 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/collectWhite + 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 - unreachable + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 24 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $switch$1$case$16 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 1 + i32.sub + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default end unreachable end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/tlsf/addMemory (; 24 ;) (type $FUNCSIG$viii) (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.eqz + i32.const 72 + i32.const 384 + 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 24 - i32.const 96 - i32.const 24 + i32.const 72 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 72 + i32.const 406 + i32.const 4 call $~lib/builtins/abort unreachable end end - ) - (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return end - block $switch$1$leave - block $switch$1$case$16 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default - end - block - block - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - return - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - end - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - 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/initializeRoot (; 25 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if unreachable end + i32.const 400 + i32.const 0 + i32.store + i32.const 1968 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 400 + i32.const 1984 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 400 + global.set $~lib/rt/tlsf/ROOT ) - (func $null (; 33 ;) (type $FUNCSIG$v) + (func $~lib/rt/tlsf/prepareSize (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 72 + i32.const 446 + 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 (; 27 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 72 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 28 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 29 ;) (type $FUNCSIG$viii) (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 72 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 72 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 72 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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 $null (; 32 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/rc/logical-or-mismatch.untouched.wat b/tests/compiler/rc/logical-or-mismatch.untouched.wat index 8ecc6704..63b18acf 100644 --- a/tests/compiler/rc/logical-or-mismatch.untouched.wat +++ b/tests/compiler/rc/logical-or-mismatch.untouched.wat @@ -1,33 +1,33 @@ (module (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$v (func)) + (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) (memory $0 1) - (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\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 112) "$\00\00\00\01\00\00\00\10\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 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 224) "(\00\00\00\01\00\00\00\10\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 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\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 56) "\1e\00\00\00\01\00\00\00\10\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 104) "$\00\00\00\01\00\00\00\10\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 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) (global $rc/logical-or-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 424)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 256)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 400)) (export "memory" (memory $0)) (start $start) (func $rc/logical-or-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) @@ -37,7 +37,7 @@ i32.const 0 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -46,7 +46,134 @@ i32.const 0 call $rc/logical-or-mismatch/Ref#constructor ) - (func $~lib/rt/tlsf/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $start:rc/logical-or-mismatch (; 6 ;) (type $FUNCSIG$v) + (local $0 i32) + i32.const 0 + call $rc/logical-or-mismatch/Ref#constructor + global.set $rc/logical-or-mismatch/gloRef + block + call $rc/logical-or-mismatch/getRef + local.tee $0 + if (result i32) + local.get $0 + else + local.get $0 + call $~lib/rt/pure/__release + global.get $rc/logical-or-mismatch/gloRef + call $~lib/rt/pure/__retain + end + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + end + block + global.get $rc/logical-or-mismatch/gloRef + local.tee $0 + if (result i32) + local.get $0 + call $~lib/rt/pure/__retain + else + call $rc/logical-or-mismatch/getRef + end + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + end + block + call $rc/logical-or-mismatch/getRef + local.tee $0 + if (result i32) + local.get $0 + else + local.get $0 + call $~lib/rt/pure/__release + call $rc/logical-or-mismatch/getRef + end + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + end + block + global.get $rc/logical-or-mismatch/gloRef + local.tee $0 + if (result i32) + local.get $0 + else + global.get $rc/logical-or-mismatch/gloRef + end + call $~lib/rt/pure/__retain + local.set $0 + local.get $0 + call $~lib/rt/pure/__release + end + global.get $rc/logical-or-mismatch/gloRef + call $~lib/rt/pure/__release + ) + (func $start (; 7 ;) (type $FUNCSIG$v) + call $start:rc/logical-or-mismatch + ) + (func $~lib/rt/pure/increment (; 8 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 9 ;) (type $FUNCSIG$ii) (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 $~lib/rt/tlsf/removeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -66,7 +193,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 275 i32.const 13 call $~lib/builtins/abort @@ -91,7 +218,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 277 i32.const 13 call $~lib/builtins/abort @@ -143,7 +270,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 290 i32.const 13 call $~lib/builtins/abort @@ -264,7 +391,7 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -281,7 +408,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -296,7 +423,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 205 i32.const 13 call $~lib/builtins/abort @@ -395,7 +522,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 226 i32.const 15 call $~lib/builtins/abort @@ -458,7 +585,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 241 i32.const 13 call $~lib/builtins/abort @@ -474,7 +601,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -531,7 +658,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 258 i32.const 13 call $~lib/builtins/abort @@ -628,7 +755,7 @@ i32.store offset=4 end ) - (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -640,7 +767,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -657,9 +784,9 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 i32.eqz @@ -672,9 +799,9 @@ i32.gt_u end if - i32.const 128 - i32.const 184 - i32.const 55 + i32.const 120 + i32.const 176 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable @@ -686,768 +813,7 @@ i32.add i32.load ) - (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (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 80 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 80 - i32.const 394 - 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 80 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 240 - i32.const 80 - i32.const 446 - 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 (; 13 ;) (type $FUNCSIG$iii) (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 80 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 15 ;) (type $FUNCSIG$viii) (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 80 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 80 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1653,16 +1019,16 @@ end end ) - (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 15 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.get $0 i32.sub local.set $1 @@ -1688,26 +1054,26 @@ local.get $1 call $~lib/memory/memory.copy local.get $5 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $5 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.get $4 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $1 local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1716,9 +1082,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1729,7 +1095,7 @@ i32.and local.set $2 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 @@ -1752,7 +1118,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $1 i32.const -2147483648 i32.and @@ -1785,7 +1151,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and i32.eqz @@ -1805,7 +1171,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end else local.get $0 @@ -1822,145 +1188,18 @@ end end ) - (func $~lib/rt/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $start:rc/logical-or-mismatch (; 23 ;) (type $FUNCSIG$v) - (local $0 i32) - i32.const 0 - call $rc/logical-or-mismatch/Ref#constructor - global.set $rc/logical-or-mismatch/gloRef - block - call $rc/logical-or-mismatch/getRef - local.tee $0 - if (result i32) - local.get $0 - else - local.get $0 - call $~lib/rt/purerc/__release - global.get $rc/logical-or-mismatch/gloRef - call $~lib/rt/purerc/__retain - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - global.get $rc/logical-or-mismatch/gloRef - local.tee $0 - if (result i32) - local.get $0 - call $~lib/rt/purerc/__retain - else - call $rc/logical-or-mismatch/getRef - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - call $rc/logical-or-mismatch/getRef - local.tee $0 - if (result i32) - local.get $0 - else - local.get $0 - call $~lib/rt/purerc/__release - call $rc/logical-or-mismatch/getRef - end - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - block - global.get $rc/logical-or-mismatch/gloRef - local.tee $0 - if (result i32) - local.get $0 - else - global.get $rc/logical-or-mismatch/gloRef - end - call $~lib/rt/purerc/__retain - local.set $0 - local.get $0 - call $~lib/rt/purerc/__release - end - global.get $rc/logical-or-mismatch/gloRef - call $~lib/rt/purerc/__release - ) - (func $start (; 24 ;) (type $FUNCSIG$v) - call $start:rc/logical-or-mismatch - ) - (func $~lib/rt/purerc/increment (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1984,10 +1223,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -2002,9 +1241,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -2022,7 +1261,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -2037,11 +1276,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -2064,17 +1303,17 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -2116,7 +1355,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -2145,7 +1384,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -2153,7 +1392,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -2197,7 +1436,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -2206,7 +1445,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -2224,7 +1463,7 @@ end end ) - (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block end @@ -2267,7 +1506,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable @@ -2281,6 +1520,767 @@ unreachable end ) + (func $~lib/rt/tlsf/addMemory (; 25 ;) (type $FUNCSIG$iiii) (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 72 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 72 + i32.const 394 + 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 72 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 26 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 72 + i32.const 446 + 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 (; 28 ;) (type $FUNCSIG$iii) (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 72 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 30 ;) (type $FUNCSIG$viii) (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 72 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 72 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) (func $null (; 33 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 64a47d9c..97cbe08e 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -1,77 +1,63 @@ (module - (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) - (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\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 56) "(\00\00\00\01\00\00\00\10\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 112) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 168) "$\00\00\00\01\00\00\00\10\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 224) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 56) "$\00\00\00\01\00\00\00\10\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 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 424)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) - (export "__realloc" (func $~lib/rt/tlsf/__realloc)) - (export "__free" (func $~lib/rt/tlsf/__free)) - (export "__retain" (func $~lib/rt/purerc/__retain)) - (export "__release" (func $~lib/rt/purerc/__release)) - (export "__collect" (func $~lib/rt/purerc/__collect)) - (export "__instanceof" (func $~lib/rt/common/__instanceof)) - (export "__typeinfo" (func $~lib/rt/common/__typeinfo)) + (export "__retain" (func $~lib/rt/pure/__retain)) + (export "__release" (func $~lib/rt/pure/__release)) + (export "__collect" (func $~lib/rt/pure/__collect)) + (export "__instanceof" (func $~lib/rt/__instanceof)) + (export "__typeinfo" (func $~lib/rt/__typeinfo)) (start $start) - (func $rc/rereturn/Ref#constructor (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/markGray (; 1 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) local.get $0 - i32.eqz + i32.load offset=4 + local.tee $1 + i32.const 1879048192 + i32.and + i32.const 268435456 + i32.ne if - i32.const 0 - i32.const 17 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 + 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 - local.get $0 ) - (func $rc/rereturn/getRef (; 2 ;) (type $FUNCSIG$i) (result i32) - i32.const 0 - call $rc/rereturn/Ref#constructor - ) - (func $rc/rereturn/rereturnRef (; 3 ;) (type $FUNCSIG$i) (result i32) - call $rc/rereturn/getRef - ) - (func $start:rc/rereturn (; 4 ;) (type $FUNCSIG$v) - call $rc/rereturn/rereturnRef - call $~lib/rt/purerc/__release - ) - (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (; 2 ;) (type $FUNCSIG$vii) (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 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -83,17 +69,14 @@ 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 -4 + i32.and + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -108,44 +91,37 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $4 - local.get $3 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $2 + i32.const 0 else + local.get $2 i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 - local.get $3 - local.get $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $5 - local.get $4 - i32.const 8 - i32.const 1 + local.set $2 + local.get $3 + i32.const 7 i32.sub - i32.sub - local.set $4 end - local.get $4 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 16 i32.lt_u else @@ -161,111 +137,76 @@ 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 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 if - local.get $6 - local.get $7 + local.get $5 + local.get $4 i32.store offset=20 end - local.get $7 + local.get $4 if - local.get $7 - local.get $6 + local.get $4 + local.get $5 i32.store offset=16 end + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 local.get $1 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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.eq + if + local.get $3 i32.const 4 i32.shl - local.get $8 + local.get $2 i32.add i32.const 2 i32.shl + local.get $0 i32.add - i32.load offset=96 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.1 - 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 - end - local.get $7 + local.get $4 + i32.store offset=96 + local.get $4 i32.eqz if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -275,19 +216,13 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 3 ;) (type $FUNCSIG$vii) (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 @@ -300,8 +235,7 @@ end local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -313,43 +247,30 @@ call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - local.set $4 - local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $1 i32.load - local.set $5 - local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 i32.const 1 i32.and if - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.const 16 i32.add local.get $5 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.add - local.set $3 - local.get $3 + local.tee $2 i32.const 1073741808 i32.lt_u if @@ -357,50 +278,37 @@ local.get $4 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $2 + local.get $3 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $3 i32.store - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 + 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 $2 + local.get $3 i32.const 2 i32.and if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 + local.get $1 + i32.const 4 + i32.sub i32.load - local.set $6 - local.get $6 + local.tee $2 + i32.load + local.tee $6 i32.const 1 i32.and i32.eqz @@ -413,54 +321,48 @@ unreachable end local.get $6 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.const 16 i32.add - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.add - local.set $7 - local.get $7 + local.tee $7 i32.const 1073741808 i32.lt_u - if + if (result i32) local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $3 + local.get $2 local.get $6 i32.const 3 i32.and local.get $7 i32.or - local.tee $2 + local.tee $3 i32.store - local.get $3 - local.set $1 + local.get $2 + else + local.get $1 end + local.set $1 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 + local.get $3 + i32.const -4 i32.and - local.set $8 - local.get $8 + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -475,14 +377,13 @@ call $~lib/builtins/abort unreachable end + local.get $4 local.get $1 i32.const 16 i32.add - local.get $8 + local.get $2 i32.add - local.get $4 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -496,44 +397,37 @@ i32.sub local.get $1 i32.store - local.get $8 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $9 - local.get $8 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $10 + local.set $4 + i32.const 0 else + local.get $2 i32.const 31 - local.get $8 + local.get $2 i32.clz i32.sub - local.set $9 - local.get $8 - local.get $9 + local.tee $2 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $10 - local.get $9 - i32.const 8 - i32.const 1 + local.set $4 + local.get $2 + i32.const 7 i32.sub - i32.sub - local.set $9 end - local.get $9 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $4 i32.const 16 i32.lt_u else @@ -548,1247 +442,72 @@ call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $11 + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.set $2 local.get $1 i32.const 0 i32.store offset=16 local.get $1 - local.get $11 + local.get $2 i32.store offset=20 - local.get $11 + local.get $2 if - local.get $11 + local.get $2 local.get $1 i32.store offset=16 end - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $9 + local.get $3 + i32.const 4 i32.shl - i32.or - i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end - ) - (func $~lib/rt/tlsf/addMemory (; 7 ;) (type $FUNCSIG$iiii) (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 24 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 24 - i32.const 394 - 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 24 - i32.const 406 - 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.add i32.const 2 - i32.const 16 - i32.mul - i32.sub - local.set $7 + i32.shl + local.get $0 + i32.add local.get $1 - local.set $8 - local.get $8 - local.get $7 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load i32.const 1 + local.get $3 + i32.shl i32.or - local.get $5 + i32.store + local.get $3 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.shl + local.get $0 i32.add - i32.const 16 - i32.sub - local.set $4 - local.get $4 - i32.const 0 + local.get $3 i32.const 2 - i32.or - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 8 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 72 - i32.const 24 - i32.const 446 - 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 (; 10 ;) (type $FUNCSIG$iii) (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 24 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 12 ;) (type $FUNCSIG$viii) (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 24 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 24 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 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 $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 - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 - if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - local.get $3 - i32.const 1 - i32.sub - local.set $3 - br $continue|2 - end - end - end - else - local.get $4 - i32.const 7 - i32.and - local.get $5 - i32.const 7 - i32.and - i32.eq - if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 - local.get $3 - 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 $continue|5 - end - end - end - end - end - ) - (func $~lib/rt/tlsf/reallocateBlock (; 16 ;) (type $FUNCSIG$iiii) (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.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.set $4 - local.get $4 - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 491 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32) - 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 - end - local.set $6 - local.get $6 - i32.load - local.set $7 - local.get $7 - i32.const 1 - i32.and - if - local.get $4 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.add - local.get $7 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $5 - local.get $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 i32.load offset=4 - i32.store offset=4 - local.get $8 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $8 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 i32.const 1 + local.get $4 + i32.shl i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $8 + i32.store offset=4 ) - (func $~lib/rt/tlsf/__realloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 552 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 24 - i32.const 553 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $2 i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 i32.const 24 @@ -1806,359 +525,24 @@ local.get $1 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/__free (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 560 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 24 - i32.const 561 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/rt/purerc/increment (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 103 - 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 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/common/__typeinfo (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 - local.get $0 - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - i32.load - i32.gt_u - end - if - i32.const 184 - i32.const 240 - i32.const 55 - i32.const 34 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/purerc/growRoots (; 23 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/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 - local.get $0 - local.get $1 - call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 - local.get $1 - i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 - i32.add - global.set $~lib/rt/purerc/END - ) - (func $~lib/rt/purerc/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END - i32.ge_u - if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 1 - i32.add - global.set $~lib/rt/purerc/CUR - ) - (func $~lib/rt/purerc/decrement (; 25 ;) (type $FUNCSIG$vi) (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 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 114 - 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/builtins/__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 128 - i32.const 123 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/common/__typeinfo - i32.const 8 - 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/purerc/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/purerc/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - ) - (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (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/builtins/__visit_members - end - ) - (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 5 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and - i32.const 0 - i32.or i32.store offset=4 local.get $0 i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -2171,13 +555,11 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 536870912 i32.or @@ -2186,16 +568,15 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 536870912 @@ -2213,49 +594,42 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__collect (; 31 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/__collect (; 8 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS + local.tee $5 + local.tee $2 + local.set $3 + global.get $~lib/rt/pure/CUR local.set $0 - local.get $0 - local.set $1 - block $break|0 - block - local.get $1 - local.set $2 - global.get $~lib/rt/purerc/CUR - local.set $3 - end - loop $repeat|0 - local.get $2 + loop $repeat|0 + block $break|0 local.get $3 - i32.lt_u - i32.eqz + local.get $0 + i32.ge_u br_if $break|0 - local.get $2 + local.get $3 i32.load - local.set $4 - local.get $4 + local.tee $4 i32.load offset=4 - local.set $5 - local.get $5 + local.tee $1 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $1 i32.const 268435455 i32.and i32.const 0 @@ -2265,122 +639,100 @@ end if local.get $4 - call $~lib/rt/purerc/markGray - local.get $1 + call $~lib/rt/pure/markGray + local.get $2 local.get $4 i32.store - local.get $1 + local.get $2 i32.const 4 i32.add - local.set $1 + local.set $2 else - local.get $5 + i32.const 0 + local.get $1 + i32.const 268435455 + i32.and + i32.eqz + local.get $1 i32.const 1879048192 i32.and - i32.const 0 - i32.eq - if (result i32) - local.get $5 - i32.const 268435455 - i32.and - i32.eqz - else - i32.const 0 - end + select if global.get $~lib/rt/tlsf/ROOT local.get $4 call $~lib/rt/tlsf/freeBlock else local.get $4 - local.get $5 - i32.const -2147483648 - i32.const -1 - i32.xor + local.get $1 + i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $2 + local.get $3 i32.const 4 i32.add - local.set $2 + local.set $3 br $repeat|0 - unreachable end - unreachable end - local.get $1 - global.set $~lib/rt/purerc/CUR - block $break|1 - local.get $0 - local.set $5 - loop $repeat|1 - local.get $5 - local.get $1 - i32.lt_u - i32.eqz + local.get $2 + global.set $~lib/rt/pure/CUR + local.get $5 + local.set $0 + loop $repeat|1 + block $break|1 + local.get $0 + local.get $2 + i32.ge_u br_if $break|1 - local.get $5 + local.get $0 i32.load - call $~lib/rt/purerc/scan - local.get $5 + call $~lib/rt/pure/scan + local.get $0 i32.const 4 i32.add - local.set $5 + local.set $0 br $repeat|1 - unreachable end - unreachable end - block $break|2 - local.get $0 - local.set $5 - loop $repeat|2 - local.get $5 - local.get $1 - i32.lt_u - i32.eqz + local.get $5 + local.set $0 + loop $repeat|2 + block $break|2 + local.get $0 + local.get $2 + i32.ge_u br_if $break|2 - local.get $5 + local.get $0 i32.load - local.set $4 - local.get $4 - local.get $4 + local.tee $1 + local.get $1 i32.load offset=4 - i32.const -2147483648 - i32.const -1 - i32.xor + i32.const 2147483647 i32.and i32.store offset=4 - local.get $4 - call $~lib/rt/purerc/collectWhite - local.get $5 + local.get $1 + call $~lib/rt/pure/collectWhite + local.get $0 i32.const 4 i32.add - local.set $5 + local.set $0 br $repeat|2 - unreachable end - unreachable end - local.get $0 - global.set $~lib/rt/purerc/CUR + local.get $5 + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/common/__instanceof (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) + (func $~lib/rt/__instanceof (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 16 i32.sub i32.load offset=8 - local.set $2 - global.get $~lib/builtins/RTTI_BASE - local.set $3 - local.get $2 + local.tee $0 if (result i32) - local.get $2 - local.get $3 + local.get $0 + i32.const 256 i32.load i32.le_u else @@ -2388,33 +740,438 @@ end if loop $continue|0 - local.get $2 + local.get $0 local.get $1 i32.eq if i32.const 1 return end - local.get $3 - local.get $2 - i32.const 8 - i32.mul + local.get $0 + i32.const 3 + i32.shl + i32.const 256 i32.add i32.load offset=4 - local.tee $2 + local.tee $0 br_if $continue|0 end end i32.const 0 ) - (func $start (; 33 ;) (type $FUNCSIG$v) - call $start:rc/rereturn + (func $~lib/rt/__typeinfo (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + i32.const 256 + i32.load + i32.gt_u + else + i32.const 1 + end + if + i32.const 72 + i32.const 128 + i32.const 23 + i32.const 34 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 256 + i32.add + i32.load ) - (func $~lib/rt/purerc/__visit (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $start (; 11 ;) (type $FUNCSIG$v) + i32.const 0 + i32.const 17 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + call $~lib/rt/pure/__release + ) + (func $~lib/rt/pure/increment (; 12 ;) (type $FUNCSIG$vi) (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 168 + i32.const 103 + 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 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 168 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 400 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (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 $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 $continue|0 + end + end + loop $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 $continue|1 + end + end + end + loop $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 $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 $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 $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|3 + end + end + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end + end + end + end + ) + (func $~lib/rt/pure/growRoots (; 15 ;) (type $FUNCSIG$v) + (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 $2 + i32.sub + local.tee $1 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 256 + i32.gt_u + select + local.tee $3 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $0 + local.get $2 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $1 + 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 (; 16 ;) (type $FUNCSIG$vi) (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 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 17 ;) (type $FUNCSIG$vi) (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 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 168 + i32.const 114 + 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 168 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + 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 (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 400 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/rt/pure/__visit (; 19 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 400 i32.lt_u if return @@ -2422,205 +1179,673 @@ local.get $0 i32.const 16 i32.sub - local.set $2 + local.set $0 block $break|0 block $case5|0 block $case4|0 block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if 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 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end br $case5|0 end - block - local.get $2 - call $~lib/rt/purerc/decrement - br $break|0 - unreachable - end - unreachable - end - block - 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 128 - i32.const 74 - 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/purerc/markGray + 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 168 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/scan + 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 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 85 - 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/purerc/scanBlack 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 168 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/collectWhite + 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 - unreachable + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 168 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $switch$1$case$16 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 1 + i32.sub + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default end unreachable end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/tlsf/addMemory (; 21 ;) (type $FUNCSIG$viii) (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.eqz + i32.const 24 + i32.const 384 + 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 128 - i32.const 96 i32.const 24 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 24 + i32.const 406 + i32.const 4 call $~lib/builtins/abort unreachable end end - ) - (func $~lib/builtins/__visit_members (; 35 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return end - block $switch$1$leave - block $switch$1$case$16 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default - end - block - block - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - return - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - end - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - 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/initializeRoot (; 22 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if unreachable end + i32.const 400 + i32.const 0 + i32.store + i32.const 1968 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 400 + i32.const 1984 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 400 + global.set $~lib/rt/tlsf/ROOT ) - (func $null (; 36 ;) (type $FUNCSIG$v) + (func $~lib/rt/tlsf/prepareSize (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 24 + i32.const 446 + 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 (; 24 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 24 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 26 ;) (type $FUNCSIG$viii) (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 24 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 24 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 24 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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 $null (; 29 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/rc/rereturn.untouched.wat b/tests/compiler/rc/rereturn.untouched.wat index 64a47d9c..4d670391 100644 --- a/tests/compiler/rc/rereturn.untouched.wat +++ b/tests/compiler/rc/rereturn.untouched.wat @@ -2,37 +2,35 @@ (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) - (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\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 56) "(\00\00\00\01\00\00\00\10\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 112) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 168) "$\00\00\00\01\00\00\00\10\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 224) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 56) "$\00\00\00\01\00\00\00\10\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 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\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 200) "(\00\00\00\01\00\00\00\10\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 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 424)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 256)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 400)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) - (export "__realloc" (func $~lib/rt/tlsf/__realloc)) - (export "__free" (func $~lib/rt/tlsf/__free)) - (export "__retain" (func $~lib/rt/purerc/__retain)) - (export "__release" (func $~lib/rt/purerc/__release)) - (export "__collect" (func $~lib/rt/purerc/__collect)) - (export "__instanceof" (func $~lib/rt/common/__instanceof)) - (export "__typeinfo" (func $~lib/rt/common/__typeinfo)) + (export "__retain" (func $~lib/rt/pure/__retain)) + (export "__release" (func $~lib/rt/pure/__release)) + (export "__collect" (func $~lib/rt/pure/__collect)) + (export "__instanceof" (func $~lib/rt/__instanceof)) + (export "__typeinfo" (func $~lib/rt/__typeinfo)) (start $start) (func $rc/rereturn/Ref#constructor (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 @@ -41,7 +39,7 @@ i32.const 0 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -55,9 +53,36 @@ ) (func $start:rc/rereturn (; 4 ;) (type $FUNCSIG$v) call $rc/rereturn/rereturnRef - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/markGray (; 5 ;) (type $FUNCSIG$vi) (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/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -199,7 +224,7 @@ end i32.eq if - block $~lib/rt/tlsf/SETHEAD|inlined.1 + block $~lib/rt/tlsf/SETHEAD|inlined.0 local.get $0 local.set $11 local.get $4 @@ -236,7 +261,7 @@ i32.load offset=4 end local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 + block $~lib/rt/tlsf/SETSL|inlined.0 local.get $0 local.set $11 local.get $4 @@ -275,7 +300,7 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -579,7 +604,7 @@ local.get $1 i32.store offset=16 end - block $~lib/rt/tlsf/SETHEAD|inlined.2 + block $~lib/rt/tlsf/SETHEAD|inlined.1 local.get $0 local.set $12 local.get $9 @@ -608,7 +633,7 @@ i32.shl i32.or i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 + block $~lib/rt/tlsf/SETSL|inlined.1 local.get $0 local.set $3 local.get $9 @@ -639,768 +664,396 @@ i32.store offset=4 end ) - (func $~lib/rt/tlsf/addMemory (; 7 ;) (type $FUNCSIG$iiii) (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) + (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $1 + i32.load + local.set $2 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.const 1 + i32.and + i32.eqz i32.eqz if i32.const 0 i32.const 24 - i32.const 384 - i32.const 4 + i32.const 530 + i32.const 2 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 24 - i32.const 394 - 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 24 - i32.const 406 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - end + local.get $1 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end local.get $0 - local.get $8 + local.get $1 call $~lib/rt/tlsf/insertBlock - i32.const 1 ) - (func $~lib/rt/tlsf/initializeRoot (; 8 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/scanBlack (; 9 ;) (type $FUNCSIG$vi) (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 (; 10 ;) (type $FUNCSIG$vi) (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 (; 11 ;) (type $FUNCSIG$vi) (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 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/__collect (; 12 ;) (type $FUNCSIG$v) (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and + global.get $~lib/rt/pure/ROOTS local.set $0 - current_memory + local.get $0 local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end block $break|0 - i32.const 0 - local.set $4 + block + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + end loop $repeat|0 - local.get $4 - i32.const 23 + local.get $2 + local.get $3 i32.lt_u i32.eqz br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add + local.get $2 + i32.load local.set $4 + local.get $4 + i32.load offset=4 + local.set $5 + local.get $5 + i32.const 1879048192 + i32.and + i32.const 805306368 + i32.eq + if (result i32) + local.get $5 + 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 $1 + local.get $4 + i32.store + local.get $1 + i32.const 4 + i32.add + local.set $1 + else + local.get $5 + i32.const 1879048192 + i32.and + i32.const 0 + i32.eq + if (result i32) + local.get $5 + i32.const 268435455 + i32.and + i32.eqz + else + i32.const 0 + end + if + global.get $~lib/rt/tlsf/ROOT + local.get $4 + call $~lib/rt/tlsf/freeBlock + else + local.get $4 + local.get $5 + 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 $repeat|0 unreachable end unreachable end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 72 - i32.const 24 - i32.const 446 - 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 (; 10 ;) (type $FUNCSIG$iii) (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 24 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + global.set $~lib/rt/pure/CUR + block $break|1 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 + loop $repeat|1 + local.get $5 + local.get $1 + i32.lt_u i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 + br_if $break|1 + local.get $5 + i32.load + call $~lib/rt/pure/scan local.get $5 i32.const 4 - i32.shl - local.get $4 i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 + local.set $5 + br $repeat|1 + unreachable end - local.set $7 + unreachable end - local.get $7 + block $break|2 + local.get $0 + local.set $5 + loop $repeat|2 + local.get $5 + local.get $1 + i32.lt_u + i32.eqz + br_if $break|2 + local.get $5 + 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 $5 + i32.const 4 + i32.add + local.set $5 + br $repeat|2 + unreachable + end + unreachable + end + local.get $0 + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__instanceof (; 13 ;) (type $FUNCSIG$iii) (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) - current_memory + local.get $0 + i32.const 16 + i32.sub + i32.load offset=8 local.set $2 + global.get $~lib/rt/RTTI_BASE + local.set $3 + local.get $2 + if (result i32) + local.get $2 + local.get $3 + i32.load + i32.le_u + else + i32.const 0 + end + if + loop $continue|0 + local.get $2 + local.get $1 + i32.eq + if + i32.const 1 + return + end + local.get $3 + local.get $2 + i32.const 8 + i32.mul + i32.add + i32.load offset=4 + local.tee $2 + br_if $continue|0 + end + end + i32.const 0 + ) + (func $~lib/rt/__typeinfo (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/RTTI_BASE + local.set $1 + local.get $0 + i32.eqz + if (result i32) + i32.const 1 + else + local.get $0 + local.get $1 + i32.load + i32.gt_u + end + if + i32.const 72 + i32.const 128 + i32.const 23 + i32.const 34 + call $~lib/builtins/abort + unreachable + end local.get $1 - i32.const 65535 + local.get $0 + i32.const 8 + i32.mul i32.add - i32.const 65535 + i32.load + ) + (func $start (; 15 ;) (type $FUNCSIG$v) + call $start:rc/rereturn + ) + (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 i32.const -1 i32.xor i32.and - i32.const 16 - i32.shr_u - local.set $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 168 + i32.const 103 + 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 i32.load - local.set $3 - local.get $2 - i32.const 15 + i32.const 1 i32.and i32.eqz i32.eqz if i32.const 0 - i32.const 24 - i32.const 363 + i32.const 168 + i32.const 106 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 + ) + (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + global.get $~lib/heap/HEAP_BASE + i32.gt_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 + local.get $0 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store + call $~lib/rt/pure/increment end + local.get $0 ) - (func $~lib/rt/tlsf/allocateBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 24 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1606,341 +1259,16 @@ end end ) - (func $~lib/rt/tlsf/reallocateBlock (; 16 ;) (type $FUNCSIG$iiii) (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.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.set $4 - local.get $4 - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 491 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32) - 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 - end - local.set $6 - local.get $6 - i32.load - local.set $7 - local.get $7 - i32.const 1 - i32.and - if - local.get $4 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.add - local.get $7 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $5 - local.get $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 - i32.load offset=4 - i32.store offset=4 - local.get $8 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $8 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $8 - ) - (func $~lib/rt/tlsf/__realloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 552 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 24 - i32.const 553 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (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 24 - i32.const 530 - 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 - ) - (func $~lib/rt/tlsf/__free (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 560 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 24 - i32.const 561 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/rt/purerc/increment (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 103 - 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 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/common/__typeinfo (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 - local.get $0 - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - i32.load - i32.gt_u - end - if - i32.const 184 - i32.const 240 - i32.const 55 - i32.const 34 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/purerc/growRoots (; 23 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 19 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.get $0 i32.sub local.set $1 @@ -1966,26 +1294,26 @@ local.get $1 call $~lib/memory/memory.copy local.get $5 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $5 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.get $4 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $1 local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1994,9 +1322,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -2014,7 +1342,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 114 i32.const 13 call $~lib/builtins/abort @@ -2028,7 +1356,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $1 i32.const -2147483648 i32.and @@ -2053,7 +1381,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 123 i32.const 15 call $~lib/builtins/abort @@ -2061,7 +1389,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and i32.eqz @@ -2081,7 +1409,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end else local.get $0 @@ -2098,323 +1426,22 @@ end end ) - (func $~lib/rt/purerc/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (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/builtins/__visit_members - end - ) - (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (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/builtins/__visit_members - ) - (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (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/purerc/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/builtins/__visit_members - end - end - ) - (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (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 - i32.const 16 - i32.add - i32.const 5 - call $~lib/builtins/__visit_members - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/rt/purerc/__collect (; 31 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - local.get $0 - local.set $1 - block $break|0 - block - local.get $1 - local.set $2 - global.get $~lib/rt/purerc/CUR - local.set $3 - end - loop $repeat|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 - local.get $2 - i32.load - local.set $4 - local.get $4 - i32.load offset=4 - local.set $5 - local.get $5 - i32.const 1879048192 - i32.and - i32.const 805306368 - i32.eq - if (result i32) - local.get $5 - i32.const 268435455 - i32.and - i32.const 0 - i32.gt_u - else - i32.const 0 - end - if - local.get $4 - call $~lib/rt/purerc/markGray - local.get $1 - local.get $4 - i32.store - local.get $1 - i32.const 4 - i32.add - local.set $1 - else - local.get $5 - i32.const 1879048192 - i32.and - i32.const 0 - i32.eq - if (result i32) - local.get $5 - i32.const 268435455 - i32.and - i32.eqz - else - i32.const 0 - end - if - global.get $~lib/rt/tlsf/ROOT - local.get $4 - call $~lib/rt/tlsf/freeBlock - else - local.get $4 - local.get $5 - 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 $repeat|0 - unreachable - end - unreachable - end - local.get $1 - global.set $~lib/rt/purerc/CUR - block $break|1 - local.get $0 - local.set $5 - loop $repeat|1 - local.get $5 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 - local.get $5 - i32.load - call $~lib/rt/purerc/scan - local.get $5 - i32.const 4 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - block $break|2 - local.get $0 - local.set $5 - loop $repeat|2 - local.get $5 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 - local.get $5 - 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/purerc/collectWhite - local.get $5 - i32.const 4 - i32.add - local.set $5 - br $repeat|2 - unreachable - end - unreachable - end - local.get $0 - global.set $~lib/rt/purerc/CUR - ) - (func $~lib/rt/common/__instanceof (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/pure/__visit (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - i32.const 16 - i32.sub - i32.load offset=8 - local.set $2 - global.get $~lib/builtins/RTTI_BASE - local.set $3 - local.get $2 - if (result i32) - local.get $2 - local.get $3 - i32.load - i32.le_u - else - i32.const 0 - end - if - loop $continue|0 - local.get $2 - local.get $1 - i32.eq - if - i32.const 1 - return - end - local.get $3 - local.get $2 - i32.const 8 - i32.mul - i32.add - i32.load offset=4 - local.tee $2 - br_if $continue|0 - end - end - i32.const 0 - ) - (func $start (; 33 ;) (type $FUNCSIG$v) - call $start:rc/rereturn - ) - (func $~lib/rt/purerc/__visit (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -2456,7 +1483,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -2472,7 +1499,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 74 i32.const 17 call $~lib/builtins/abort @@ -2485,7 +1512,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -2493,7 +1520,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -2519,7 +1546,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 85 i32.const 6 call $~lib/builtins/abort @@ -2537,7 +1564,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -2546,7 +1573,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -2556,7 +1583,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 96 i32.const 24 call $~lib/builtins/abort @@ -2564,7 +1591,7 @@ end end ) - (func $~lib/builtins/__visit_members (; 35 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block end @@ -2607,7 +1634,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable @@ -2621,6 +1648,767 @@ unreachable end ) - (func $null (; 36 ;) (type $FUNCSIG$v) + (func $~lib/rt/tlsf/addMemory (; 25 ;) (type $FUNCSIG$iiii) (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 24 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 24 + i32.const 394 + 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 24 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 26 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 24 + i32.const 446 + 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 (; 28 ;) (type $FUNCSIG$iii) (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 24 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 30 ;) (type $FUNCSIG$viii) (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 24 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 24 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) + (func $null (; 33 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index cab17a7b..64fdc911 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -1,108 +1,157 @@ (module (type $FUNCSIG$ii (func (param i32) (result i32))) - (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$v (func)) - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$i (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) (memory $0 1) - (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\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 112) "$\00\00\00\01\00\00\00\10\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 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 224) "(\00\00\00\01\00\00\00\10\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 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 104) "$\00\00\00\01\00\00\00\10\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 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") (global $rc/ternary-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 424)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "test1" (func $rc/ternary-mismatch/test1)) (export "test2" (func $rc/ternary-mismatch/test2)) (start $start) - (func $rc/ternary-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $rc/ternary-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$i) (result i32) + i32.const 0 + i32.const 17 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + ) + (func $rc/ternary-mismatch/test1 (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.eqz + if (result i32) + call $rc/ternary-mismatch/Ref#constructor + else + global.get $rc/ternary-mismatch/gloRef + call $~lib/rt/pure/__retain + end + ) + (func $rc/ternary-mismatch/test2 (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + if (result i32) + global.get $rc/ternary-mismatch/gloRef + call $~lib/rt/pure/__retain + else + call $rc/ternary-mismatch/Ref#constructor + end + ) + (func $start:rc/ternary-mismatch (; 7 ;) (type $FUNCSIG$v) + call $rc/ternary-mismatch/Ref#constructor + global.set $rc/ternary-mismatch/gloRef + i32.const 1 + call $rc/ternary-mismatch/test1 + call $~lib/rt/pure/__release + i32.const 0 + call $rc/ternary-mismatch/test1 + call $~lib/rt/pure/__release + i32.const 1 + call $rc/ternary-mismatch/test2 + call $~lib/rt/pure/__release + i32.const 0 + call $rc/ternary-mismatch/test2 + call $~lib/rt/pure/__release + global.get $rc/ternary-mismatch/gloRef + call $~lib/rt/pure/__release + ) + (func $start (; 8 ;) (type $FUNCSIG$v) + call $start:rc/ternary-mismatch + ) + (func $~lib/rt/pure/increment (; 9 ;) (type $FUNCSIG$vi) (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 17 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 + i32.const 24 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 24 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 400 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment end local.get $0 ) - (func $rc/ternary-mismatch/getRef (; 5 ;) (type $FUNCSIG$i) (result i32) - i32.const 0 - call $rc/ternary-mismatch/Ref#constructor - ) - (func $rc/ternary-mismatch/test1 (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - if (result i32) - call $rc/ternary-mismatch/getRef - else - global.get $rc/ternary-mismatch/gloRef - call $~lib/rt/purerc/__retain - end - ) - (func $rc/ternary-mismatch/test2 (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - if (result i32) - global.get $rc/ternary-mismatch/gloRef - call $~lib/rt/purerc/__retain - else - call $rc/ternary-mismatch/getRef - end - ) - (func $~lib/rt/tlsf/removeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (; 11 ;) (type $FUNCSIG$vii) (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 + local.tee $3 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 275 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 -4 + i32.and + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -111,50 +160,43 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 277 i32.const 13 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $4 - local.get $3 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $2 + i32.const 0 else + local.get $2 i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 - local.get $3 - local.get $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $5 - local.get $4 - i32.const 8 - i32.const 1 + local.set $2 + local.get $3 + i32.const 7 i32.sub - i32.sub - local.set $4 end - local.get $4 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 16 i32.lt_u else @@ -163,118 +205,83 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 290 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 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 if - local.get $6 - local.get $7 + local.get $5 + local.get $4 i32.store offset=20 end - local.get $7 + local.get $4 if - local.get $7 - local.get $6 + local.get $4 + local.get $5 i32.store offset=16 end + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 local.get $1 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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.eq + if + local.get $3 i32.const 4 i32.shl - local.get $8 + local.get $2 i32.add i32.const 2 i32.shl + local.get $0 i32.add - i32.load offset=96 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.0 - 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 - end - local.get $7 + local.get $4 + i32.store offset=96 + local.get $4 i32.eqz if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -284,24 +291,18 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 12 ;) (type $FUNCSIG$vii) (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 80 + i32.const 72 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -309,56 +310,42 @@ end local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $3 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 205 i32.const 13 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - local.set $4 - local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $1 i32.load - local.set $5 - local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 i32.const 1 i32.and if - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.const 16 i32.add local.get $5 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.add - local.set $3 - local.get $3 + local.tee $2 i32.const 1073741808 i32.lt_u if @@ -366,110 +353,91 @@ local.get $4 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $2 + local.get $3 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $3 i32.store - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 + 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 $2 + local.get $3 i32.const 2 i32.and if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 + local.get $1 + i32.const 4 + i32.sub i32.load - local.set $6 - local.get $6 + local.tee $2 + i32.load + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 226 i32.const 15 call $~lib/builtins/abort unreachable end local.get $6 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.const 16 i32.add - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.add - local.set $7 - local.get $7 + local.tee $7 i32.const 1073741808 i32.lt_u - if + if (result i32) local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $3 + local.get $2 local.get $6 i32.const 3 i32.and local.get $7 i32.or - local.tee $2 + local.tee $3 i32.store - local.get $3 - local.set $1 + local.get $2 + else + local.get $1 end + local.set $1 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 + local.get $3 + i32.const -4 i32.and - local.set $8 - local.get $8 + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -478,23 +446,22 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 241 i32.const 13 call $~lib/builtins/abort unreachable end + local.get $4 local.get $1 i32.const 16 i32.add - local.get $8 + local.get $2 i32.add - local.get $4 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 80 + i32.const 72 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -505,44 +472,37 @@ i32.sub local.get $1 i32.store - local.get $8 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $9 - local.get $8 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $10 + local.set $4 + i32.const 0 else + local.get $2 i32.const 31 - local.get $8 + local.get $2 i32.clz i32.sub - local.set $9 - local.get $8 - local.get $9 + local.tee $2 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $10 - local.get $9 - i32.const 8 - i32.const 1 + local.set $4 + local.get $2 + i32.const 7 i32.sub - i32.sub - local.set $9 end - local.get $9 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $4 i32.const 16 i32.lt_u else @@ -551,116 +511,81 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 258 i32.const 13 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $11 + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.set $2 local.get $1 i32.const 0 i32.store offset=16 local.get $1 - local.get $11 + local.get $2 i32.store offset=20 - local.get $11 + local.get $2 if - local.get $11 + local.get $2 local.get $1 i32.store offset=16 end - block $~lib/rt/tlsf/SETHEAD|inlined.1 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $1 + i32.store offset=96 local.get $0 local.get $0 i32.load i32.const 1 - local.get $9 + local.get $3 i32.shl i32.or i32.store - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 ) - (func $~lib/rt/tlsf/freeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $2 i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -677,1057 +602,249 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 + (func $~lib/rt/__typeinfo (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.eqz if (result i32) - i32.const 1 - else local.get $0 - local.get $1 + i32.const 256 i32.load i32.gt_u + else + i32.const 1 end if - i32.const 128 - i32.const 184 - i32.const 55 + i32.const 120 + i32.const 176 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/tlsf/addMemory (; 12 ;) (type $FUNCSIG$iiii) (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 80 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 80 - i32.const 394 - 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 80 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 13 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 + i32.const 3 i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 240 - i32.const 80 - i32.const 446 - 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 (; 15 ;) (type $FUNCSIG$iii) (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 80 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 + i32.load ) - (func $~lib/rt/tlsf/prepareBlock (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (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 80 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 18 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 80 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 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 + local.get $0 + local.get $1 i32.eq - if - br $~lib/util/memory/memmove|inlined.0 - end - local.get $5 - local.get $4 + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 i32.lt_u if - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 + loop $continue|0 + local.get $0 + i32.const 7 + i32.and if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + 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 $continue|0 + end + end + loop $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 $continue|1 end end end + loop $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 $continue|2 + end + end else - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 + loop $continue|3 + local.get $0 local.get $3 + i32.add + i32.const 7 + i32.and if - local.get $5 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 local.get $3 i32.const 1 i32.sub local.tee $3 i32.add - local.get $4 + local.get $1 local.get $3 i32.add i32.load8_u i32.store8 - br $continue|5 + br $continue|3 end end + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end end end end ) - (func $~lib/rt/purerc/growRoots (; 21 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 16 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/CUR - local.get $0 - i32.sub - local.set $1 - local.get $1 - i32.const 2 - i32.mul + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS local.tee $2 - i32.const 64 - i32.const 2 + i32.sub + local.tee $1 + i32.const 1 i32.shl - local.tee $3 - local.get $2 - local.get $3 + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 i32.gt_u select - local.set $4 - local.get $4 + local.tee $3 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $5 - local.get $0 + local.tee $0 + local.get $2 local.get $1 call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 17 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1736,26 +853,23 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $2 i32.const 268435455 i32.and - local.set $2 + local.set $1 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 i32.const 24 @@ -1764,7 +878,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 1 i32.eq if @@ -1772,29 +886,23 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members - local.get $1 + call $~lib/rt/__visit_members + local.get $2 i32.const -2147483648 i32.and - i32.eqz 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 - 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 + local.get $1 i32.const 0 - i32.gt_u - i32.eqz + i32.le_u if i32.const 0 i32.const 24 @@ -1805,143 +913,54 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and - i32.eqz if local.get $0 - i32.const -2147483648 - i32.const 805306368 - i32.or - local.get $2 + 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/purerc/appendRoot + 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/purerc/__release (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 400 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $start:rc/ternary-mismatch (; 25 ;) (type $FUNCSIG$v) - i32.const 0 - call $rc/ternary-mismatch/Ref#constructor - global.set $rc/ternary-mismatch/gloRef - i32.const 1 - call $rc/ternary-mismatch/test1 - call $~lib/rt/purerc/__release - i32.const 0 - call $rc/ternary-mismatch/test1 - call $~lib/rt/purerc/__release - i32.const 1 - call $rc/ternary-mismatch/test2 - call $~lib/rt/purerc/__release - i32.const 0 - call $rc/ternary-mismatch/test2 - call $~lib/rt/purerc/__release - global.get $rc/ternary-mismatch/gloRef - call $~lib/rt/purerc/__release - ) - (func $start (; 26 ;) (type $FUNCSIG$v) - call $start:rc/ternary-mismatch - ) - (func $~lib/rt/purerc/increment (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/purerc/markGray (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -1949,9 +968,7 @@ if local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 268435456 i32.or @@ -1960,32 +977,27 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and - i32.const 0 - i32.or i32.store offset=4 local.get $0 i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 31 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -1998,13 +1010,11 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 536870912 i32.or @@ -2013,16 +1023,15 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 32 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 536870912 @@ -2040,17 +1049,15 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 33 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) + (func $~lib/rt/pure/__visit (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 400 i32.lt_u if return @@ -2058,205 +1065,673 @@ local.get $0 i32.const 16 i32.sub - local.set $2 + local.set $0 block $break|0 block $case5|0 block $case4|0 block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if 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 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end br $case5|0 end - block - local.get $2 - call $~lib/rt/purerc/decrement - br $break|0 - unreachable - end - unreachable - end - block - 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 24 - i32.const 74 - 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/purerc/markGray + 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 24 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/scan + 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 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 85 - 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/purerc/scanBlack 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 24 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/collectWhite + 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 - unreachable + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 24 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $switch$1$case$16 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 1 + i32.sub + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default end unreachable end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/tlsf/addMemory (; 26 ;) (type $FUNCSIG$viii) (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.eqz + i32.const 72 + i32.const 384 + 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 24 - i32.const 96 - i32.const 24 + i32.const 72 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 72 + i32.const 406 + i32.const 4 call $~lib/builtins/abort unreachable end end - ) - (func $~lib/builtins/__visit_members (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return end - block $switch$1$leave - block $switch$1$case$16 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default - end - block - block - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - return - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - end - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - 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/initializeRoot (; 27 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if unreachable end + i32.const 400 + i32.const 0 + i32.store + i32.const 1968 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 400 + i32.const 1984 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 400 + global.set $~lib/rt/tlsf/ROOT ) - (func $null (; 35 ;) (type $FUNCSIG$v) + (func $~lib/rt/tlsf/prepareSize (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 72 + i32.const 446 + 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 (; 29 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 72 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 31 ;) (type $FUNCSIG$viii) (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 72 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 72 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 72 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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 $null (; 34 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/rc/ternary-mismatch.untouched.wat b/tests/compiler/rc/ternary-mismatch.untouched.wat index cab17a7b..eedc8d9f 100644 --- a/tests/compiler/rc/ternary-mismatch.untouched.wat +++ b/tests/compiler/rc/ternary-mismatch.untouched.wat @@ -1,33 +1,33 @@ (module (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$v (func)) + (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) (memory $0 1) - (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\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 112) "$\00\00\00\01\00\00\00\10\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 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 224) "(\00\00\00\01\00\00\00\10\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 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\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 56) "\1e\00\00\00\01\00\00\00\10\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 104) "$\00\00\00\01\00\00\00\10\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 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) (global $rc/ternary-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 424)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 256)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 400)) (export "memory" (memory $0)) (export "test1" (func $rc/ternary-mismatch/test1)) (export "test2" (func $rc/ternary-mismatch/test2)) @@ -39,7 +39,7 @@ i32.const 0 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -54,19 +54,102 @@ call $rc/ternary-mismatch/getRef else global.get $rc/ternary-mismatch/gloRef - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain end ) (func $rc/ternary-mismatch/test2 (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 if (result i32) global.get $rc/ternary-mismatch/gloRef - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain else call $rc/ternary-mismatch/getRef end ) - (func $~lib/rt/tlsf/removeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $start:rc/ternary-mismatch (; 8 ;) (type $FUNCSIG$v) + i32.const 0 + call $rc/ternary-mismatch/Ref#constructor + global.set $rc/ternary-mismatch/gloRef + i32.const 1 + call $rc/ternary-mismatch/test1 + call $~lib/rt/pure/__release + i32.const 0 + call $rc/ternary-mismatch/test1 + call $~lib/rt/pure/__release + i32.const 1 + call $rc/ternary-mismatch/test2 + call $~lib/rt/pure/__release + i32.const 0 + call $rc/ternary-mismatch/test2 + call $~lib/rt/pure/__release + global.get $rc/ternary-mismatch/gloRef + call $~lib/rt/pure/__release + ) + (func $start (; 9 ;) (type $FUNCSIG$v) + call $start:rc/ternary-mismatch + ) + (func $~lib/rt/pure/increment (; 10 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 11 ;) (type $FUNCSIG$ii) (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 $~lib/rt/tlsf/removeBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -86,7 +169,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 275 i32.const 13 call $~lib/builtins/abort @@ -111,7 +194,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 277 i32.const 13 call $~lib/builtins/abort @@ -163,7 +246,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 290 i32.const 13 call $~lib/builtins/abort @@ -284,7 +367,7 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -301,7 +384,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 203 i32.const 13 call $~lib/builtins/abort @@ -316,7 +399,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 205 i32.const 13 call $~lib/builtins/abort @@ -415,7 +498,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 226 i32.const 15 call $~lib/builtins/abort @@ -478,7 +561,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 241 i32.const 13 call $~lib/builtins/abort @@ -494,7 +577,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 242 i32.const 13 call $~lib/builtins/abort @@ -551,7 +634,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 258 i32.const 13 call $~lib/builtins/abort @@ -648,7 +731,7 @@ i32.store offset=4 end ) - (func $~lib/rt/tlsf/freeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load @@ -660,7 +743,7 @@ i32.eqz if i32.const 0 - i32.const 80 + i32.const 72 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -677,9 +760,9 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 i32.eqz @@ -692,9 +775,9 @@ i32.gt_u end if - i32.const 128 - i32.const 184 - i32.const 55 + i32.const 120 + i32.const 176 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable @@ -706,768 +789,7 @@ i32.add i32.load ) - (func $~lib/rt/tlsf/addMemory (; 12 ;) (type $FUNCSIG$iiii) (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 80 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 80 - i32.const 394 - 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 80 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 13 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 240 - i32.const 80 - i32.const 446 - 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 (; 15 ;) (type $FUNCSIG$iii) (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 80 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 17 ;) (type $FUNCSIG$viii) (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 80 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 18 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 80 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 80 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 16 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1673,16 +995,16 @@ end end ) - (func $~lib/rt/purerc/growRoots (; 21 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 17 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.get $0 i32.sub local.set $1 @@ -1708,26 +1030,26 @@ local.get $1 call $~lib/memory/memory.copy local.get $5 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $5 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.get $4 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $1 local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1736,9 +1058,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 19 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1749,7 +1071,7 @@ i32.and local.set $2 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 @@ -1772,7 +1094,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $1 i32.const -2147483648 i32.and @@ -1805,7 +1127,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and i32.eqz @@ -1825,7 +1147,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end else local.get $0 @@ -1842,101 +1164,18 @@ end end ) - (func $~lib/rt/purerc/__release (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $start:rc/ternary-mismatch (; 25 ;) (type $FUNCSIG$v) - i32.const 0 - call $rc/ternary-mismatch/Ref#constructor - global.set $rc/ternary-mismatch/gloRef - i32.const 1 - call $rc/ternary-mismatch/test1 - call $~lib/rt/purerc/__release - i32.const 0 - call $rc/ternary-mismatch/test1 - call $~lib/rt/purerc/__release - i32.const 1 - call $rc/ternary-mismatch/test2 - call $~lib/rt/purerc/__release - i32.const 0 - call $rc/ternary-mismatch/test2 - call $~lib/rt/purerc/__release - global.get $rc/ternary-mismatch/gloRef - call $~lib/rt/purerc/__release - ) - (func $start (; 26 ;) (type $FUNCSIG$v) - call $start:rc/ternary-mismatch - ) - (func $~lib/rt/purerc/increment (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/purerc/markGray (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1960,10 +1199,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -1978,9 +1217,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 31 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -1998,7 +1237,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -2013,11 +1252,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 32 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -2040,17 +1279,17 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 33 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -2092,7 +1331,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -2121,7 +1360,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -2129,7 +1368,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -2173,7 +1412,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -2182,7 +1421,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -2200,7 +1439,7 @@ end end ) - (func $~lib/builtins/__visit_members (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 26 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block end @@ -2243,7 +1482,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable @@ -2257,6 +1496,767 @@ unreachable end ) + (func $~lib/rt/tlsf/addMemory (; 27 ;) (type $FUNCSIG$iiii) (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 72 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 72 + i32.const 394 + 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 72 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 28 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 72 + i32.const 446 + 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 (; 30 ;) (type $FUNCSIG$iii) (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 72 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 32 ;) (type $FUNCSIG$viii) (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 72 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 72 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 72 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) (func $null (; 35 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/retain-release.optimized.wat b/tests/compiler/retain-release.optimized.wat index 82aea40b..fb250b52 100644 --- a/tests/compiler/retain-release.optimized.wat +++ b/tests/compiler/retain-release.optimized.wat @@ -7,472 +7,135 @@ (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00e\00r\00r\00o\00r\00") - (data (i32.const 40) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00r\00e\00t\00a\00i\00n\00-\00r\00e\00l\00e\00a\00s\00e\00.\00t\00s\00") + (data (i32.const 8) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00e\00r\00r\00o\00r") + (data (i32.const 40) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00r\00e\00t\00a\00i\00n\00-\00r\00e\00l\00e\00a\00s\00e\00.\00t\00s") (table $0 1 funcref) - (elem (i32.const 0) $null) + (elem (i32.const 0) $retain-release/receiveRef) (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/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 92)) (export "memory" (memory $0)) (export "returnRef" (func $retain-release/returnRef)) (export "receiveRef" (func $retain-release/receiveRef)) - (export "receiveRefDrop" (func $retain-release/receiveRefDrop)) - (export "receiveRefRetain" (func $retain-release/receiveRefRetain)) + (export "receiveRefDrop" (func $retain-release/receiveRef)) + (export "receiveRefRetain" (func $retain-release/receiveRef)) (export "takeRef" (func $retain-release/takeRef)) - (export "provideRef" (func $retain-release/provideRef)) + (export "provideRef" (func $retain-release/receiveRef)) (export "takeReturnRef" (func $retain-release/takeReturnRef)) - (export "provideReceiveRef" (func $retain-release/provideReceiveRef)) + (export "provideReceiveRef" (func $retain-release/receiveRef)) (export "newRef" (func $retain-release/newRef)) (export "assignGlobal" (func $retain-release/assignGlobal)) (export "assignField" (func $retain-release/assignField)) - (export "scopeBlock" (func $retain-release/scopeBlock)) - (export "scopeBlockToUninitialized" (func $retain-release/scopeBlockToUninitialized)) - (export "scopeBlockToInitialized" (func $retain-release/scopeBlockToInitialized)) - (export "scopeBlockToConditional" (func $retain-release/scopeBlockToConditional)) - (export "scopeTopLevelUninitialized" (func $retain-release/scopeTopLevelUninitialized)) - (export "scopeTopLevelInitialized" (func $retain-release/scopeTopLevelInitialized)) - (export "scopeTopLevelConditional" (func $retain-release/scopeTopLevelConditional)) - (export "scopeIf" (func $retain-release/scopeIf)) - (export "scopeIfElse" (func $retain-release/scopeIfElse)) - (export "scopeWhile" (func $retain-release/scopeWhile)) - (export "scopeDo" (func $retain-release/scopeDo)) - (export "scopeFor" (func $retain-release/scopeFor)) - (export "scopeBreak" (func $retain-release/scopeBreak)) - (export "scopeContinue" (func $retain-release/scopeContinue)) + (export "scopeBlock" (func $retain-release/receiveRef)) + (export "scopeBlockToUninitialized" (func $retain-release/receiveRef)) + (export "scopeBlockToInitialized" (func $retain-release/receiveRef)) + (export "scopeBlockToConditional" (func $retain-release/takeRef)) + (export "scopeTopLevelUninitialized" (func $retain-release/receiveRef)) + (export "scopeTopLevelInitialized" (func $retain-release/receiveRef)) + (export "scopeTopLevelConditional" (func $retain-release/takeRef)) + (export "scopeIf" (func $retain-release/takeRef)) + (export "scopeIfElse" (func $retain-release/takeRef)) + (export "scopeWhile" (func $retain-release/takeRef)) + (export "scopeDo" (func $retain-release/takeRef)) + (export "scopeFor" (func $retain-release/takeRef)) + (export "scopeBreak" (func $retain-release/takeRef)) + (export "scopeContinue" (func $retain-release/takeRef)) (export "scopeThrow" (func $retain-release/scopeThrow)) (export "scopeUnreachable" (func $retain-release/scopeUnreachable)) - (export "callInline" (func $retain-release/callInline)) - (export "provideRefInline" (func $retain-release/provideRefInline)) - (export "receiveRefInline" (func $retain-release/receiveRefInline)) - (export "receiveRefInlineDrop" (func $retain-release/receiveRefInlineDrop)) + (export "callInline" (func $retain-release/receiveRef)) + (export "provideRefInline" (func $retain-release/receiveRef)) + (export "receiveRefInline" (func $retain-release/receiveRef)) + (export "receiveRefInlineDrop" (func $retain-release/receiveRef)) (export "provideRefIndirect" (func $retain-release/provideRefIndirect)) (export "receiveRefIndirect" (func $retain-release/receiveRefIndirect)) - (export "receiveRefIndirectDrop" (func $retain-release/receiveRefIndirectDrop)) + (export "receiveRefIndirectDrop" (func $retain-release/receiveRefIndirect)) (start $start) - (func $retain-release/Ref#constructor (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.eqz - if - i32.const 0 - i32.const 17 - call $~lib/rt/stub/__alloc - call $~lib/rt/stub/__retain - local.set $0 - end + (func $retain-release/Ref#constructor (; 1 ;) (type $FUNCSIG$i) (result i32) + i32.const 0 + i32.const 17 + call $~lib/rt/stub/__alloc + ) + (func $retain-release/returnRef (; 2 ;) (type $FUNCSIG$i) (result i32) + global.get $retain-release/REF + ) + (func $retain-release/receiveRef (; 3 ;) (type $FUNCSIG$v) + nop + ) + (func $retain-release/takeRef (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) + nop + ) + (func $retain-release/takeReturnRef (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 ) - (func $retain-release/Target#constructor (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.eqz - if - i32.const 4 - i32.const 18 - call $~lib/rt/stub/__alloc - call $~lib/rt/stub/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - ) - (func $start:retain-release (; 3 ;) (type $FUNCSIG$v) - i32.const 0 + (func $retain-release/newRef (; 6 ;) (type $FUNCSIG$v) call $retain-release/Ref#constructor - global.set $retain-release/REF - i32.const 0 - call $retain-release/Target#constructor - global.set $retain-release/TARGET - ) - (func $retain-release/returnRef (; 4 ;) (type $FUNCSIG$i) (result i32) - global.get $retain-release/REF - call $~lib/rt/stub/__retain - ) - (func $retain-release/receiveRef (; 5 ;) (type $FUNCSIG$v) - (local $0 i32) - call $retain-release/returnRef - local.tee $0 - i32.eqz drop - local.get $0 - call $~lib/rt/stub/__release ) - (func $retain-release/receiveRefDrop (; 6 ;) (type $FUNCSIG$v) - call $retain-release/returnRef - call $~lib/rt/stub/__release - ) - (func $retain-release/receiveRefRetain (; 7 ;) (type $FUNCSIG$v) - (local $0 i32) - call $retain-release/returnRef - local.set $0 - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/takeRef (; 8 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - call $~lib/rt/stub/__retain - drop - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/provideRef (; 9 ;) (type $FUNCSIG$v) + (func $retain-release/assignGlobal (; 7 ;) (type $FUNCSIG$v) global.get $retain-release/REF - call $retain-release/takeRef - ) - (func $retain-release/takeReturnRef (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - call $~lib/rt/stub/__retain - drop - local.get $0 - ) - (func $retain-release/provideReceiveRef (; 11 ;) (type $FUNCSIG$v) - (local $0 i32) - global.get $retain-release/REF - call $retain-release/takeReturnRef - local.tee $0 - i32.eqz - drop - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/newRef (; 12 ;) (type $FUNCSIG$v) - i32.const 0 - call $retain-release/Ref#constructor - call $~lib/rt/stub/__release - ) - (func $retain-release/assignGlobal (; 13 ;) (type $FUNCSIG$v) - global.get $retain-release/REF - global.get $retain-release/glo - call $~lib/rt/stub/__retainRelease global.set $retain-release/glo ) - (func $retain-release/assignField (; 14 ;) (type $FUNCSIG$v) + (func $retain-release/assignField (; 8 ;) (type $FUNCSIG$v) (local $0 i32) global.get $retain-release/TARGET local.tee $0 - global.get $retain-release/REF - local.get $0 i32.load - call $~lib/rt/stub/__retainRelease + drop + local.get $0 + global.get $retain-release/REF i32.store ) - (func $retain-release/scopeBlock (; 15 ;) (type $FUNCSIG$v) - (local $0 i32) - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $0 - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/scopeBlockToUninitialized (; 16 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - i32.const 0 - local.set $0 - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - local.get $0 - call $~lib/rt/stub/__retainRelease - local.set $0 - local.get $1 - call $~lib/rt/stub/__release - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/scopeBlockToInitialized (; 17 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $0 - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - local.get $0 - call $~lib/rt/stub/__retainRelease - local.set $0 - local.get $1 - call $~lib/rt/stub/__release - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/scopeBlockToConditional (; 18 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - (local $2 i32) - i32.const 0 - local.set $1 + (func $retain-release/scopeThrow (; 9 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 if - global.get $retain-release/REF - local.get $1 - call $~lib/rt/stub/__retainRelease - local.set $1 - end - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/stub/__retainRelease - local.set $1 - local.get $2 - call $~lib/rt/stub/__release - local.get $1 - call $~lib/rt/stub/__release - ) - (func $retain-release/scopeTopLevelUninitialized (; 19 ;) (type $FUNCSIG$v) - (local $0 i32) - i32.const 0 - local.set $0 - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/scopeTopLevelInitialized (; 20 ;) (type $FUNCSIG$v) - (local $0 i32) - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $0 - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/scopeTopLevelConditional (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - i32.const 0 - local.set $1 - local.get $0 - if - global.get $retain-release/REF - local.get $1 - call $~lib/rt/stub/__retainRelease - local.set $1 - end - local.get $1 - call $~lib/rt/stub/__release - ) - (func $retain-release/scopeIf (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - if - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - call $~lib/rt/stub/__release - end - ) - (func $retain-release/scopeIfElse (; 23 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - if - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - call $~lib/rt/stub/__release - else - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - call $~lib/rt/stub/__release - end - ) - (func $retain-release/scopeWhile (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - loop $continue|0 - local.get $0 - if - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - call $~lib/rt/stub/__release - br $continue|0 - end - end - ) - (func $retain-release/scopeDo (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - loop $continue|0 - block - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - call $~lib/rt/stub/__release - end - local.get $0 - br_if $continue|0 - end - ) - (func $retain-release/scopeFor (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - block $break|0 - loop $repeat|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 $repeat|0 - unreachable - end + i32.const 24 + i32.const 56 + i32.const 313 + i32.const 4 + call $~lib/builtins/abort unreachable end ) - (func $retain-release/scopeBreak (; 27 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - block $break|0 - loop $continue|0 - local.get $0 - if - 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 - end - end - ) - (func $retain-release/scopeContinue (; 28 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - loop $continue|0 - local.get $0 - if - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - call $~lib/rt/stub/__release - br $continue|0 - end - end - ) - (func $retain-release/scopeThrow (; 29 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - loop $continue|0 - local.get $0 - if - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - local.get $1 - call $~lib/rt/stub/__release - block - i32.const 24 - i32.const 56 - i32.const 310 - i32.const 4 - call $~lib/builtins/abort - unreachable - unreachable - end - unreachable - end - end - ) - (func $retain-release/scopeUnreachable (; 30 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - loop $continue|0 - local.get $0 - if - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $1 - unreachable - local.get $1 - call $~lib/rt/stub/__release - br $continue|0 - end - end - ) - (func $retain-release/callInline (; 31 ;) (type $FUNCSIG$v) - (local $0 i32) - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $0 + (func $retain-release/scopeUnreachable (; 10 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/provideRefInline (; 32 ;) (type $FUNCSIG$v) - (local $0 i32) - global.get $retain-release/REF - call $~lib/rt/stub/__retain - local.set $0 - local.get $0 - call $~lib/rt/stub/__release - ) - (func $retain-release/receiveRefInline (; 33 ;) (type $FUNCSIG$v) - (local $0 i32) - block $retain-release/returnRefInline|inlined.0 (result i32) - global.get $retain-release/REF - call $~lib/rt/stub/__retain + if + unreachable end - local.tee $0 - i32.eqz - drop - local.get $0 - call $~lib/rt/stub/__release ) - (func $retain-release/receiveRefInlineDrop (; 34 ;) (type $FUNCSIG$v) - block $retain-release/returnRefInline|inlined.1 (result i32) - global.get $retain-release/REF - call $~lib/rt/stub/__retain - end - call $~lib/rt/stub/__release - ) - (func $retain-release/provideRefIndirect (; 35 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $retain-release/provideRefIndirect (; 11 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 1 global.set $~lib/argc global.get $retain-release/REF local.get $0 call_indirect (type $FUNCSIG$vi) ) - (func $retain-release/receiveRefIndirect (; 36 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - block (result i32) - i32.const 0 - global.set $~lib/argc - local.get $0 - call_indirect (type $FUNCSIG$i) - local.tee $1 - end - i32.eqz - drop - local.get $1 - call $~lib/rt/stub/__release - ) - (func $retain-release/receiveRefIndirectDrop (; 37 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $retain-release/receiveRefIndirect (; 12 ;) (type $FUNCSIG$vi) (param $0 i32) i32.const 0 global.set $~lib/argc local.get $0 call_indirect (type $FUNCSIG$i) - call $~lib/rt/stub/__release + drop ) - (func $start (; 38 ;) (type $FUNCSIG$v) - call $start:retain-release + (func $start (; 13 ;) (type $FUNCSIG$v) + (local $0 i32) + call $retain-release/Ref#constructor + global.set $retain-release/REF + i32.const 4 + i32.const 18 + call $~lib/rt/stub/__alloc + local.tee $0 + i32.const 0 + i32.store + local.get $0 + global.set $retain-release/TARGET ) - (func $~lib/rt/stub/__alloc (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/stub/__alloc (; 14 ;) (type $FUNCSIG$iii) (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.get $0 i32.const 1073741808 i32.gt_u @@ -482,59 +145,45 @@ global.get $~lib/rt/stub/offset i32.const 16 i32.add - local.set $2 - local.get $2 - local.get $0 local.tee $3 + local.get $0 + i32.const 1 + local.get $0 i32.const 1 - local.tee $4 - local.get $3 - local.get $4 i32.gt_u select i32.add i32.const 15 i32.add - i32.const 15 - i32.const -1 - i32.xor + i32.const -16 i32.and - local.set $5 + local.tee $2 current_memory - local.set $6 - local.get $5 - local.get $6 + local.tee $4 i32.const 16 i32.shl i32.gt_u if - local.get $5 + local.get $4 local.get $2 + local.get $3 i32.sub i32.const 65535 i32.add - i32.const 65535 - i32.const -1 - i32.xor + i32.const -65536 i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $6 - local.tee $4 - local.get $3 - local.tee $7 + local.tee $5 local.get $4 - local.get $7 + local.get $5 i32.gt_s select - local.set $4 - local.get $4 grow_memory i32.const 0 i32.lt_s if - local.get $3 + local.get $5 grow_memory i32.const 0 i32.lt_s @@ -543,29 +192,17 @@ end end end - local.get $5 - global.set $~lib/rt/stub/offset local.get $2 + global.set $~lib/rt/stub/offset + local.get $3 i32.const 16 i32.sub - local.set $8 - local.get $8 + local.tee $2 local.get $1 i32.store offset=8 - local.get $8 + local.get $2 local.get $0 i32.store offset=12 - local.get $2 - ) - (func $~lib/rt/stub/__retain (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - ) - (func $~lib/rt/stub/__retainRelease (; 41 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - ) - (func $~lib/rt/stub/__release (; 42 ;) (type $FUNCSIG$vi) (param $0 i32) - nop - ) - (func $null (; 43 ;) (type $FUNCSIG$v) + local.get $3 ) ) diff --git a/tests/compiler/retain-release.untouched.wat b/tests/compiler/retain-release.untouched.wat index 82aea40b..c07d7eb9 100644 --- a/tests/compiler/retain-release.untouched.wat +++ b/tests/compiler/retain-release.untouched.wat @@ -17,7 +17,7 @@ (global $~lib/argc (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/builtins/HEAP_BASE i32 (i32.const 92)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 92)) (export "memory" (memory $0)) (export "returnRef" (func $retain-release/returnRef)) (export "receiveRef" (func $retain-release/receiveRef)) @@ -374,7 +374,7 @@ block i32.const 24 i32.const 56 - i32.const 310 + i32.const 313 i32.const 4 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index cf7afd43..a51ddc5f 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -1,52 +1,60 @@ (module - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$v (func)) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) - (type $FUNCSIG$vi (func (param i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\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 56) "(\00\00\00\01\00\00\00\10\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 112) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 168) "$\00\00\00\01\00\00\00\10\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 224) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 280) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 56) "$\00\00\00\01\00\00\00\10\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 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 416)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) - (export "__realloc" (func $~lib/rt/tlsf/__realloc)) - (export "__free" (func $~lib/rt/tlsf/__free)) - (export "__retain" (func $~lib/rt/purerc/__retain)) - (export "__release" (func $~lib/rt/purerc/__release)) - (export "__collect" (func $~lib/rt/purerc/__collect)) - (export "__instanceof" (func $~lib/rt/common/__instanceof)) - (export "__typeinfo" (func $~lib/rt/common/__typeinfo)) - (func $~lib/rt/tlsf/removeBlock (; 1 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (export "__collect" (func $~lib/rt/pure/__collect)) + (export "__instanceof" (func $~lib/rt/__instanceof)) + (export "__typeinfo" (func $~lib/rt/__typeinfo)) + (func $~lib/rt/pure/markGray (; 1 ;) (type $FUNCSIG$vi) (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/removeBlock (; 2 ;) (type $FUNCSIG$vii) (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 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -58,17 +66,14 @@ 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 -4 + i32.and + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -83,44 +88,37 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $4 - local.get $3 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $2 + i32.const 0 else + local.get $2 i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 - local.get $3 - local.get $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $5 - local.get $4 - i32.const 8 - i32.const 1 + local.set $2 + local.get $3 + i32.const 7 i32.sub - i32.sub - local.set $4 end - local.get $4 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 16 i32.lt_u else @@ -136,111 +134,76 @@ 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 + local.set $4 + local.get $1 + i32.load offset=16 + local.tee $5 if - local.get $6 - local.get $7 + local.get $5 + local.get $4 i32.store offset=20 end - local.get $7 + local.get $4 if - local.get $7 - local.get $6 + local.get $4 + local.get $5 i32.store offset=16 end + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 local.get $1 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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.eq + if + local.get $3 i32.const 4 i32.shl - local.get $8 + local.get $2 i32.add i32.const 2 i32.shl + local.get $0 i32.add - i32.load offset=96 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.1 - 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 - end - local.get $7 + local.get $4 + i32.store offset=96 + local.get $4 i32.eqz if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 $4 + local.get $3 i32.shl i32.const -1 i32.xor @@ -250,19 +213,13 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 3 ;) (type $FUNCSIG$vii) (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 @@ -275,8 +232,7 @@ end local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $3 i32.const 1 i32.and i32.eqz @@ -288,43 +244,30 @@ call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - local.set $4 - local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $1 i32.load - local.set $5 - local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $5 i32.const 1 i32.and if - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.const 16 i32.add local.get $5 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.add - local.set $3 - local.get $3 + local.tee $2 i32.const 1073741808 i32.lt_u if @@ -332,50 +275,37 @@ local.get $4 call $~lib/rt/tlsf/removeBlock local.get $1 - local.get $2 + local.get $3 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $3 i32.store - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 + 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 $2 + local.get $3 i32.const 2 i32.and if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 + local.get $1 + i32.const 4 + i32.sub i32.load - local.set $6 - local.get $6 + local.tee $2 + i32.load + local.tee $6 i32.const 1 i32.and i32.eqz @@ -388,54 +318,48 @@ unreachable end local.get $6 - i32.const 3 - i32.const -1 - i32.xor + i32.const -4 i32.and i32.const 16 i32.add - local.get $2 - i32.const 3 - i32.const -1 - i32.xor + local.get $3 + i32.const -4 i32.and i32.add - local.set $7 - local.get $7 + local.tee $7 i32.const 1073741808 i32.lt_u - if + if (result i32) local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $3 + local.get $2 local.get $6 i32.const 3 i32.and local.get $7 i32.or - local.tee $2 + local.tee $3 i32.store - local.get $3 - local.set $1 + local.get $2 + else + local.get $1 end + local.set $1 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 + local.get $3 + i32.const -4 i32.and - local.set $8 - local.get $8 + local.tee $2 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -450,14 +374,13 @@ call $~lib/builtins/abort unreachable end + local.get $4 local.get $1 i32.const 16 i32.add - local.get $8 + local.get $2 i32.add - local.get $4 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -471,44 +394,37 @@ i32.sub local.get $1 i32.store - local.get $8 + local.get $2 i32.const 256 i32.lt_u - if - i32.const 0 - local.set $9 - local.get $8 + if (result i32) + local.get $2 i32.const 4 i32.shr_u - local.set $10 + local.set $4 + i32.const 0 else + local.get $2 i32.const 31 - local.get $8 + local.get $2 i32.clz i32.sub - local.set $9 - local.get $8 - local.get $9 + local.tee $2 i32.const 4 i32.sub i32.shr_u - i32.const 1 - i32.const 4 - i32.shl + i32.const 16 i32.xor - local.set $10 - local.get $9 - i32.const 8 - i32.const 1 + local.set $4 + local.get $2 + i32.const 7 i32.sub - i32.sub - local.set $9 end - local.get $9 + local.tee $3 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $4 i32.const 16 i32.lt_u else @@ -523,1247 +439,72 @@ call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $11 + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.set $2 local.get $1 i32.const 0 i32.store offset=16 local.get $1 - local.get $11 + local.get $2 i32.store offset=20 - local.get $11 + local.get $2 if - local.get $11 + local.get $2 local.get $1 i32.store offset=16 end - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $9 + local.get $3 + i32.const 4 i32.shl - i32.or - i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end - ) - (func $~lib/rt/tlsf/addMemory (; 3 ;) (type $FUNCSIG$iiii) (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 24 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 24 - i32.const 394 - 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 24 - i32.const 406 - 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.add i32.const 2 - i32.const 16 - i32.mul - i32.sub - local.set $7 + i32.shl + local.get $0 + i32.add local.get $1 - local.set $8 - local.get $8 - local.get $7 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load i32.const 1 + local.get $3 + i32.shl i32.or - local.get $5 + i32.store + local.get $3 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.shl + local.get $0 i32.add - i32.const 16 - i32.sub - local.set $4 - local.get $4 - i32.const 0 + local.get $3 i32.const 2 - i32.or - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 4 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 72 - i32.const 24 - i32.const 446 - 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 (; 6 ;) (type $FUNCSIG$iii) (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 24 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 8 ;) (type $FUNCSIG$viii) (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 24 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 24 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 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 $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 - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 - if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - local.get $3 - i32.const 1 - i32.sub - local.set $3 - br $continue|2 - end - end - end - else - local.get $4 - i32.const 7 - i32.and - local.get $5 - i32.const 7 - i32.and - i32.eq - if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 - local.get $3 - 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 $continue|5 - end - end - end - end - end - ) - (func $~lib/rt/tlsf/reallocateBlock (; 12 ;) (type $FUNCSIG$iiii) (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.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.set $4 - local.get $4 - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 491 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32) - 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 - end - local.set $6 - local.get $6 - i32.load - local.set $7 - local.get $7 - i32.const 1 - i32.and - if - local.get $4 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.add - local.get $7 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $5 - local.get $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 i32.load offset=4 - i32.store offset=4 - local.get $8 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $8 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 i32.const 1 + local.get $4 + i32.shl i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $8 + i32.store offset=4 ) - (func $~lib/rt/tlsf/__realloc (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 552 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 24 - i32.const 553 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/rt/tlsf/freeBlock (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $2 i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 i32.const 24 @@ -1781,359 +522,24 @@ local.get $1 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/__free (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 560 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 24 - i32.const 561 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/rt/purerc/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 103 - 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 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/common/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 - local.get $0 - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - i32.load - i32.gt_u - end - if - i32.const 184 - i32.const 240 - i32.const 55 - i32.const 34 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/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 - local.get $0 - local.get $1 - call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 - local.get $1 - i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 - i32.add - global.set $~lib/rt/purerc/END - ) - (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END - i32.ge_u - if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 1 - i32.add - global.set $~lib/rt/purerc/CUR - ) - (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (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 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 114 - 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/builtins/__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 128 - i32.const 123 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/common/__typeinfo - i32.const 8 - 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/purerc/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/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - ) - (func $~lib/rt/purerc/markGray (; 23 ;) (type $FUNCSIG$vi) (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/builtins/__visit_members - end - ) - (func $~lib/rt/purerc/scanBlack (; 24 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 5 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and - i32.const 0 - i32.or i32.store offset=4 local.get $0 i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -2146,13 +552,11 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 536870912 i32.or @@ -2161,16 +565,15 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 7 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 536870912 @@ -2188,49 +591,42 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__collect (; 27 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/__collect (; 8 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS + local.tee $5 + local.tee $2 + local.set $3 + global.get $~lib/rt/pure/CUR local.set $0 - local.get $0 - local.set $1 - block $break|0 - block - local.get $1 - local.set $2 - global.get $~lib/rt/purerc/CUR - local.set $3 - end - loop $repeat|0 - local.get $2 + loop $repeat|0 + block $break|0 local.get $3 - i32.lt_u - i32.eqz + local.get $0 + i32.ge_u br_if $break|0 - local.get $2 + local.get $3 i32.load - local.set $4 - local.get $4 + local.tee $4 i32.load offset=4 - local.set $5 - local.get $5 + local.tee $1 i32.const 1879048192 i32.and i32.const 805306368 i32.eq if (result i32) - local.get $5 + local.get $1 i32.const 268435455 i32.and i32.const 0 @@ -2240,122 +636,100 @@ end if local.get $4 - call $~lib/rt/purerc/markGray - local.get $1 + call $~lib/rt/pure/markGray + local.get $2 local.get $4 i32.store - local.get $1 + local.get $2 i32.const 4 i32.add - local.set $1 + local.set $2 else - local.get $5 + i32.const 0 + local.get $1 + i32.const 268435455 + i32.and + i32.eqz + local.get $1 i32.const 1879048192 i32.and - i32.const 0 - i32.eq - if (result i32) - local.get $5 - i32.const 268435455 - i32.and - i32.eqz - else - i32.const 0 - end + select if global.get $~lib/rt/tlsf/ROOT local.get $4 call $~lib/rt/tlsf/freeBlock else local.get $4 - local.get $5 - i32.const -2147483648 - i32.const -1 - i32.xor + local.get $1 + i32.const 2147483647 i32.and i32.store offset=4 end end - local.get $2 + local.get $3 i32.const 4 i32.add - local.set $2 + local.set $3 br $repeat|0 - unreachable end - unreachable end - local.get $1 - global.set $~lib/rt/purerc/CUR - block $break|1 - local.get $0 - local.set $5 - loop $repeat|1 - local.get $5 - local.get $1 - i32.lt_u - i32.eqz + local.get $2 + global.set $~lib/rt/pure/CUR + local.get $5 + local.set $0 + loop $repeat|1 + block $break|1 + local.get $0 + local.get $2 + i32.ge_u br_if $break|1 - local.get $5 + local.get $0 i32.load - call $~lib/rt/purerc/scan - local.get $5 + call $~lib/rt/pure/scan + local.get $0 i32.const 4 i32.add - local.set $5 + local.set $0 br $repeat|1 - unreachable end - unreachable end - block $break|2 - local.get $0 - local.set $5 - loop $repeat|2 - local.get $5 - local.get $1 - i32.lt_u - i32.eqz + local.get $5 + local.set $0 + loop $repeat|2 + block $break|2 + local.get $0 + local.get $2 + i32.ge_u br_if $break|2 - local.get $5 + local.get $0 i32.load - local.set $4 - local.get $4 - local.get $4 + local.tee $1 + local.get $1 i32.load offset=4 - i32.const -2147483648 - i32.const -1 - i32.xor + i32.const 2147483647 i32.and i32.store offset=4 - local.get $4 - call $~lib/rt/purerc/collectWhite - local.get $5 + local.get $1 + call $~lib/rt/pure/collectWhite + local.get $0 i32.const 4 i32.add - local.set $5 + local.set $0 br $repeat|2 - unreachable end - unreachable end - local.get $0 - global.set $~lib/rt/purerc/CUR + local.get $5 + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/common/__instanceof (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) + (func $~lib/rt/__instanceof (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 16 i32.sub i32.load offset=8 - local.set $2 - global.get $~lib/builtins/RTTI_BASE - local.set $3 - local.get $2 + local.tee $0 if (result i32) - local.get $2 - local.get $3 + local.get $0 + i32.const 256 i32.load i32.le_u else @@ -2363,30 +737,369 @@ end if loop $continue|0 - local.get $2 + local.get $0 local.get $1 i32.eq if i32.const 1 return end - local.get $3 - local.get $2 - i32.const 8 - i32.mul + local.get $0 + i32.const 3 + i32.shl + i32.const 256 i32.add i32.load offset=4 - local.tee $2 + local.tee $0 br_if $continue|0 end end i32.const 0 ) - (func $~lib/rt/purerc/__visit (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__typeinfo (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + i32.const 256 + i32.load + i32.gt_u + else + i32.const 1 + end + if + i32.const 72 + i32.const 128 + i32.const 23 + i32.const 34 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 256 + i32.add + i32.load + ) + (func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (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 $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 $continue|0 + end + end + loop $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 $continue|1 + end + end + end + loop $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 $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 $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 $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|3 + end + end + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end + end + end + end + ) + (func $~lib/rt/pure/growRoots (; 12 ;) (type $FUNCSIG$v) + (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 $2 + i32.sub + local.tee $1 + i32.const 1 + i32.shl + local.tee $0 + i32.const 256 local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 256 + i32.gt_u + select + local.tee $3 + i32.const 0 + call $~lib/rt/tlsf/__alloc + local.tee $0 + local.get $2 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $1 + 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 (; 13 ;) (type $FUNCSIG$vi) (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 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 14 ;) (type $FUNCSIG$vi) (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 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 168 + i32.const 114 + 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 168 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + 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/__visit (; 15 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 392 i32.lt_u if return @@ -2394,205 +1107,673 @@ local.get $0 i32.const 16 i32.sub - local.set $2 + local.set $0 block $break|0 block $case5|0 block $case4|0 block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if 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 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end br $case5|0 end - block - local.get $2 - call $~lib/rt/purerc/decrement - br $break|0 - unreachable - end - unreachable - end - block - 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 128 - i32.const 74 - 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/purerc/markGray + 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 168 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/scan + 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 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 85 - 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/purerc/scanBlack 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 168 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/collectWhite + 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 - unreachable + end + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 + end + i32.const 0 + i32.const 168 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__visit_members (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $switch$1$case$16 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 1 + i32.sub + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$default end unreachable end + return + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/tlsf/addMemory (; 17 ;) (type $FUNCSIG$viii) (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.eqz + i32.const 24 + i32.const 384 + 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 128 - i32.const 96 i32.const 24 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 24 + i32.const 406 + i32.const 4 call $~lib/builtins/abort unreachable end end - ) - (func $~lib/builtins/__visit_members (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block + local.get $2 + local.get $1 + i32.sub + local.tee $2 + i32.const 48 + i32.lt_u + if + return end - block $switch$1$leave - block $switch$1$case$16 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$default - end - block - block - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - return - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - end - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - 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/initializeRoot (; 18 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if unreachable end + i32.const 400 + i32.const 0 + i32.store + i32.const 1968 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 400 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 400 + i32.const 1984 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 400 + global.set $~lib/rt/tlsf/ROOT ) - (func $null (; 31 ;) (type $FUNCSIG$v) + (func $~lib/rt/tlsf/prepareSize (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 24 + i32.const 446 + 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 (; 20 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 24 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 22 ;) (type $FUNCSIG$viii) (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 24 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 24 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 24 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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 $null (; 25 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/runtime-full.untouched.wat b/tests/compiler/runtime-full.untouched.wat index cf7afd43..a8c3c97d 100644 --- a/tests/compiler/runtime-full.untouched.wat +++ b/tests/compiler/runtime-full.untouched.wat @@ -1,38 +1,61 @@ (module - (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$v (func)) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) - (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\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 56) "(\00\00\00\01\00\00\00\10\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 112) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 168) "$\00\00\00\01\00\00\00\10\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 224) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 280) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 56) "$\00\00\00\01\00\00\00\10\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 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\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 200) "(\00\00\00\01\00\00\00\10\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 256) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 280)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 416)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 256)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 392)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) - (export "__realloc" (func $~lib/rt/tlsf/__realloc)) - (export "__free" (func $~lib/rt/tlsf/__free)) - (export "__retain" (func $~lib/rt/purerc/__retain)) - (export "__release" (func $~lib/rt/purerc/__release)) - (export "__collect" (func $~lib/rt/purerc/__collect)) - (export "__instanceof" (func $~lib/rt/common/__instanceof)) - (export "__typeinfo" (func $~lib/rt/common/__typeinfo)) - (func $~lib/rt/tlsf/removeBlock (; 1 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (export "__collect" (func $~lib/rt/pure/__collect)) + (export "__instanceof" (func $~lib/rt/__instanceof)) + (export "__typeinfo" (func $~lib/rt/__typeinfo)) + (func $~lib/rt/pure/markGray (; 1 ;) (type $FUNCSIG$vi) (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/removeBlock (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -174,7 +197,7 @@ end i32.eq if - block $~lib/rt/tlsf/SETHEAD|inlined.1 + block $~lib/rt/tlsf/SETHEAD|inlined.0 local.get $0 local.set $11 local.get $4 @@ -211,7 +234,7 @@ i32.load offset=4 end local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 + block $~lib/rt/tlsf/SETSL|inlined.0 local.get $0 local.set $11 local.get $4 @@ -250,7 +273,7 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -554,7 +577,7 @@ local.get $1 i32.store offset=16 end - block $~lib/rt/tlsf/SETHEAD|inlined.2 + block $~lib/rt/tlsf/SETHEAD|inlined.1 local.get $0 local.set $12 local.get $9 @@ -583,7 +606,7 @@ i32.shl i32.or i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 + block $~lib/rt/tlsf/SETSL|inlined.1 local.get $0 local.set $3 local.get $9 @@ -614,766 +637,332 @@ i32.store offset=4 end ) - (func $~lib/rt/tlsf/addMemory (; 3 ;) (type $FUNCSIG$iiii) (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) + (func $~lib/rt/tlsf/freeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) local.get $1 + i32.load + local.set $2 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.const 1 + i32.and + i32.eqz i32.eqz if i32.const 0 i32.const 24 - i32.const 384 - i32.const 4 + i32.const 530 + i32.const 2 call $~lib/builtins/abort unreachable end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 24 - i32.const 394 - 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 24 - i32.const 406 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - end + local.get $1 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end local.get $0 - local.get $8 + local.get $1 call $~lib/rt/tlsf/insertBlock - i32.const 1 ) - (func $~lib/rt/tlsf/initializeRoot (; 4 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/scanBlack (; 5 ;) (type $FUNCSIG$vi) (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 (; 6 ;) (type $FUNCSIG$vi) (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 (; 7 ;) (type $FUNCSIG$vi) (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 + i32.const 16 + i32.add + i32.const 5 + call $~lib/rt/__visit_members + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/__collect (; 8 ;) (type $FUNCSIG$v) (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and + global.get $~lib/rt/pure/ROOTS local.set $0 - current_memory + local.get $0 local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end block $break|0 - i32.const 0 - local.set $4 + block + local.get $1 + local.set $2 + global.get $~lib/rt/pure/CUR + local.set $3 + end loop $repeat|0 - local.get $4 - i32.const 23 + local.get $2 + local.get $3 i32.lt_u i32.eqz br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add + local.get $2 + i32.load local.set $4 + local.get $4 + i32.load offset=4 + local.set $5 + local.get $5 + i32.const 1879048192 + i32.and + i32.const 805306368 + i32.eq + if (result i32) + local.get $5 + 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 $1 + local.get $4 + i32.store + local.get $1 + i32.const 4 + i32.add + local.set $1 + else + local.get $5 + i32.const 1879048192 + i32.and + i32.const 0 + i32.eq + if (result i32) + local.get $5 + i32.const 268435455 + i32.and + i32.eqz + else + i32.const 0 + end + if + global.get $~lib/rt/tlsf/ROOT + local.get $4 + call $~lib/rt/tlsf/freeBlock + else + local.get $4 + local.get $5 + 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 $repeat|0 unreachable end unreachable end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 72 - i32.const 24 - i32.const 446 - 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 (; 6 ;) (type $FUNCSIG$iii) (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 24 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + global.set $~lib/rt/pure/CUR + block $break|1 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 + loop $repeat|1 + local.get $5 + local.get $1 + i32.lt_u i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 + br_if $break|1 + local.get $5 + i32.load + call $~lib/rt/pure/scan local.get $5 i32.const 4 - i32.shl - local.get $4 i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if + local.set $5 + br $repeat|1 unreachable end - end - current_memory - 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 (; 8 ;) (type $FUNCSIG$viii) (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 24 - i32.const 363 - 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 + block $break|2 + local.get $0 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - local.get $1 - local.set $5 + loop $repeat|2 local.get $5 - i32.const 16 - i32.add + local.get $1 + i32.lt_u + i32.eqz + br_if $break|2 local.get $5 i32.load - i32.const 3 + 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 $5 + i32.const 4 i32.add - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 24 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort + br $repeat|2 unreachable end + unreachable end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and + local.get $0 + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/__instanceof (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 16 + i32.sub + i32.load offset=8 + local.set $2 + global.get $~lib/rt/RTTI_BASE + local.set $3 local.get $2 - i32.ge_u - i32.eqz - if + if (result i32) + local.get $2 + local.get $3 + i32.load + i32.le_u + else i32.const 0 - i32.const 24 - i32.const 478 - i32.const 13 + end + if + loop $continue|0 + local.get $2 + local.get $1 + i32.eq + if + i32.const 1 + return + end + local.get $3 + local.get $2 + i32.const 8 + i32.mul + i32.add + i32.load offset=4 + local.tee $2 + br_if $continue|0 + end + end + i32.const 0 + ) + (func $~lib/rt/__typeinfo (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/RTTI_BASE + local.set $1 + local.get $0 + i32.eqz + if (result i32) + i32.const 1 + else + local.get $0 + local.get $1 + i32.load + i32.gt_u + end + if + i32.const 72 + i32.const 128 + i32.const 23 + i32.const 34 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 - ) - (func $~lib/rt/tlsf/__alloc (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 + i32.const 8 + i32.mul i32.add + i32.load ) (func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -1581,341 +1170,16 @@ end end ) - (func $~lib/rt/tlsf/reallocateBlock (; 12 ;) (type $FUNCSIG$iiii) (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.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.set $4 - local.get $4 - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 491 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32) - 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 - end - local.set $6 - local.get $6 - i32.load - local.set $7 - local.get $7 - i32.const 1 - i32.and - if - local.get $4 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.add - local.get $7 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $5 - local.get $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 - i32.load offset=4 - i32.store offset=4 - local.get $8 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $8 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $8 - ) - (func $~lib/rt/tlsf/__realloc (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 552 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 24 - i32.const 553 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/rt/tlsf/freeBlock (; 14 ;) (type $FUNCSIG$vii) (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 24 - i32.const 530 - 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 - ) - (func $~lib/rt/tlsf/__free (; 15 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 560 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 24 - i32.const 561 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/rt/purerc/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 103 - 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 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/common/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 - local.get $0 - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - i32.load - i32.gt_u - end - if - i32.const 184 - i32.const 240 - i32.const 55 - i32.const 34 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 12 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.get $0 i32.sub local.set $1 @@ -1941,26 +1205,26 @@ local.get $1 call $~lib/memory/memory.copy local.get $5 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $5 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.get $4 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 13 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $1 local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -1969,9 +1233,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 14 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -1989,7 +1253,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 114 i32.const 13 call $~lib/builtins/abort @@ -2003,7 +1267,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $1 i32.const -2147483648 i32.and @@ -2028,7 +1292,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 123 i32.const 15 call $~lib/builtins/abort @@ -2036,7 +1300,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and i32.eqz @@ -2056,7 +1320,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end else local.get $0 @@ -2073,320 +1337,11 @@ end end ) - (func $~lib/rt/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - ) - (func $~lib/rt/purerc/markGray (; 23 ;) (type $FUNCSIG$vi) (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/builtins/__visit_members - end - ) - (func $~lib/rt/purerc/scanBlack (; 24 ;) (type $FUNCSIG$vi) (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/builtins/__visit_members - ) - (func $~lib/rt/purerc/scan (; 25 ;) (type $FUNCSIG$vi) (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/purerc/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/builtins/__visit_members - end - end - ) - (func $~lib/rt/purerc/collectWhite (; 26 ;) (type $FUNCSIG$vi) (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 - i32.const 16 - i32.add - i32.const 5 - call $~lib/builtins/__visit_members - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/rt/purerc/__collect (; 27 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - local.get $0 - local.set $1 - block $break|0 - block - local.get $1 - local.set $2 - global.get $~lib/rt/purerc/CUR - local.set $3 - end - loop $repeat|0 - local.get $2 - local.get $3 - i32.lt_u - i32.eqz - br_if $break|0 - local.get $2 - i32.load - local.set $4 - local.get $4 - i32.load offset=4 - local.set $5 - local.get $5 - i32.const 1879048192 - i32.and - i32.const 805306368 - i32.eq - if (result i32) - local.get $5 - i32.const 268435455 - i32.and - i32.const 0 - i32.gt_u - else - i32.const 0 - end - if - local.get $4 - call $~lib/rt/purerc/markGray - local.get $1 - local.get $4 - i32.store - local.get $1 - i32.const 4 - i32.add - local.set $1 - else - local.get $5 - i32.const 1879048192 - i32.and - i32.const 0 - i32.eq - if (result i32) - local.get $5 - i32.const 268435455 - i32.and - i32.eqz - else - i32.const 0 - end - if - global.get $~lib/rt/tlsf/ROOT - local.get $4 - call $~lib/rt/tlsf/freeBlock - else - local.get $4 - local.get $5 - 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 $repeat|0 - unreachable - end - unreachable - end - local.get $1 - global.set $~lib/rt/purerc/CUR - block $break|1 - local.get $0 - local.set $5 - loop $repeat|1 - local.get $5 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|1 - local.get $5 - i32.load - call $~lib/rt/purerc/scan - local.get $5 - i32.const 4 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - block $break|2 - local.get $0 - local.set $5 - loop $repeat|2 - local.get $5 - local.get $1 - i32.lt_u - i32.eqz - br_if $break|2 - local.get $5 - 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/purerc/collectWhite - local.get $5 - i32.const 4 - i32.add - local.set $5 - br $repeat|2 - unreachable - end - unreachable - end - local.get $0 - global.set $~lib/rt/purerc/CUR - ) - (func $~lib/rt/common/__instanceof (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/pure/__visit (; 15 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - i32.const 16 - i32.sub - i32.load offset=8 - local.set $2 - global.get $~lib/builtins/RTTI_BASE - local.set $3 - local.get $2 - if (result i32) - local.get $2 - local.get $3 - i32.load - i32.le_u - else - i32.const 0 - end - if - loop $continue|0 - local.get $2 - local.get $1 - i32.eq - if - i32.const 1 - return - end - local.get $3 - local.get $2 - i32.const 8 - i32.mul - i32.add - i32.load offset=4 - local.tee $2 - br_if $continue|0 - end - end - i32.const 0 - ) - (func $~lib/rt/purerc/__visit (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -2428,7 +1383,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -2444,7 +1399,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 74 i32.const 17 call $~lib/builtins/abort @@ -2457,7 +1412,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -2465,7 +1420,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -2491,7 +1446,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 85 i32.const 6 call $~lib/builtins/abort @@ -2509,7 +1464,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -2518,7 +1473,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -2528,7 +1483,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 96 i32.const 24 call $~lib/builtins/abort @@ -2536,7 +1491,7 @@ end end ) - (func $~lib/builtins/__visit_members (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block end @@ -2579,7 +1534,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable @@ -2593,6 +1548,767 @@ unreachable end ) - (func $null (; 31 ;) (type $FUNCSIG$v) + (func $~lib/rt/tlsf/addMemory (; 17 ;) (type $FUNCSIG$iiii) (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 24 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 24 + i32.const 394 + 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 24 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 18 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 24 + i32.const 446 + 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 (; 20 ;) (type $FUNCSIG$iii) (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 24 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 22 ;) (type $FUNCSIG$viii) (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 24 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 24 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 24 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) + (func $null (; 25 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/runtime-stub.optimized.wat b/tests/compiler/runtime-stub.optimized.wat index a386e913..33e10f0e 100644 --- a/tests/compiler/runtime-stub.optimized.wat +++ b/tests/compiler/runtime-stub.optimized.wat @@ -1,388 +1,25 @@ (module (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) - (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) - (type $FUNCSIG$v (func)) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "$\00\00\00\01\00\00\00\10\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 64) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 120) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) - (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) - (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 120)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 256)) + (data (i32.const 8) "$\00\00\00\01\00\00\00\10\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 64) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 104) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08") (export "memory" (memory $0)) - (export "__alloc" (func $~lib/rt/stub/__alloc)) - (export "__realloc" (func $~lib/rt/stub/__realloc)) - (export "__free" (func $~lib/rt/stub/__free)) - (export "__retain" (func $~lib/rt/stub/__retain)) - (export "__release" (func $~lib/rt/stub/__release)) - (export "__collect" (func $~lib/rt/stub/__collect)) - (export "__instanceof" (func $~lib/rt/common/__instanceof)) - (export "__typeinfo" (func $~lib/rt/common/__typeinfo)) - (start $start) - (func $~lib/rt/stub/__alloc (; 1 ;) (type $FUNCSIG$iii) (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.get $0 - i32.const 1073741808 - i32.gt_u - if - unreachable - end - global.get $~lib/rt/stub/offset - i32.const 16 - i32.add - local.set $2 - local.get $2 - local.get $0 - local.tee $3 - i32.const 1 - local.tee $4 - local.get $3 - local.get $4 - i32.gt_u - select - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $5 - current_memory - local.set $6 - local.get $5 - local.get $6 - i32.const 16 - i32.shl - i32.gt_u - if - local.get $5 - local.get $2 - i32.sub - 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 $6 - local.tee $4 - local.get $3 - local.tee $7 - local.get $4 - local.get $7 - i32.gt_s - select - local.set $4 - local.get $4 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - end - local.get $5 - global.set $~lib/rt/stub/offset - local.get $2 - i32.const 16 - i32.sub - local.set $8 - local.get $8 - local.get $1 - i32.store offset=8 - local.get $8 - local.get $0 - i32.store offset=12 - local.get $2 - ) - (func $~lib/memory/memory.copy (; 2 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 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 $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 - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 - if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - local.get $3 - i32.const 1 - i32.sub - local.set $3 - br $continue|2 - end - end - end - else - local.get $4 - i32.const 7 - i32.and - local.get $5 - i32.const 7 - i32.and - i32.eq - if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 - local.get $3 - 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 $continue|5 - end - end - end - end - end - ) - (func $~lib/rt/stub/__realloc (; 3 ;) (type $FUNCSIG$iii) (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 - local.set $2 - local.get $2 - i32.load offset=12 - local.set $3 - local.get $1 - local.get $3 - i32.gt_u - if - local.get $1 - local.get $2 - i32.load offset=8 - call $~lib/rt/stub/__alloc - local.set $4 - local.get $4 - local.get $0 - local.get $3 - call $~lib/memory/memory.copy - local.get $4 - local.set $0 - else - local.get $2 - local.get $1 - i32.store offset=12 - end - local.get $0 - ) - (func $~lib/rt/stub/__free (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) - nop - ) - (func $~lib/rt/stub/__retain (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - ) - (func $~lib/rt/stub/__release (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) - nop - ) - (func $~lib/rt/stub/__collect (; 7 ;) (type $FUNCSIG$v) - nop - ) - (func $~lib/rt/common/__instanceof (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) + (export "__instanceof" (func $~lib/rt/__instanceof)) + (export "__typeinfo" (func $~lib/rt/__typeinfo)) + (func $~lib/rt/__instanceof (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 16 i32.sub i32.load offset=8 - local.set $2 - global.get $~lib/builtins/RTTI_BASE - local.set $3 - local.get $2 + local.tee $0 if (result i32) - local.get $2 - local.get $3 + local.get $0 + i32.const 104 i32.load i32.le_u else @@ -390,66 +27,51 @@ end if loop $continue|0 - local.get $2 + local.get $0 local.get $1 i32.eq if i32.const 1 return end - local.get $3 - local.get $2 - i32.const 8 - i32.mul + local.get $0 + i32.const 3 + i32.shl + i32.const 104 i32.add i32.load offset=4 - local.tee $2 + local.tee $0 br_if $continue|0 end end i32.const 0 ) - (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 + (func $~lib/rt/__typeinfo (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.eqz if (result i32) - i32.const 1 - else local.get $0 - local.get $1 + i32.const 104 i32.load i32.gt_u + else + i32.const 1 end if i32.const 24 i32.const 80 - i32.const 55 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 - i32.const 8 - i32.mul + i32.const 3 + i32.shl + i32.const 104 i32.add i32.load ) - (func $start (; 10 ;) (type $FUNCSIG$v) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - global.set $~lib/rt/stub/startOffset - global.get $~lib/rt/stub/startOffset - global.set $~lib/rt/stub/offset - ) - (func $null (; 11 ;) (type $FUNCSIG$v) + (func $null (; 3 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/runtime-stub.untouched.wat b/tests/compiler/runtime-stub.untouched.wat index a386e913..f5e419eb 100644 --- a/tests/compiler/runtime-stub.untouched.wat +++ b/tests/compiler/runtime-stub.untouched.wat @@ -1,375 +1,20 @@ (module (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) - (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) - (type $FUNCSIG$v (func)) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 8) "$\00\00\00\01\00\00\00\10\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 64) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 120) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") + (data (i32.const 64) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 104) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) - (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) - (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 120)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 256)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 104)) (export "memory" (memory $0)) - (export "__alloc" (func $~lib/rt/stub/__alloc)) - (export "__realloc" (func $~lib/rt/stub/__realloc)) - (export "__free" (func $~lib/rt/stub/__free)) - (export "__retain" (func $~lib/rt/stub/__retain)) - (export "__release" (func $~lib/rt/stub/__release)) - (export "__collect" (func $~lib/rt/stub/__collect)) - (export "__instanceof" (func $~lib/rt/common/__instanceof)) - (export "__typeinfo" (func $~lib/rt/common/__typeinfo)) - (start $start) - (func $~lib/rt/stub/__alloc (; 1 ;) (type $FUNCSIG$iii) (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.get $0 - i32.const 1073741808 - i32.gt_u - if - unreachable - end - global.get $~lib/rt/stub/offset - i32.const 16 - i32.add - local.set $2 - local.get $2 - local.get $0 - local.tee $3 - i32.const 1 - local.tee $4 - local.get $3 - local.get $4 - i32.gt_u - select - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $5 - current_memory - local.set $6 - local.get $5 - local.get $6 - i32.const 16 - i32.shl - i32.gt_u - if - local.get $5 - local.get $2 - i32.sub - 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 $6 - local.tee $4 - local.get $3 - local.tee $7 - local.get $4 - local.get $7 - i32.gt_s - select - local.set $4 - local.get $4 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - end - local.get $5 - global.set $~lib/rt/stub/offset - local.get $2 - i32.const 16 - i32.sub - local.set $8 - local.get $8 - local.get $1 - i32.store offset=8 - local.get $8 - local.get $0 - i32.store offset=12 - local.get $2 - ) - (func $~lib/memory/memory.copy (; 2 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 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 $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 - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 - if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - local.get $3 - i32.const 1 - i32.sub - local.set $3 - br $continue|2 - end - end - end - else - local.get $4 - i32.const 7 - i32.and - local.get $5 - i32.const 7 - i32.and - i32.eq - if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 - local.get $3 - 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 $continue|5 - end - end - end - end - end - ) - (func $~lib/rt/stub/__realloc (; 3 ;) (type $FUNCSIG$iii) (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 - local.set $2 - local.get $2 - i32.load offset=12 - local.set $3 - local.get $1 - local.get $3 - i32.gt_u - if - local.get $1 - local.get $2 - i32.load offset=8 - call $~lib/rt/stub/__alloc - local.set $4 - local.get $4 - local.get $0 - local.get $3 - call $~lib/memory/memory.copy - local.get $4 - local.set $0 - else - local.get $2 - local.get $1 - i32.store offset=12 - end - local.get $0 - ) - (func $~lib/rt/stub/__free (; 4 ;) (type $FUNCSIG$vi) (param $0 i32) - nop - ) - (func $~lib/rt/stub/__retain (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - ) - (func $~lib/rt/stub/__release (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) - nop - ) - (func $~lib/rt/stub/__collect (; 7 ;) (type $FUNCSIG$v) - nop - ) - (func $~lib/rt/common/__instanceof (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (export "__instanceof" (func $~lib/rt/__instanceof)) + (export "__typeinfo" (func $~lib/rt/__typeinfo)) + (func $~lib/rt/__instanceof (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -377,7 +22,7 @@ i32.sub i32.load offset=8 local.set $2 - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $3 local.get $2 if (result i32) @@ -409,9 +54,9 @@ end i32.const 0 ) - (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 i32.eqz @@ -426,7 +71,7 @@ if i32.const 24 i32.const 80 - i32.const 55 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable @@ -438,18 +83,6 @@ i32.add i32.load ) - (func $start (; 10 ;) (type $FUNCSIG$v) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - global.set $~lib/rt/stub/startOffset - global.get $~lib/rt/stub/startOffset - global.set $~lib/rt/stub/offset - ) - (func $null (; 11 ;) (type $FUNCSIG$v) + (func $null (; 3 ;) (type $FUNCSIG$v) ) ) diff --git a/tests/compiler/simd.optimized.wat b/tests/compiler/simd.optimized.wat index 7c5760a2..d8503c5c 100644 --- a/tests/compiler/simd.optimized.wat +++ b/tests/compiler/simd.optimized.wat @@ -1,7 +1,7 @@ (module (type $FUNCSIG$v (func)) (memory $0 1) - (data (i32.const 8) "\0e\00\00\00\01\00\00\00\11\00\00\00\0e\00\00\00s\00i\00m\00d\00.\00t\00s\00") + (data (i32.const 8) "\0e\00\00\00\01\00\00\00\11\00\00\00\0e\00\00\00s\00i\00m\00d\00.\00t\00s") (export "memory" (memory $0)) (func $start (; 0 ;) (type $FUNCSIG$v) nop diff --git a/tests/compiler/static-this.optimized.wat b/tests/compiler/static-this.optimized.wat index 66ab3781..e0d93835 100644 --- a/tests/compiler/static-this.optimized.wat +++ b/tests/compiler/static-this.optimized.wat @@ -1,23 +1,16 @@ (module - (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) - (global $static-this/Foo.bar (mut i32) (i32.const 42)) + (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s") + (global $static-this/Foo.bar i32 (i32.const 42)) (export "memory" (memory $0)) (start $start) - (func $static-this/Foo.getBar (; 1 ;) (type $FUNCSIG$i) (result i32) + (func $start (; 1 ;) (type $FUNCSIG$v) global.get $static-this/Foo.bar - ) - (func $start:static-this (; 2 ;) (type $FUNCSIG$v) - call $static-this/Foo.getBar i32.const 42 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -27,9 +20,7 @@ unreachable end ) - (func $start (; 3 ;) (type $FUNCSIG$v) - call $start:static-this - ) - (func $null (; 4 ;) (type $FUNCSIG$v) + (func $null (; 2 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 3a939472..10cebb29 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -2,12 +2,10 @@ (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) - (type $FUNCSIG$v (func)) - (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) - (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$fiii (func (param i32 i32 i32) (result f32))) (type $FUNCSIG$fii (func (param i32 i32) (result f32))) (type $FUNCSIG$d (func (result f64))) @@ -16,203 +14,204 @@ (type $FUNCSIG$idd (func (param f64 f64) (result i32))) (type $FUNCSIG$dii (func (param i32 i32) (result f64))) (type $FUNCSIG$id (func (param f64) (result i32))) + (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$iid (func (param i32 f64) (result i32))) (type $FUNCSIG$iijijiji (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) (type $FUNCSIG$iiid (func (param i32 i32 f64) (result i32))) (type $FUNCSIG$ij (func (param i64) (result i32))) (type $FUNCSIG$viji (func (param i32 i64 i32))) (type $FUNCSIG$iiij (func (param i32 i32 i64) (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) - (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) (import "Math" "random" (func $~lib/bindings/Math/random (result f64))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (memory $0 1) (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") - (data (i32.const 112) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") - (data (i32.const 160) "(\00\00\00\01\00\00\00\10\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 216) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 256) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c") - (data (i32.const 280) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05") - (data (i32.const 304) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s") - (data (i32.const 360) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05") - (data (i32.const 384) "$\00\00\00\01\00\00\00\10\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 440) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 488) "\05\00\00\00\01\00\00\00\0f\00\00\00\05") - (data (i32.const 512) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01") - (data (i32.const 536) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 560) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05") - (data (i32.const 664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14") - (data (i32.const 704) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01") - (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02") - (data (i32.const 784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02") - (data (i32.const 824) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y") - (data (i32.const 876) "\01\00\00\00\0f") - (data (i32.const 892) "\01\00\00\00\0f") + (data (i32.const 112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 152) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c") + (data (i32.const 176) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05") + (data (i32.const 200) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05") + (data (i32.const 224) "$\00\00\00\01\00\00\00\10\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 280) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 328) "\05\00\00\00\01\00\00\00\0f\00\00\00\05") + (data (i32.const 352) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01") + (data (i32.const 376) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") + (data (i32.const 400) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") + (data (i32.const 424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 464) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05") + (data (i32.const 504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14") + (data (i32.const 544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01") + (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02") + (data (i32.const 624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02") + (data (i32.const 664) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y") + (data (i32.const 716) "\01\00\00\00\0f") + (data (i32.const 732) "\01\00\00\00\0f") + (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 864) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05") (data (i32.const 904) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 944) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 944) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05") (data (i32.const 984) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1024) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05") + (data (i32.const 1024) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") (data (i32.const 1064) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1104) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05") + (data (i32.const 1104) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") (data (i32.const 1144) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 1184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05") (data (i32.const 1224) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1264) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 1264) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05") (data (i32.const 1304) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 1344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05") (data (i32.const 1384) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05") + (data (i32.const 1424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") (data (i32.const 1464) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 1504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05") (data (i32.const 1544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 1584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05") (data (i32.const 1624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05") + (data (i32.const 1664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05") (data (i32.const 1704) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05") - (data (i32.const 1784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05") - (data (i32.const 1864) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1904) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 1948) "\01\00\00\00\0f") - (data (i32.const 1960) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2000) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2032) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02") - (data (i32.const 2056) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2096) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04") - (data (i32.const 2120) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05") - (data (i32.const 2152) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2192) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") - (data (i32.const 2216) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2248) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2288) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\05") - (data (i32.const 2312) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04") - (data (i32.const 2344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2384) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\05") - (data (i32.const 2408) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 2440) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2480) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\04") - (data (i32.const 2504) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05") - (data (i32.const 2536) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2576) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") - (data (i32.const 2600) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2632) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2676) "\01\00\00\00\0f") - (data (i32.const 2688) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2728) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2772) "\01\00\00\00\0f") - (data (i32.const 2784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2868) "\01\00\00\00\0f") - (data (i32.const 2880) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2920) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 2964) "\01\00\00\00\0f") - (data (i32.const 2976) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 3016) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 3060) "\01\00\00\00\0f") - (data (i32.const 3072) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") - (data (i32.const 3112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") - (data (i32.const 3152) "\ac\00\00\00\01\00\00\00\10\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?") - (data (i32.const 3344) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f") - (data (i32.const 3392) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f") - (data (i32.const 3440) "@\00\00\00\01\00\00\00\0f\00\00\00@") - (data (i32.const 3462) "\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?") - (data (i32.const 3502) "\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") - (data (i32.const 3520) "@\00\00\00\01\00\00\00\0f\00\00\00@") - (data (i32.const 3542) "\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf") - (data (i32.const 3574) "\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f") - (data (i32.const 3600) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02") - (data (i32.const 3640) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02") - (data (i32.const 3680) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02") - (data (i32.const 3720) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff") - (data (i32.const 3764) "\01\00\00\00\0f") - (data (i32.const 3776) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") - (data (i32.const 3800) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01") - (data (i32.const 3824) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01") - (data (i32.const 3856) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 3888) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.") - (data (i32.const 3944) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") - (data (i32.const 3968) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02") - (data (i32.const 3992) "^\00\00\00\01\00\00\00\10\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") - (data (i32.const 4104) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s") - (data (i32.const 4160) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a") - (data (i32.const 4184) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b") - (data (i32.const 4208) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b") - (data (i32.const 4232) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a") - (data (i32.const 4260) "\01\00\00\00\10") - (data (i32.const 4272) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00P\10\00\00h\10\00\00P\10\00\00\80\10\00\00\98\10\00\00\b0\10") - (data (i32.const 4320) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\b0\10\00\00P\10\00\00P\10\00\00\80\10\00\00h\10\00\00\98\10") - (data (i32.const 4368) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 4416) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l") - (data (i32.const 4440) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01") - (data (i32.const 4464) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e") - (data (i32.const 4488) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e") - (data (i32.const 4520) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,") - (data (i32.const 4544) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e") - (data (i32.const 4584) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") - (data (i32.const 4616) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000") - (data (i32.const 4640) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009") - (data (i32.const 5056) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\000\12\00\000\12\00\00\90\01\00\00d") - (data (i32.const 5088) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003") - (data (i32.const 5120) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") - (data (i32.const 5152) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-") - (data (i32.const 5176) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") - (data (i32.const 5200) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_") - (data (i32.const 5224) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008") - (data (i32.const 5288) "0\00\00\00\01\00\00\00\0f\00\00\000") - (data (i32.const 5318) "\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f") - (data (i32.const 5352) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 ") - (data (i32.const 5376) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000") - (data (i32.const 5400) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N") - (data (i32.const 5424) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 5464) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 5496) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00*\00&\00$\00%\00^\00@\00#\00!\00?") + (data (i32.const 3184) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f") + (data (i32.const 3232) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f") + (data (i32.const 3280) "@\00\00\00\01\00\00\00\0f\00\00\00@") + (data (i32.const 3302) "\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?") + (data (i32.const 3342) "\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") + (data (i32.const 3360) "@\00\00\00\01\00\00\00\0f\00\00\00@") + (data (i32.const 3382) "\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf") + (data (i32.const 3414) "\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f") + (data (i32.const 3440) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02") + (data (i32.const 3480) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02") + (data (i32.const 3520) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02") + (data (i32.const 3560) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 3604) "\01\00\00\00\0f") + (data (i32.const 3616) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") + (data (i32.const 3640) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01") + (data (i32.const 3664) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01") + (data (i32.const 3696) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 3728) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.") + (data (i32.const 3784) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01") + (data (i32.const 3808) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02") + (data (i32.const 3832) "^\00\00\00\01\00\00\00\10\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") + (data (i32.const 3944) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a") + (data (i32.const 3968) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b") + (data (i32.const 3992) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b") + (data (i32.const 4016) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a") + (data (i32.const 4044) "\01\00\00\00\10") + (data (i32.const 4056) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00x\0f\00\00\90\0f\00\00x\0f\00\00\a8\0f\00\00\c0\0f\00\00\d8\0f") + (data (i32.const 4104) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f") + (data (i32.const 4152) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") + (data (i32.const 4200) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l") + (data (i32.const 4224) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01") + (data (i32.const 4248) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e") + (data (i32.const 4272) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e") + (data (i32.const 4304) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,") + (data (i32.const 4328) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e") + (data (i32.const 4368) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") + (data (i32.const 4400) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000") + (data (i32.const 4424) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009") + (data (i32.const 4840) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00X\11\00\00X\11\00\00\90\01\00\00d") + (data (i32.const 4872) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003") + (data (i32.const 4904) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 4936) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-") + (data (i32.const 4960) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") + (data (i32.const 4984) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_") + (data (i32.const 5008) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008") + (data (i32.const 5072) "0\00\00\00\01\00\00\00\0f\00\00\000") + (data (i32.const 5102) "\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f") + (data (i32.const 5136) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 ") + (data (i32.const 5160) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000") + (data (i32.const 5184) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N") + (data (i32.const 5208) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y") + (data (i32.const 5248) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") + (data (i32.const 5280) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0) - (global $~lib/rt/tlsf/ROOT (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)) @@ -221,9 +220,6 @@ (global $~lib/math/random_state1_64 (mut i64) (i64.const 0)) (global $~lib/math/random_state0_32 (mut i32) (i32.const 0)) (global $~lib/math/random_state1_32 (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0)) (global $~lib/util/number/_exp (mut i32) (i32.const 0)) @@ -231,1009 +227,21 @@ (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)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "main" (func $std/array/main)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) (export "__realloc" (func $~lib/rt/tlsf/__realloc)) (export "__free" (func $~lib/rt/tlsf/__free)) - (export "__retain" (func $~lib/rt/purerc/__retain)) - (export "__release" (func $~lib/rt/purerc/__release)) - (export "__collect" (func $~lib/rt/purerc/__collect)) - (export "__instanceof" (func $~lib/rt/common/__instanceof)) - (export "__typeinfo" (func $~lib/rt/common/__typeinfo)) - (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (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 128 - i32.const 275 - 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 128 - i32.const 277 - 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 128 - i32.const 290 - 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 $3 - i32.const 4 - i32.shl - local.get $2 - i32.add - i32.const 2 - i32.shl - local.get $0 - i32.add - i32.load offset=96 - local.get $1 - i32.eq - if - local.get $3 - i32.const 4 - i32.shl - local.get $2 - i32.add - i32.const 2 - i32.shl - local.get $0 - i32.add - local.get $4 - i32.store offset=96 - local.get $4 - i32.eqz - if - local.get $3 - i32.const 2 - i32.shl - local.get $0 - i32.add - local.get $3 - i32.const 2 - i32.shl - local.get $0 - 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 (; 6 ;) (type $FUNCSIG$vii) (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 128 - i32.const 203 - 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 128 - i32.const 205 - 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 $3 - i32.const 3 - i32.and - local.get $2 - 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 128 - i32.const 226 - 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 (result i32) - local.get $0 - local.get $2 - call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $6 - i32.const 3 - i32.and - local.get $7 - i32.or - local.tee $3 - i32.store - local.get $2 - else - local.get $1 - end - local.set $1 - 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 128 - i32.const 241 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $1 - i32.const 16 - i32.add - local.get $2 - i32.add - i32.ne - if - i32.const 0 - i32.const 128 - i32.const 242 - 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 128 - i32.const 258 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - local.get $0 - 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 $3 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - local.get $0 - 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 $3 - i32.const 2 - i32.shl - local.get $0 - i32.add - local.get $3 - i32.const 2 - i32.shl - local.get $0 - 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 (; 7 ;) (type $FUNCSIG$viii) (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 128 - i32.const 384 - 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 128 - i32.const 394 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 16 - i32.sub - local.get $3 - 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 128 - i32.const 406 - 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/initializeRoot (; 8 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - i32.const 1 - current_memory - local.tee $0 - i32.gt_s - if (result i32) - i32.const 1 - local.get $0 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - i32.const 8048 - i32.const 0 - i32.store - i32.const 9616 - i32.const 0 - i32.store - i32.const 0 - local.set $0 - loop $repeat|0 - block $break|0 - local.get $0 - i32.const 23 - i32.ge_u - br_if $break|0 - local.get $0 - i32.const 2 - i32.shl - i32.const 8048 - i32.add - i32.const 0 - i32.store offset=4 - i32.const 0 - local.set $1 - loop $repeat|1 - block $break|1 - local.get $1 - i32.const 16 - i32.ge_u - br_if $break|1 - local.get $0 - i32.const 4 - i32.shl - local.get $1 - i32.add - i32.const 2 - i32.shl - i32.const 8048 - i32.add - i32.const 0 - i32.store offset=96 - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 - end - end - local.get $0 - i32.const 1 - i32.add - local.set $0 - br $repeat|0 - end - end - i32.const 8048 - i32.const 9632 - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - i32.const 8048 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 176 - i32.const 128 - i32.const 446 - 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 (; 10 ;) (type $FUNCSIG$iii) (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 - i32.const 1 - i32.const 27 - local.get $1 - i32.clz - i32.sub - i32.shl - local.get $1 - 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 128 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 2 - i32.shl - local.get $0 - i32.add - i32.load offset=4 - i32.const -1 - local.get $1 - i32.shl - i32.and - local.tee $1 - if (result i32) - local.get $1 - i32.ctz - local.get $2 - i32.const 4 - i32.shl - i32.add - i32.const 2 - i32.shl - local.get $0 - 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 $1 - i32.ctz - local.tee $1 - i32.const 2 - i32.shl - local.get $0 - i32.add - i32.load offset=4 - local.tee $2 - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.ctz - local.get $1 - i32.const 4 - i32.shl - i32.add - i32.const 2 - i32.shl - local.get $0 - i32.add - i32.load offset=96 - else - i32.const 0 - end - end - ) - (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - current_memory - local.tee $2 - local.get $1 - 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 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $1 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - local.get $0 - local.get $2 - i32.const 16 - i32.shl - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - ) - (func $~lib/rt/tlsf/prepareBlock (; 12 ;) (type $FUNCSIG$viii) (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 128 - i32.const 363 - 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 $3 - i32.const 2 - i32.and - local.get $2 - i32.or - i32.store - local.get $1 - i32.const 16 - i32.add - local.get $2 - 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 (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 128 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $2 - i32.load - i32.const -4 - i32.and - local.get $3 - i32.lt_u - if - i32.const 0 - i32.const 128 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $2 - if (result i32) - local.get $2 - else - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - end - 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/arraybuffer/ArrayBufferView#constructor (; 15 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (export "__retain" (func $~lib/rt/pure/__retain)) + (export "__release" (func $~lib/rt/pure/__release)) + (export "__collect" (func $~lib/rt/pure/__collect)) + (export "__instanceof" (func $~lib/rt/__instanceof)) + (export "__typeinfo" (func $~lib/rt/__typeinfo)) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 5 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1073741808 local.get $2 @@ -1260,7 +268,7 @@ i32.const 12 i32.const 14 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -1276,7 +284,7 @@ local.get $1 local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -1286,12 +294,12 @@ i32.store offset=8 local.get $0 ) - (func $~lib/array/Array#constructor (; 16 ;) (type $FUNCSIG$i) (result i32) + (func $~lib/array/Array#constructor (; 6 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) i32.const 16 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.const 0 i32.const 2 call $~lib/arraybuffer/ArrayBufferView#constructor @@ -1303,78 +311,25 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array.isArray<~lib/array/Array | null> (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/array/Array | null> (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 0 i32.ne ) - (func $~lib/array/Array.isArray (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 ) - (func $~lib/rt/purerc/increment (; 19 ;) (type $FUNCSIG$vi) (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 320 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 320 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 8040 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 9 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) block $~lib/util/memory/memmove|inlined.0 @@ -1547,7 +502,7 @@ end end ) - (func $~lib/rt/common/__allocArray (; 22 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/rt/__allocArray (; 10 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) i32.const 16 local.get $2 @@ -1560,7 +515,7 @@ i32.const 15 call $~lib/rt/tlsf/__alloc local.tee $4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $2 local.get $4 @@ -1580,7 +535,7 @@ end local.get $2 ) - (func $~lib/memory/memory.fill (; 23 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.fill (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i64) block $~lib/util/memory/memset|inlined.0 @@ -1805,7 +760,7 @@ end end ) - (func $~lib/array/Array#fill (; 24 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/array/Array#fill (; 12 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) local.get $0 @@ -1870,16 +825,16 @@ call $~lib/memory/memory.fill end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__get (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -1891,14 +846,14 @@ i32.add i32.load8_u ) - (func $std/array/isArraysEqual (; 26 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isArraysEqual (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner1 block $folding-inner0 @@ -1936,19 +891,19 @@ br $folding-inner1 end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 ) - (func $~lib/array/Array#fill (; 27 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/array/Array#fill (; 15 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) local.get $0 @@ -2022,9 +977,9 @@ end end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__get (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -2032,8 +987,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -2047,13 +1002,13 @@ i32.add i32.load ) - (func $std/array/isArraysEqual (; 29 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 17 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner1 block $folding-inner0 @@ -2097,193 +1052,41 @@ br $folding-inner1 end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 ) - (func $std/array/internalCapacity (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/internalCapacity (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $1 i32.const 16 i32.sub i32.load offset=12 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 2 i32.shr_s ) - (func $~lib/rt/tlsf/reallocateBlock (; 31 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - local.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.tee $4 - i32.const 1 - i32.and - if - i32.const 0 - i32.const 128 - i32.const 491 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - local.get $1 - i32.const 16 - i32.add - local.get $1 - i32.load - i32.const -4 - i32.and - i32.add - local.tee $6 - i32.load - local.tee $5 - i32.const 1 - i32.and - if - local.get $4 - i32.const -4 - i32.and - i32.const 16 - i32.add - local.get $5 - i32.const -4 - i32.and - i32.add - local.tee $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 - i32.load offset=4 - i32.store offset=4 - local.get $3 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $1 - call $~lib/rt/tlsf/onFree - local.get $3 - ) - (func $~lib/rt/tlsf/__realloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 552 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 128 - i32.const 553 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/array/ensureSize (; 33 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/ensureSize (; 19 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2300,7 +1103,7 @@ i32.gt_u if i32.const 24 - i32.const 456 + i32.const 296 i32.const 14 i32.const 47 call $~lib/builtins/abort @@ -2328,7 +1131,7 @@ if local.get $0 local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $0 local.get $1 @@ -2339,7 +1142,7 @@ i32.store offset=8 end ) - (func $~lib/array/Array#push (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#push (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 @@ -2362,7 +1165,7 @@ local.get $3 i32.store offset=12 ) - (func $~lib/array/Array#pop (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#pop (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -2371,8 +1174,8 @@ i32.const 1 i32.lt_s if - i32.const 840 - i32.const 456 + i32.const 680 + i32.const 296 i32.const 250 i32.const 20 call $~lib/builtins/abort @@ -2394,13 +1197,13 @@ i32.store offset=12 local.get $2 ) - (func $~lib/array/Array#concat (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#concat (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -2417,9 +1220,9 @@ i32.gt_u if local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 24 - i32.const 456 + i32.const 296 i32.const 197 i32.const 59 call $~lib/builtins/abort @@ -2429,8 +1232,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $2 i32.load offset=4 local.tee $5 @@ -2451,10 +1254,10 @@ i32.shl call $~lib/memory/memory.copy local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/array/Array#copyWithin (; 37 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/array/Array#copyWithin (; 23 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) local.get $0 @@ -2615,9 +1418,9 @@ call $~lib/memory/memory.copy end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#unshift (; 38 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#unshift (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 @@ -2646,7 +1449,7 @@ local.get $2 i32.store offset=12 ) - (func $~lib/array/Array#shift (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#shift (; 25 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2657,8 +1460,8 @@ i32.const 1 i32.lt_s if - i32.const 840 - i32.const 456 + i32.const 680 + i32.const 296 i32.const 311 i32.const 20 call $~lib/builtins/abort @@ -2691,7 +1494,7 @@ i32.store offset=12 local.get $3 ) - (func $~lib/array/Array#reverse (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#reverse (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2739,9 +1542,9 @@ end end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#indexOf (; 41 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#indexOf (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load offset=12 @@ -2801,7 +1604,7 @@ end i32.const -1 ) - (func $~lib/array/Array#includes (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#includes (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 local.get $1 local.get $2 @@ -2809,7 +1612,7 @@ i32.const 0 i32.ge_s ) - (func $~lib/array/Array#splice (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#splice (; 29 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2856,8 +1659,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 i32.load offset=4 local.get $0 @@ -2899,7 +1702,7 @@ i32.store offset=12 local.get $4 ) - (func $~lib/array/Array#__set (; 44 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 30 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $0 i32.load offset=12 @@ -2928,16 +1731,16 @@ i32.store offset=12 end ) - (func $start:std/array~anonymous|0 (; 45 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|0 (; 31 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.eqz ) - (func $~lib/array/Array#findIndex (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#findIndex (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2985,63 +1788,63 @@ end i32.const -1 ) - (func $start:std/array~anonymous|1 (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|1 (; 33 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 1 i32.eq ) - (func $start:std/array~anonymous|2 (; 48 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|2 (; 34 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 100 i32.eq ) - (func $start:std/array~anonymous|3 (; 49 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|3 (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 call $~lib/array/Array#push local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 100 i32.eq ) - (func $start:std/array~anonymous|5 (; 50 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|5 (; 36 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 100 i32.eq ) - (func $start:std/array~anonymous|6 (; 51 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|6 (; 37 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 0 i32.ge_s ) - (func $~lib/array/Array#every (; 52 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#every (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3089,63 +1892,63 @@ end i32.const 1 ) - (func $start:std/array~anonymous|7 (; 53 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|7 (; 39 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 0 i32.le_s ) - (func $start:std/array~anonymous|8 (; 54 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|8 (; 40 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 call $~lib/array/Array#push local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 10 i32.lt_s ) - (func $start:std/array~anonymous|9 (; 55 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|9 (; 41 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 10 i32.lt_s ) - (func $start:std/array~anonymous|10 (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|10 (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 3 i32.lt_s ) - (func $start:std/array~anonymous|11 (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|11 (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 3 i32.ge_s ) - (func $~lib/array/Array#some (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#some (; 44 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3193,64 +1996,64 @@ end i32.const 0 ) - (func $start:std/array~anonymous|12 (; 59 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|12 (; 45 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const -1 i32.le_s ) - (func $start:std/array~anonymous|13 (; 60 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|13 (; 46 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 call $~lib/array/Array#push local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 10 i32.gt_s ) - (func $start:std/array~anonymous|14 (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|14 (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 10 i32.gt_s ) - (func $start:std/array~anonymous|15 (; 62 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|15 (; 48 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 3 i32.gt_s ) - (func $start:std/array~anonymous|16 (; 63 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|16 (; 49 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop global.get $std/array/i local.get $0 i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/array/Array#forEach (; 64 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#forEach (; 50 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3293,9 +2096,9 @@ unreachable end ) - (func $start:std/array~anonymous|17 (; 65 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|17 (; 51 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -3305,11 +2108,11 @@ i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|19 (; 66 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|19 (; 52 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -3319,12 +2122,12 @@ i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|20 (; 67 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|20 (; 53 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 i32.eqz @@ -3413,7 +2216,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 570 i32.const 6 call $~lib/builtins/abort @@ -3421,18 +2224,18 @@ end end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|21 (; 68 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) + (func $start:std/array~anonymous|21 (; 54 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 f32.convert_i32_s ) - (func $~lib/array/Array#map (; 69 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#map (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3445,8 +2248,8 @@ i32.const 2 i32.const 22 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 i32.load offset=4 local.set $5 @@ -3490,7 +2293,7 @@ end local.get $4 ) - (func $~lib/array/Array#__get (; 70 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__get (; 56 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32) local.get $1 local.get $0 i32.load offset=8 @@ -3498,8 +2301,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -3513,9 +2316,9 @@ i32.add f32.load ) - (func $start:std/array~anonymous|22 (; 71 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|22 (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -3525,10 +2328,10 @@ i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 ) - (func $~lib/array/Array#map (; 72 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#map (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3541,8 +2344,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 i32.load offset=4 local.set $6 @@ -3588,21 +2391,21 @@ end local.get $5 ) - (func $start:std/array~anonymous|23 (; 73 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|23 (; 59 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop global.get $std/array/i local.get $0 i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 ) - (func $start:std/array~anonymous|24 (; 74 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|24 (; 60 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -3612,20 +2415,20 @@ i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 ) - (func $start:std/array~anonymous|25 (; 75 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|25 (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 2 i32.ge_s ) - (func $~lib/array/Array#filter (; 76 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#filter (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3634,8 +2437,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $4 local.get $0 i32.load offset=12 @@ -3682,9 +2485,9 @@ end local.get $4 ) - (func $start:std/array~anonymous|26 (; 77 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|26 (; 63 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -3694,28 +2497,28 @@ i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 2 i32.ge_s ) - (func $start:std/array~anonymous|27 (; 78 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|27 (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop global.get $std/array/i local.get $0 i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 2 i32.ge_s ) - (func $start:std/array~anonymous|28 (; 79 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|28 (; 65 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -3725,22 +2528,22 @@ i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 2 i32.ge_s ) - (func $start:std/array~anonymous|29 (; 80 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|29 (; 66 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 local.get $1 i32.add ) - (func $~lib/array/Array#reduce (; 81 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduce (; 67 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3784,12 +2587,12 @@ end local.get $2 ) - (func $start:std/array~anonymous|31 (; 82 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|31 (; 68 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 local.get $1 i32.const 2 @@ -3797,12 +2600,12 @@ local.get $0 select ) - (func $start:std/array~anonymous|32 (; 83 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|32 (; 69 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 local.get $1 i32.const 100 @@ -3810,33 +2613,33 @@ local.get $0 select ) - (func $start:std/array~anonymous|33 (; 84 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|33 (; 70 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 i32.const 1 call $~lib/array/Array#push local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 local.get $1 i32.add ) - (func $start:std/array~anonymous|35 (; 85 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|35 (; 71 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 call $~lib/array/Array#pop drop local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 local.get $1 i32.add ) - (func $~lib/array/Array#reduceRight (; 86 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduceRight (; 72 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load offset=12 @@ -3873,7 +2676,7 @@ end local.get $2 ) - (func $~lib/math/splitMix32 (; 87 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/math/splitMix32 (; 73 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 1831565813 i32.add @@ -3905,13 +2708,13 @@ i32.shr_u i32.xor ) - (func $~lib/math/NativeMath.seedRandom (; 88 ;) (type $FUNCSIG$vj) (param $0 i64) + (func $~lib/math/NativeMath.seedRandom (; 74 ;) (type $FUNCSIG$vj) (param $0 i64) (local $1 i64) local.get $0 i64.eqz if i32.const 0 - i32.const 3128 + i32.const 2968 i32.const 1021 i32.const 4 call $~lib/builtins/abort @@ -3970,7 +2773,7 @@ call $~lib/math/splitMix32 global.set $~lib/math/random_state1_32 ) - (func $~lib/util/sort/insertionSort (; 89 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 75 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 f32) @@ -4052,66 +2855,7 @@ unreachable end ) - (func $~lib/rt/tlsf/freeBlock (; 90 ;) (type $FUNCSIG$vii) (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 128 - i32.const 530 - 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/tlsf/onFree - ) - (func $~lib/rt/tlsf/__free (; 91 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 560 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 128 - i32.const 561 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/util/sort/weakHeapSort (; 92 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/weakHeapSort (; 76 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 f32) @@ -4372,7 +3116,7 @@ local.get $5 f32.store ) - (func $~lib/array/Array#sort (; 93 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort (; 77 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 f32) @@ -4384,7 +3128,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -4417,7 +3161,7 @@ f32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $3 @@ -4435,9 +3179,9 @@ call $~lib/util/sort/weakHeapSort end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 94 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 78 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -4466,15 +3210,15 @@ i32.lt_s i32.sub ) - (func $std/array/isArraysEqual (; 95 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isArraysEqual (; 79 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 f32) (local $4 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner1 block $folding-inner0 @@ -4527,19 +3271,19 @@ br $folding-inner1 end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 ) - (func $~lib/util/sort/insertionSort (; 96 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 80 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 f64) @@ -4621,7 +3365,7 @@ unreachable end ) - (func $~lib/util/sort/weakHeapSort (; 97 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/weakHeapSort (; 81 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 f64) @@ -4882,7 +3626,7 @@ local.get $5 f64.store ) - (func $~lib/array/Array#sort (; 98 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort (; 82 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 f64) @@ -4894,7 +3638,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -4927,7 +3671,7 @@ f64.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $3 @@ -4945,9 +3689,9 @@ call $~lib/util/sort/weakHeapSort end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 99 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 83 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) local.get $0 @@ -4976,7 +3720,7 @@ i64.lt_s i32.sub ) - (func $~lib/array/Array#__get (; 100 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__get (; 84 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) local.get $1 local.get $0 i32.load offset=8 @@ -4984,8 +3728,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -4999,15 +3743,15 @@ i32.add f64.load ) - (func $std/array/isArraysEqual (; 101 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isArraysEqual (; 85 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 f64) (local $4 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner1 block $folding-inner0 @@ -5060,19 +3804,19 @@ br $folding-inner1 end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 ) - (func $~lib/util/sort/insertionSort (; 102 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 86 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -5154,7 +3898,7 @@ unreachable end ) - (func $~lib/util/sort/weakHeapSort (; 103 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/weakHeapSort (; 87 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -5415,7 +4159,7 @@ local.get $1 i32.store ) - (func $~lib/array/Array#sort (; 104 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort (; 88 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5426,7 +4170,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -5459,7 +4203,7 @@ i32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $2 @@ -5477,14 +4221,14 @@ call $~lib/util/sort/weakHeapSort end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 105 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 89 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.sub ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 106 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 90 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.gt_u @@ -5493,13 +4237,13 @@ i32.lt_u i32.sub ) - (func $~lib/array/Array.create (; 107 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.create (; 91 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 268435452 i32.gt_u if i32.const 24 - i32.const 456 + i32.const 296 i32.const 45 i32.const 61 call $~lib/builtins/abort @@ -5509,8 +4253,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 i32.store offset=12 @@ -5522,7 +4266,7 @@ call $~lib/memory/memory.fill local.get $0 ) - (func $std/array/createReverseOrderedArray (; 108 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createReverseOrderedArray (; 92 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -5551,14 +4295,14 @@ end local.get $2 ) - (func $~lib/math/NativeMath.random (; 109 ;) (type $FUNCSIG$d) (result f64) + (func $~lib/math/NativeMath.random (; 93 ;) (type $FUNCSIG$d) (result f64) (local $0 i64) (local $1 i64) global.get $~lib/math/random_seeded i32.eqz if - i32.const 3904 - i32.const 3128 + i32.const 3744 + i32.const 2968 i32.const 1030 i32.const 24 call $~lib/builtins/abort @@ -5598,7 +4342,7 @@ f64.const 1 f64.sub ) - (func $std/array/createRandomOrderedArray (; 110 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createRandomOrderedArray (; 94 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -5627,11 +4371,11 @@ end local.get $2 ) - (func $std/array/isSorted (; 111 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted (; 95 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 1 local.set $2 @@ -5659,7 +4403,7 @@ i32.gt_s if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return else @@ -5673,13 +4417,13 @@ end end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 ) - (func $std/array/assertSorted (; 112 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted (; 96 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -5690,40 +4434,40 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 832 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/array/assertSortedDefault (; 113 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $std/array/assertSortedDefault (; 97 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 48 call $std/array/assertSorted local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|44 (; 114 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|44 (; 98 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.sub ) - (func $~lib/array/Array.create<~lib/array/Array> (; 115 ;) (type $FUNCSIG$i) (result i32) + (func $~lib/array/Array.create<~lib/array/Array> (; 99 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) i32.const 2 i32.const 2 i32.const 24 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 i32.store offset=12 @@ -5735,205 +4479,9 @@ call $~lib/memory/memory.fill local.get $0 ) - (func $~lib/rt/common/__typeinfo (; 116 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - if (result i32) - local.get $0 - i32.const 7720 - i32.load - i32.gt_u - else - i32.const 1 - end - if - i32.const 400 - i32.const 4120 - i32.const 55 - i32.const 34 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 3 - i32.shl - i32.const 7720 - i32.add - i32.load - ) - (func $~lib/rt/purerc/growRoots (; 117 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/purerc/CUR - global.get $~lib/rt/purerc/ROOTS - local.tee $2 - i32.sub - local.tee $1 - 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 + (func $~lib/array/Array<~lib/array/Array>#__unchecked_set (; 100 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 - local.get $1 - call $~lib/memory/memory.copy - local.get $0 - global.set $~lib/rt/purerc/ROOTS - local.get $0 - local.get $1 - i32.add - global.set $~lib/rt/purerc/CUR - local.get $0 - local.get $3 - i32.add - global.set $~lib/rt/purerc/END - ) - (func $~lib/rt/purerc/appendRoot (; 118 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.tee $1 - global.get $~lib/rt/purerc/END - i32.ge_u - if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 1 - i32.add - global.set $~lib/rt/purerc/CUR - ) - (func $~lib/rt/purerc/decrement (; 119 ;) (type $FUNCSIG$vi) (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/purerc/onDecrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 320 - i32.const 114 - 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/builtins/__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 320 - i32.const 123 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/common/__typeinfo - i32.const 8 - 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/purerc/appendRoot - end - end - end - ) - (func $~lib/rt/purerc/__retainRelease (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - local.get $1 - i32.ne - if - local.get $0 - i32.const 8040 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $1 - i32.const 8040 - i32.gt_u - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - end - local.get $0 - ) - (func $~lib/array/Array<~lib/array/Array>#__unchecked_set (; 121 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=4 @@ -5945,15 +4493,15 @@ local.get $2 local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/array/Array<~lib/array/Array>#__set (; 122 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array<~lib/array/Array>#__set (; 101 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 local.get $0 @@ -5962,9 +4510,9 @@ i32.gt_u if local.get $2 - call $~lib/rt/purerc/__release - i32.const 4008 - i32.const 456 + call $~lib/rt/pure/__release + i32.const 3848 + i32.const 296 i32.const 112 i32.const 38 call $~lib/builtins/abort @@ -5990,9 +4538,9 @@ i32.store offset=12 end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/array/createReverseOrderedNestedArray (; 123 ;) (type $FUNCSIG$i) (result i32) + (func $std/array/createReverseOrderedNestedArray (; 102 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) (local $1 i32) (local $2 i32) @@ -6016,7 +4564,7 @@ local.get $2 call $~lib/array/Array<~lib/array/Array>#__set local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 1 i32.add @@ -6026,13 +4574,13 @@ end local.get $1 ) - (func $start:std/array~anonymous|47 (; 124 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|47 (; 103 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 0 @@ -6043,12 +4591,12 @@ i32.sub local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/util/sort/insertionSort<~lib/array/Array> (; 125 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort<~lib/array/Array> (; 104 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6066,7 +4614,7 @@ local.get $0 i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 local.get $3 i32.const 1 @@ -6084,7 +4632,7 @@ local.get $0 i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 i32.const 2 global.set $~lib/argc @@ -6111,11 +4659,11 @@ i32.store else local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $break|1 end local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $continue|1 end end @@ -6130,7 +4678,7 @@ local.get $6 i32.store local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add @@ -6141,7 +4689,7 @@ unreachable end ) - (func $~lib/array/Array<~lib/array/Array>#sort (; 126 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#sort (; 105 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6152,7 +4700,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -6164,11 +4712,11 @@ if local.get $3 i32.load offset=4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $2 local.get $3 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 i32.const 2 global.set $~lib/argc @@ -6187,12 +4735,12 @@ i32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end @@ -6201,9 +4749,9 @@ local.get $1 call $~lib/util/sort/insertionSort<~lib/array/Array> local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/array/Array>#__unchecked_get (; 127 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#__unchecked_get (; 106 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -6211,16 +4759,16 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/array/Array>#__get (; 128 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#__get (; 107 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if - i32.const 4008 - i32.const 456 + i32.const 3848 + i32.const 296 i32.const 97 i32.const 45 call $~lib/builtins/abort @@ -6233,8 +4781,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -6244,13 +4792,13 @@ local.get $1 call $~lib/array/Array<~lib/array/Array>#__unchecked_get ) - (func $std/array/isSorted<~lib/array/Array> (; 129 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted<~lib/array/Array> (; 108 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 1 local.set $2 @@ -6280,18 +4828,18 @@ i32.gt_s if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return else local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -6302,13 +4850,13 @@ end end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 ) - (func $std/array/assertSorted<~lib/array/Array> (; 130 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/array/Array> (; 109 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -6319,25 +4867,25 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 832 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/array/Array.create> (; 131 ;) (type $FUNCSIG$i) (result i32) + (func $~lib/array/Array.create> (; 110 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) i32.const 512 i32.const 2 i32.const 26 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 i32.store offset=12 @@ -6349,7 +4897,7 @@ call $~lib/memory/memory.fill local.get $0 ) - (func $std/array/createReverseOrderedElementsArray (; 132 ;) (type $FUNCSIG$i) (result i32) + (func $std/array/createReverseOrderedElementsArray (; 111 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) (local $1 i32) (local $2 i32) @@ -6363,7 +4911,7 @@ i32.const 4 i32.const 25 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $2 i32.const 511 local.get $0 @@ -6374,7 +4922,7 @@ local.get $2 call $~lib/array/Array<~lib/array/Array>#__set local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 1 i32.add @@ -6384,13 +4932,13 @@ end local.get $1 ) - (func $start:std/array~anonymous|48 (; 133 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|48 (; 112 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load @@ -6399,12 +4947,12 @@ i32.sub local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/array/Array<~lib/string/String | null>#__get (; 134 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#__get (; 113 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -6412,8 +4960,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -6423,13 +4971,13 @@ local.get $1 call $~lib/array/Array<~lib/array/Array>#__unchecked_get ) - (func $std/array/isSorted<~lib/string/String | null> (; 135 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted<~lib/string/String | null> (; 114 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 1 local.set $2 @@ -6459,18 +5007,18 @@ i32.gt_s if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return else local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -6481,13 +5029,13 @@ end end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 ) - (func $std/array/assertSorted<~lib/string/String | null> (; 136 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/string/String | null> (; 115 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -6498,26 +5046,26 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 832 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/util/string/compareImpl (; 137 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/string/compareImpl (; 116 ;) (type $FUNCSIG$iiii) (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/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.set $3 @@ -6553,19 +5101,19 @@ end end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 ) - (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 138 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 117 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner0 i32.const 1 @@ -6602,9 +5150,9 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const -1 return end @@ -6612,9 +5160,9 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 return end @@ -6629,34 +5177,34 @@ call $~lib/util/string/compareImpl local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 ) - (func $~lib/string/String.__eq (; 139 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__eq (; 118 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 i32.eq if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 return end @@ -6689,25 +5237,25 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 ) - (func $~lib/string/String.__ne (; 140 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__ne (; 119 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -6715,21 +5263,21 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $std/array/isArraysEqual<~lib/string/String | null> (; 141 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isArraysEqual<~lib/string/String | null> (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -6739,9 +5287,9 @@ i32.ne if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return end @@ -6750,9 +5298,9 @@ i32.eq if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 return end @@ -6772,20 +5320,20 @@ call $~lib/string/String.__ne if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 return else local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -6796,19 +5344,19 @@ end end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 ) - (func $~lib/array/Array.create<~lib/string/String> (; 142 ;) (type $FUNCSIG$i) (result i32) + (func $~lib/array/Array.create<~lib/string/String> (; 121 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) i32.const 400 i32.const 2 i32.const 28 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 i32.store offset=12 @@ -6820,17 +5368,17 @@ call $~lib/memory/memory.fill local.get $0 ) - (func $~lib/string/String#charAt (; 143 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/string/String#charAt (; 122 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 - i32.const 3164 + i32.const 3004 i32.load i32.const 1 i32.shr_u i32.ge_u if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain return end i32.const 2 @@ -6840,27 +5388,27 @@ local.get $0 i32.const 1 i32.shl - i32.const 3168 + i32.const 3008 i32.add i32.load16_u i32.store16 local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/string/String#concat (; 144 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#concat (; 123 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block (result i32) local.get $1 i32.eqz if - i32.const 4432 + i32.const 4216 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 end local.get $1 @@ -6886,18 +5434,18 @@ i32.eqz end if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end local.get $2 i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $2 local.get $0 local.get $3 @@ -6909,37 +5457,37 @@ local.get $4 call $~lib/memory/memory.copy local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__concat (; 145 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__concat (; 124 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 - i32.const 4432 + i32.const 4216 local.get $0 select local.get $1 call $~lib/string/String#concat local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $std/array/createRandomString (; 146 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createRandomString (; 125 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $1 loop $repeat|0 local.get $2 @@ -6948,7 +5496,7 @@ if local.get $1 call $~lib/math/NativeMath.random - i32.const 3164 + i32.const 3004 i32.load i32.const 1 i32.shr_u @@ -6961,12 +5509,12 @@ call $~lib/string/String.__concat local.tee $4 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -6976,7 +5524,7 @@ end local.get $1 ) - (func $std/array/createRandomStringArray (; 147 ;) (type $FUNCSIG$i) (result i32) + (func $std/array/createRandomStringArray (; 126 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) (local $1 i32) (local $2 i32) @@ -6997,7 +5545,7 @@ local.tee $2 call $~lib/array/Array<~lib/array/Array>#__set local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 i32.const 1 i32.add @@ -7007,14 +5555,14 @@ end local.get $1 ) - (func $~lib/string/String#substring (; 148 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#substring (; 127 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 i32.eqz if i32.const 0 - i32.const 4384 + i32.const 4168 i32.const 196 i32.const 4 call $~lib/builtins/abort @@ -7066,8 +5614,8 @@ local.tee $2 i32.eqz if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain return end local.get $3 @@ -7087,7 +5635,7 @@ end if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $2 @@ -7100,9 +5648,9 @@ local.get $2 call $~lib/memory/memory.copy local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#join_bool (; 149 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_bool (; 128 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -7111,8 +5659,8 @@ (local $6 i32) (local $7 i32) (local $8 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -7122,11 +5670,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end @@ -7136,19 +5684,19 @@ local.get $1 i32.eqz if - i32.const 4480 - i32.const 4504 + i32.const 4264 + i32.const 4288 local.get $3 i32.load8_u select - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -7164,7 +5712,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $2 i32.const 0 local.set $0 @@ -7187,8 +5735,8 @@ i32.shl local.get $2 i32.add - i32.const 4480 - i32.const 4504 + i32.const 4264 + i32.const 4288 local.get $8 select local.get $6 @@ -7206,7 +5754,7 @@ i32.shl local.get $2 i32.add - i32.const 4536 + i32.const 4320 local.get $4 i32.const 1 i32.shl @@ -7237,8 +5785,8 @@ i32.shl local.get $2 i32.add - i32.const 4480 - i32.const 4504 + i32.const 4264 + i32.const 4288 local.get $3 select local.get $1 @@ -7256,18 +5804,18 @@ local.get $0 call $~lib/string/String#substring local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/util/number/decimalCount32 (; 150 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/decimalCount32 (; 129 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 100000 i32.lt_u @@ -7321,10 +5869,10 @@ end end ) - (func $~lib/util/number/utoa32_lut (; 151 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/number/utoa32_lut (; 130 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) - i32.const 5076 + i32.const 4860 i32.load local.set $3 loop $continue|0 @@ -7431,15 +5979,15 @@ i32.store16 end ) - (func $~lib/util/number/itoa32 (; 152 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa32 (; 131 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) local.get $0 i32.eqz if - i32.const 4632 - call $~lib/rt/purerc/__retain + i32.const 4416 + call $~lib/rt/pure/__retain return end local.get $0 @@ -7472,9 +6020,9 @@ i32.store16 end local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (; 153 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 132 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1 i32.shl @@ -7518,7 +6066,7 @@ end local.get $2 ) - (func $~lib/array/Array#join_int (; 154 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 133 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7526,7 +6074,7 @@ (local $6 i32) (local $7 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -7536,11 +6084,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end @@ -7554,12 +6102,12 @@ i32.load call $~lib/util/number/itoa32 local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -7581,7 +6129,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $2 i32.const 0 local.set $0 @@ -7646,36 +6194,36 @@ call $~lib/string/String#substring local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/array/Array#join (; 155 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 134 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 ) - (func $~lib/util/number/utoa32 (; 156 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/utoa32 (; 135 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 i32.eqz if - i32.const 4632 - call $~lib/rt/purerc/__retain + i32.const 4416 + call $~lib/rt/pure/__retain return end local.get $0 @@ -7690,9 +6238,9 @@ local.get $1 call $~lib/util/number/utoa32_lut local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (; 157 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 136 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1 i32.shl @@ -7716,7 +6264,7 @@ call $~lib/util/number/utoa32_lut local.get $0 ) - (func $~lib/array/Array#join_int (; 158 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 137 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7724,7 +6272,7 @@ (local $6 i32) (local $7 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -7734,11 +6282,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end @@ -7752,12 +6300,12 @@ i32.load call $~lib/util/number/utoa32 local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -7779,7 +6327,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $2 i32.const 0 local.set $0 @@ -7844,29 +6392,29 @@ call $~lib/string/String#substring local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/array/Array#join (; 159 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 138 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 ) - (func $~lib/util/number/genDigits (; 160 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/util/number/genDigits (; 139 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) (local $7 i32) (local $8 i32) (local $9 i64) @@ -7901,7 +6449,7 @@ local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 - i32.const 6540 + i32.const 6324 i32.load local.set $13 loop $continue|0 @@ -8271,7 +6819,7 @@ local.get $6 end ) - (func $~lib/util/number/prettify (; 161 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/prettify (; 140 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 i32.eqz @@ -8522,7 +7070,7 @@ end end ) - (func $~lib/util/number/dtoa_core (; 162 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/util/number/dtoa_core (; 141 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i32) (local $4 i64) @@ -8638,7 +7186,7 @@ i32.shl i32.sub global.set $~lib/util/number/_K - i32.const 6228 + i32.const 6012 i32.load local.get $3 i32.const 3 @@ -8646,7 +7194,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - i32.const 6452 + i32.const 6236 i32.load local.get $3 i32.const 1 @@ -8810,15 +7358,15 @@ local.get $10 i32.add ) - (func $~lib/util/number/dtoa (; 163 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/util/number/dtoa (; 142 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) (local $1 i32) (local $2 i32) local.get $0 f64.const 0 f64.eq if - i32.const 5392 - call $~lib/rt/purerc/__retain + i32.const 5176 + call $~lib/rt/pure/__retain return end local.get $0 @@ -8831,17 +7379,17 @@ local.get $0 f64.ne if - i32.const 5416 - call $~lib/rt/purerc/__retain + i32.const 5200 + call $~lib/rt/pure/__retain return end - i32.const 5440 - i32.const 5480 + i32.const 5224 + i32.const 5264 local.get $0 f64.const 0 f64.lt select - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end i32.const 56 @@ -8855,7 +7403,7 @@ i32.eq if local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $1 @@ -8866,7 +7414,7 @@ call $~lib/rt/tlsf/__free local.get $2 ) - (func $~lib/util/number/dtoa_stream (; 164 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32) + (func $~lib/util/number/dtoa_stream (; 143 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32) (local $3 i32) local.get $1 i32.const 1 @@ -8920,8 +7468,8 @@ i32.add local.set $1 local.get $0 - i32.const 5440 - i32.const 5480 + i32.const 5224 + i32.const 5264 local.get $3 select local.get $1 @@ -8937,15 +7485,15 @@ local.get $2 call $~lib/util/number/dtoa_core ) - (func $~lib/array/Array#join_flt (; 165 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_flt (; 144 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - i32.const 5368 - call $~lib/rt/purerc/__retain + i32.const 5152 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -8955,11 +7503,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 5368 - call $~lib/rt/purerc/__release + i32.const 5152 + call $~lib/rt/pure/__release local.get $0 return end @@ -8973,16 +7521,16 @@ f64.load call $~lib/util/number/dtoa local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $0 - call $~lib/rt/purerc/__release - i32.const 5368 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release + i32.const 5152 + call $~lib/rt/pure/__release local.get $1 return end - i32.const 5364 + i32.const 5148 i32.load i32.const 1 i32.shr_u @@ -8998,7 +7546,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 i32.const 0 local.set $0 @@ -9026,7 +7574,7 @@ i32.shl local.get $1 i32.add - i32.const 5368 + i32.const 5152 local.get $4 i32.const 1 i32.shl @@ -9062,18 +7610,18 @@ local.get $0 call $~lib/string/String#substring local.set $0 - i32.const 5368 - call $~lib/rt/purerc/__release + i32.const 5152 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end - i32.const 5368 - call $~lib/rt/purerc/__release + i32.const 5152 + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array<~lib/string/String>#join_str (; 166 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#join_str (; 145 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9082,7 +7630,7 @@ (local $7 i32) (local $8 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -9092,11 +7640,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end @@ -9108,10 +7656,10 @@ if local.get $6 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end @@ -9140,7 +7688,7 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $0 @@ -9171,7 +7719,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $3 i32.const 0 local.set $4 @@ -9187,7 +7735,7 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $2 @@ -9242,7 +7790,7 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $2 @@ -9262,30 +7810,30 @@ call $~lib/memory/memory.copy end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array<~lib/string/String>#join (; 167 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#join (; 146 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array<~lib/string/String>#join_str local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 ) - (func $std/array/Ref#constructor (; 168 ;) (type $FUNCSIG$i) (result i32) + (func $std/array/Ref#constructor (; 147 ;) (type $FUNCSIG$i) (result i32) i32.const 0 i32.const 32 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#join_ref (; 169 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_ref (; 148 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9293,8 +7841,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -9304,11 +7852,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end @@ -9318,15 +7866,15 @@ local.get $2 i32.eqz if - i32.const 6720 - call $~lib/rt/purerc/__retain + i32.const 6504 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -9342,7 +7890,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 i32.const 0 local.set $0 @@ -9358,7 +7906,7 @@ i32.add i32.load local.get $5 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $5 if local.get $0 @@ -9366,7 +7914,7 @@ i32.shl local.get $1 i32.add - i32.const 6720 + i32.const 6504 i32.const 30 call $~lib/memory/memory.copy local.get $0 @@ -9381,7 +7929,7 @@ i32.shl local.get $1 i32.add - i32.const 4536 + i32.const 4320 local.get $3 i32.const 1 i32.shl @@ -9411,7 +7959,7 @@ i32.shl local.get $1 i32.add - i32.const 6720 + i32.const 6504 i32.const 30 call $~lib/memory/memory.copy local.get $0 @@ -9428,27 +7976,27 @@ local.get $0 call $~lib/string/String#substring local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array#toString (; 170 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#toString (; 149 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join ) - (func $~lib/util/number/itoa_stream (; 171 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 150 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $1 i32.const 1 @@ -9503,15 +8051,15 @@ end local.get $2 ) - (func $~lib/array/Array#join_int (; 172 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 151 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -9521,11 +8069,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end @@ -9539,16 +8087,16 @@ i32.load8_s call $~lib/util/number/itoa32 local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $0 - call $~lib/rt/purerc/__release - i32.const 4536 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 return end - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -9564,7 +8112,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 i32.const 0 local.set $0 @@ -9590,7 +8138,7 @@ i32.shl local.get $1 i32.add - i32.const 4536 + i32.const 4320 local.get $4 i32.const 1 i32.shl @@ -9624,18 +8172,18 @@ local.get $0 call $~lib/string/String#substring local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/number/itoa_stream (; 173 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 152 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1 i32.shl @@ -9665,15 +8213,15 @@ call $~lib/util/number/utoa32_lut local.get $1 ) - (func $~lib/array/Array#join_int (; 174 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 153 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -9683,11 +8231,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end @@ -9701,16 +8249,16 @@ i32.load16_u call $~lib/util/number/utoa32 local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $0 - call $~lib/rt/purerc/__release - i32.const 4536 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 return end - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -9726,7 +8274,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 i32.const 0 local.set $0 @@ -9754,7 +8302,7 @@ i32.shl local.get $1 i32.add - i32.const 4536 + i32.const 4320 local.get $4 i32.const 1 i32.shl @@ -9790,18 +8338,18 @@ local.get $0 call $~lib/string/String#substring local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/number/decimalCount64 (; 175 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/decimalCount64 (; 154 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) local.get $0 i64.const 1000000000000000 i64.lt_u @@ -9855,12 +8403,12 @@ end end ) - (func $~lib/util/number/utoa64_lut (; 176 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/util/number/utoa64_lut (; 155 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - i32.const 5076 + i32.const 4860 i32.load local.set $3 loop $continue|0 @@ -9952,15 +8500,15 @@ local.get $2 call $~lib/util/number/utoa32_lut ) - (func $~lib/util/number/utoa64 (; 177 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/utoa64 (; 156 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) local.get $0 i64.eqz if - i32.const 4632 - call $~lib/rt/purerc/__retain + i32.const 4416 + call $~lib/rt/pure/__retain return end local.get $0 @@ -9994,9 +8542,9 @@ call $~lib/util/number/utoa64_lut end local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (; 178 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_stream (; 157 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) (local $3 i32) local.get $1 i32.const 1 @@ -10036,15 +8584,15 @@ end local.get $1 ) - (func $~lib/array/Array#join_int (; 179 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 158 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -10054,11 +8602,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end @@ -10072,16 +8620,16 @@ i64.load call $~lib/util/number/utoa64 local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $0 - call $~lib/rt/purerc/__release - i32.const 4536 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 return end - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -10097,7 +8645,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 i32.const 0 local.set $0 @@ -10125,7 +8673,7 @@ i32.shl local.get $1 i32.add - i32.const 4536 + i32.const 4320 local.get $4 i32.const 1 i32.shl @@ -10161,18 +8709,18 @@ local.get $0 call $~lib/string/String#substring local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/number/itoa64 (; 180 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa64 (; 159 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -10180,8 +8728,8 @@ local.get $0 i64.eqz if - i32.const 4632 - call $~lib/rt/purerc/__retain + i32.const 4416 + call $~lib/rt/pure/__retain return end block (result i32) @@ -10237,9 +8785,9 @@ i32.store16 end local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (; 181 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_stream (; 160 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) (local $3 i32) (local $4 i32) local.get $1 @@ -10302,15 +8850,15 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 182 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 161 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -10320,11 +8868,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end @@ -10338,16 +8886,16 @@ i64.load call $~lib/util/number/itoa64 local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $0 - call $~lib/rt/purerc/__release - i32.const 4536 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 return end - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -10363,7 +8911,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 i32.const 0 local.set $0 @@ -10391,7 +8939,7 @@ i32.shl local.get $1 i32.add - i32.const 4536 + i32.const 4320 local.get $4 i32.const 1 i32.shl @@ -10427,23 +8975,23 @@ local.get $0 call $~lib/string/String#substring local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array<~lib/string/String | null>#toString (; 183 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#toString (; 162 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array<~lib/string/String>#join ) - (func $~lib/array/Array<~lib/array/Array>#join_arr (; 184 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join_arr (; 163 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -10451,8 +8999,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -10462,18 +9010,18 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $1 - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -10489,23 +9037,23 @@ local.get $3 i32.load i32.const 0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join else - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain end local.set $2 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -10521,35 +9069,35 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $1 local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join local.tee $5 call $~lib/string/String.__concat local.tee $7 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $6 if local.get $1 - i32.const 4536 + i32.const 4320 call $~lib/string/String.__concat local.tee $5 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $4 i32.const 1 @@ -10565,31 +9113,31 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $1 local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join local.tee $2 call $~lib/string/String.__concat local.tee $3 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/number/itoa_stream (; 185 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 164 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1 i32.shl @@ -10619,15 +9167,15 @@ call $~lib/util/number/utoa32_lut local.get $1 ) - (func $~lib/array/Array#join_int (; 186 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 165 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -10637,11 +9185,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end @@ -10655,16 +9203,16 @@ i32.load8_u call $~lib/util/number/utoa32 local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $0 - call $~lib/rt/purerc/__release - i32.const 4536 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 return end - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -10680,7 +9228,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 i32.const 0 local.set $0 @@ -10706,7 +9254,7 @@ i32.shl local.get $1 i32.add - i32.const 4536 + i32.const 4320 local.get $4 i32.const 1 i32.shl @@ -10740,29 +9288,29 @@ local.get $0 call $~lib/string/String#substring local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array#join (; 187 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + (func $~lib/array/Array#join (; 166 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 call $~lib/array/Array#join_int local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 ) - (func $~lib/array/Array<~lib/array/Array>#join_arr (; 188 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join_arr (; 167 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -10770,8 +9318,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -10781,18 +9329,18 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $1 - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -10808,22 +9356,22 @@ local.get $3 i32.load i32.const 0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if (result i32) local.get $0 call $~lib/array/Array#join else - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain end local.set $2 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -10839,7 +9387,7 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $1 @@ -10849,24 +9397,24 @@ call $~lib/string/String.__concat local.tee $7 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $6 if local.get $1 - i32.const 4536 + i32.const 4320 call $~lib/string/String.__concat local.tee $5 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $4 i32.const 1 @@ -10882,7 +9430,7 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $1 @@ -10892,20 +9440,20 @@ call $~lib/string/String.__concat local.tee $3 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array<~lib/array/Array>#join_arr (; 189 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join_arr (; 168 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -10913,8 +9461,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -10924,18 +9472,18 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $1 - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -10951,23 +9499,23 @@ local.get $3 i32.load i32.const 0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join else - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain end local.set $2 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -10983,35 +9531,35 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $1 local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join local.tee $5 call $~lib/string/String.__concat local.tee $7 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $6 if local.get $1 - i32.const 4536 + i32.const 4320 call $~lib/string/String.__concat local.tee $5 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $4 i32.const 1 @@ -11027,42 +9575,42 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $1 local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join local.tee $2 call $~lib/string/String.__concat local.tee $3 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array<~lib/array/Array>#join (; 190 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + (func $~lib/array/Array<~lib/array/Array>#join (; 169 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 call $~lib/array/Array<~lib/array/Array>#join_arr local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join_arr (; 191 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join_arr (; 170 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -11070,8 +9618,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -11081,18 +9629,18 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 return end - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $1 - i32.const 4532 + i32.const 4316 i32.load i32.const 1 i32.shr_u @@ -11108,22 +9656,22 @@ local.get $3 i32.load i32.const 0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if (result i32) local.get $0 call $~lib/array/Array<~lib/array/Array>#join else - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain end local.set $2 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -11139,7 +9687,7 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $1 @@ -11149,24 +9697,24 @@ call $~lib/string/String.__concat local.tee $7 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $6 if local.get $1 - i32.const 4536 + i32.const 4320 call $~lib/string/String.__concat local.tee $5 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $4 i32.const 1 @@ -11182,7 +9730,7 @@ i32.add i32.load local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 if local.get $1 @@ -11192,31 +9740,20 @@ call $~lib/string/String.__concat local.tee $3 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/rt/purerc/__release (; 192 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.const 8040 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - ) - (func $start:std/array (; 193 ;) (type $FUNCSIG$v) + (func $start:std/array (; 171 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -11276,7 +9813,7 @@ call $~lib/array/Array.isArray<~lib/array/Array | null> if i32.const 0 - i32.const 232 + i32.const 128 i32.const 37 i32.const 2 call $~lib/builtins/abort @@ -11288,7 +9825,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 38 i32.const 2 call $~lib/builtins/abort @@ -11297,14 +9834,14 @@ i32.const 0 i32.const 18 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $0 local.set $1 local.get $0 call $~lib/array/Array.isArray if i32.const 0 - i32.const 232 + i32.const 128 i32.const 39 i32.const 2 call $~lib/builtins/abort @@ -11313,7 +9850,7 @@ i32.const 12 i32.const 19 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.const 1 i32.const 0 call $~lib/arraybuffer/ArrayBufferView#constructor @@ -11323,53 +9860,53 @@ call $~lib/array/Array.isArray if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 272 + i32.const 168 call $~lib/array/Array.isArray if i32.const 0 - i32.const 232 + i32.const 128 i32.const 42 i32.const 2 call $~lib/builtins/abort unreachable end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 5 i32.const 0 i32.const 20 - i32.const 296 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 192 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $2 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 0 i32.const 20 - i32.const 376 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 216 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 50 i32.const 2 call $~lib/builtins/abort @@ -11380,20 +9917,20 @@ i32.const 0 i32.const 2147483647 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 0 i32.const 20 - i32.const 504 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 344 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 53 i32.const 2 call $~lib/builtins/abort @@ -11404,20 +9941,20 @@ i32.const 0 i32.const -3 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 0 i32.const 20 - i32.const 528 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 368 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 56 i32.const 2 call $~lib/builtins/abort @@ -11428,20 +9965,20 @@ i32.const -2 i32.const 2147483647 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 0 i32.const 20 - i32.const 552 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 392 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 59 i32.const 2 call $~lib/builtins/abort @@ -11452,67 +9989,67 @@ i32.const 1 i32.const 0 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 0 i32.const 20 - i32.const 576 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 416 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 62 i32.const 2 call $~lib/builtins/abort unreachable end local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 5 i32.const 2 i32.const 21 - i32.const 600 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 440 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $2 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 2 i32.const 21 - i32.const 640 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 480 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 69 i32.const 2 call $~lib/builtins/abort @@ -11523,21 +10060,21 @@ i32.const 0 i32.const 2147483647 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 2 i32.const 21 - i32.const 680 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 520 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 72 i32.const 2 call $~lib/builtins/abort @@ -11548,21 +10085,21 @@ i32.const 0 i32.const -3 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 2 i32.const 21 - i32.const 720 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 560 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 75 i32.const 2 call $~lib/builtins/abort @@ -11573,21 +10110,21 @@ i32.const -2 i32.const 2147483647 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 2 i32.const 21 - i32.const 760 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 600 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 78 i32.const 2 call $~lib/builtins/abort @@ -11598,45 +10135,45 @@ i32.const 1 i32.const 0 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 5 i32.const 2 i32.const 21 - i32.const 800 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 640 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 81 i32.const 2 call $~lib/builtins/abort unreachable end local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.load offset=12 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 87 i32.const 2 call $~lib/builtins/abort @@ -11646,7 +10183,7 @@ call $std/array/internalCapacity if i32.const 0 - i32.const 232 + i32.const 128 i32.const 88 i32.const 2 call $~lib/builtins/abort @@ -11662,7 +10199,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 92 i32.const 2 call $~lib/builtins/abort @@ -11674,7 +10211,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 93 i32.const 2 call $~lib/builtins/abort @@ -11686,7 +10223,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 94 i32.const 2 call $~lib/builtins/abort @@ -11698,7 +10235,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 98 i32.const 2 call $~lib/builtins/abort @@ -11708,7 +10245,7 @@ i32.load offset=12 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 99 i32.const 2 call $~lib/builtins/abort @@ -11720,7 +10257,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 100 i32.const 2 call $~lib/builtins/abort @@ -11735,7 +10272,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 104 i32.const 2 call $~lib/builtins/abort @@ -11747,7 +10284,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 105 i32.const 2 call $~lib/builtins/abort @@ -11760,7 +10297,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 106 i32.const 2 call $~lib/builtins/abort @@ -11775,7 +10312,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 110 i32.const 2 call $~lib/builtins/abort @@ -11787,7 +10324,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 111 i32.const 2 call $~lib/builtins/abort @@ -11800,7 +10337,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 112 i32.const 2 call $~lib/builtins/abort @@ -11813,7 +10350,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 113 i32.const 2 call $~lib/builtins/abort @@ -11828,7 +10365,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 117 i32.const 2 call $~lib/builtins/abort @@ -11840,7 +10377,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 118 i32.const 2 call $~lib/builtins/abort @@ -11853,7 +10390,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 119 i32.const 2 call $~lib/builtins/abort @@ -11866,7 +10403,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 120 i32.const 2 call $~lib/builtins/abort @@ -11879,7 +10416,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 121 i32.const 2 call $~lib/builtins/abort @@ -11897,7 +10434,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 130 i32.const 2 call $~lib/builtins/abort @@ -11909,7 +10446,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 131 i32.const 2 call $~lib/builtins/abort @@ -11921,7 +10458,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 132 i32.const 2 call $~lib/builtins/abort @@ -11931,19 +10468,19 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 888 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 728 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 call $~lib/array/Array#concat - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr call $std/array/internalCapacity i32.const 3 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 135 i32.const 2 call $~lib/builtins/abort @@ -11956,7 +10493,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 137 i32.const 2 call $~lib/builtins/abort @@ -11969,7 +10506,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 138 i32.const 2 call $~lib/builtins/abort @@ -11982,7 +10519,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 139 i32.const 2 call $~lib/builtins/abort @@ -11995,7 +10532,7 @@ i32.const 47 call $~lib/array/Array#push local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr local.get $4 call $~lib/array/Array#concat @@ -12006,7 +10543,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 146 i32.const 2 call $~lib/builtins/abort @@ -12018,7 +10555,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 147 i32.const 2 call $~lib/builtins/abort @@ -12030,7 +10567,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 148 i32.const 2 call $~lib/builtins/abort @@ -12043,7 +10580,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 149 i32.const 2 call $~lib/builtins/abort @@ -12056,7 +10593,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 150 i32.const 2 call $~lib/builtins/abort @@ -12069,7 +10606,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 151 i32.const 2 call $~lib/builtins/abort @@ -12082,7 +10619,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 152 i32.const 2 call $~lib/builtins/abort @@ -12095,7 +10632,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 153 i32.const 2 call $~lib/builtins/abort @@ -12110,14 +10647,14 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 156 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.const 0 call $~lib/array/Array#concat @@ -12127,7 +10664,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 159 i32.const 2 call $~lib/builtins/abort @@ -12140,7 +10677,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 160 i32.const 2 call $~lib/builtins/abort @@ -12149,23 +10686,23 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 904 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 744 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $5 i32.load offset=12 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 163 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 global.get $std/array/arr call $~lib/array/Array#concat @@ -12175,7 +10712,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 165 i32.const 2 call $~lib/builtins/abort @@ -12185,31 +10722,31 @@ i32.load offset=12 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 166 i32.const 2 call $~lib/builtins/abort unreachable end local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 5 i32.const 2 i32.const 17 - i32.const 920 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 760 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $29 i32.const 0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 0 i32.const 3 @@ -12219,16 +10756,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 960 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 800 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $31 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 174 i32.const 2 call $~lib/builtins/abort @@ -12237,12 +10774,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1000 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 840 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $32 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 1 i32.const 3 @@ -12252,16 +10789,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1040 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 880 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $34 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 176 i32.const 2 call $~lib/builtins/abort @@ -12270,12 +10807,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1080 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 920 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $35 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 1 i32.const 2 @@ -12285,16 +10822,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1120 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 960 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $7 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 178 i32.const 2 call $~lib/builtins/abort @@ -12303,12 +10840,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1160 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1000 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $10 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 2 i32.const 2 @@ -12318,16 +10855,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1200 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1040 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $16 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 180 i32.const 2 call $~lib/builtins/abort @@ -12336,12 +10873,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1240 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1080 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $17 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 0 i32.const 3 @@ -12351,16 +10888,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1280 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1120 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $19 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 182 i32.const 2 call $~lib/builtins/abort @@ -12369,12 +10906,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1320 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1160 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $20 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 1 i32.const 3 @@ -12384,16 +10921,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1360 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1200 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $22 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 184 i32.const 2 call $~lib/builtins/abort @@ -12402,12 +10939,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1400 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1240 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $23 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 1 i32.const 2 @@ -12417,16 +10954,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1440 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1280 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $28 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 186 i32.const 2 call $~lib/builtins/abort @@ -12435,12 +10972,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1480 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1320 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $9 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 0 i32.const -2 @@ -12450,16 +10987,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1520 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1360 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $12 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 188 i32.const 2 call $~lib/builtins/abort @@ -12468,12 +11005,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1560 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1400 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $13 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 0 i32.const -2 @@ -12483,16 +11020,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1600 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1440 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $25 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 190 i32.const 2 call $~lib/builtins/abort @@ -12501,12 +11038,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1640 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1480 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $26 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const -4 i32.const -3 @@ -12516,16 +11053,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1680 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1520 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $27 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 192 i32.const 2 call $~lib/builtins/abort @@ -12534,12 +11071,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1720 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1560 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $2 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const -4 i32.const -3 @@ -12549,16 +11086,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1760 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1600 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 194 i32.const 2 call $~lib/builtins/abort @@ -12567,12 +11104,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1800 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1640 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $1 i32.const -4 i32.const -3 @@ -12582,95 +11119,95 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1840 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1680 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 196 i32.const 2 call $~lib/builtins/abort unreachable end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $29 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $30 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $31 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $32 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $33 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $34 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $35 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $18 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $19 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $21 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $28 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.const 42 call $~lib/array/Array#unshift @@ -12680,7 +11217,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 204 i32.const 2 call $~lib/builtins/abort @@ -12692,7 +11229,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 205 i32.const 2 call $~lib/builtins/abort @@ -12705,7 +11242,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 206 i32.const 2 call $~lib/builtins/abort @@ -12718,7 +11255,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 207 i32.const 2 call $~lib/builtins/abort @@ -12731,7 +11268,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 208 i32.const 2 call $~lib/builtins/abort @@ -12744,7 +11281,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 209 i32.const 2 call $~lib/builtins/abort @@ -12759,7 +11296,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 213 i32.const 2 call $~lib/builtins/abort @@ -12771,7 +11308,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 214 i32.const 2 call $~lib/builtins/abort @@ -12784,7 +11321,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 215 i32.const 2 call $~lib/builtins/abort @@ -12797,7 +11334,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 216 i32.const 2 call $~lib/builtins/abort @@ -12810,7 +11347,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 217 i32.const 2 call $~lib/builtins/abort @@ -12823,7 +11360,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 218 i32.const 2 call $~lib/builtins/abort @@ -12836,7 +11373,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 219 i32.const 2 call $~lib/builtins/abort @@ -12850,7 +11387,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 228 i32.const 2 call $~lib/builtins/abort @@ -12862,7 +11399,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 229 i32.const 2 call $~lib/builtins/abort @@ -12874,7 +11411,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 230 i32.const 2 call $~lib/builtins/abort @@ -12887,7 +11424,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 231 i32.const 2 call $~lib/builtins/abort @@ -12900,7 +11437,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 232 i32.const 2 call $~lib/builtins/abort @@ -12913,7 +11450,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 233 i32.const 2 call $~lib/builtins/abort @@ -12926,7 +11463,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 234 i32.const 2 call $~lib/builtins/abort @@ -12940,7 +11477,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 238 i32.const 2 call $~lib/builtins/abort @@ -12952,7 +11489,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 239 i32.const 2 call $~lib/builtins/abort @@ -12964,7 +11501,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 240 i32.const 2 call $~lib/builtins/abort @@ -12977,7 +11514,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 241 i32.const 2 call $~lib/builtins/abort @@ -12990,7 +11527,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 242 i32.const 2 call $~lib/builtins/abort @@ -13003,7 +11540,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 243 i32.const 2 call $~lib/builtins/abort @@ -13011,14 +11548,14 @@ end global.get $std/array/arr call $~lib/array/Array#reverse - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.load offset=12 i32.const 3 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 251 i32.const 2 call $~lib/builtins/abort @@ -13030,7 +11567,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 252 i32.const 2 call $~lib/builtins/abort @@ -13043,7 +11580,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 253 i32.const 2 call $~lib/builtins/abort @@ -13056,7 +11593,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 254 i32.const 2 call $~lib/builtins/abort @@ -13069,7 +11606,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 255 i32.const 2 call $~lib/builtins/abort @@ -13089,7 +11626,7 @@ global.get $std/array/i if i32.const 0 - i32.const 232 + i32.const 128 i32.const 265 i32.const 2 call $~lib/builtins/abort @@ -13105,7 +11642,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 268 i32.const 2 call $~lib/builtins/abort @@ -13121,7 +11658,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 271 i32.const 2 call $~lib/builtins/abort @@ -13137,7 +11674,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 274 i32.const 2 call $~lib/builtins/abort @@ -13153,7 +11690,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 277 i32.const 2 call $~lib/builtins/abort @@ -13169,7 +11706,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 280 i32.const 2 call $~lib/builtins/abort @@ -13185,7 +11722,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 283 i32.const 2 call $~lib/builtins/abort @@ -13201,7 +11738,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 286 i32.const 2 call $~lib/builtins/abort @@ -13217,7 +11754,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 289 i32.const 2 call $~lib/builtins/abort @@ -13233,7 +11770,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 292 i32.const 2 call $~lib/builtins/abort @@ -13247,7 +11784,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 299 i32.const 2 call $~lib/builtins/abort @@ -13261,7 +11798,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 302 i32.const 2 call $~lib/builtins/abort @@ -13273,7 +11810,7 @@ call $~lib/array/Array#includes if i32.const 0 - i32.const 232 + i32.const 128 i32.const 305 i32.const 2 call $~lib/builtins/abort @@ -13285,7 +11822,7 @@ call $~lib/array/Array#includes if i32.const 0 - i32.const 232 + i32.const 128 i32.const 308 i32.const 2 call $~lib/builtins/abort @@ -13299,7 +11836,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 311 i32.const 2 call $~lib/builtins/abort @@ -13313,7 +11850,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 314 i32.const 2 call $~lib/builtins/abort @@ -13327,7 +11864,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 317 i32.const 2 call $~lib/builtins/abort @@ -13341,7 +11878,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 320 i32.const 2 call $~lib/builtins/abort @@ -13355,7 +11892,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 323 i32.const 2 call $~lib/builtins/abort @@ -13369,7 +11906,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 326 i32.const 2 call $~lib/builtins/abort @@ -13379,14 +11916,14 @@ i32.const 1 i32.const 1 call $~lib/array/Array#splice - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.load offset=12 i32.const 4 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 330 i32.const 2 call $~lib/builtins/abort @@ -13398,7 +11935,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 331 i32.const 2 call $~lib/builtins/abort @@ -13411,7 +11948,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 332 i32.const 2 call $~lib/builtins/abort @@ -13424,7 +11961,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 333 i32.const 2 call $~lib/builtins/abort @@ -13433,11 +11970,11 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1880 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1720 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $38 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 i32.const 2147483647 @@ -13446,16 +11983,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1920 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1760 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $40 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 340 i32.const 2 call $~lib/builtins/abort @@ -13465,16 +12002,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 1960 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1800 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $41 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 341 i32.const 2 call $~lib/builtins/abort @@ -13483,12 +12020,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1976 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1816 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $42 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 2 i32.const 2147483647 @@ -13497,16 +12034,16 @@ i32.const 3 i32.const 2 i32.const 17 - i32.const 2016 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1856 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $44 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 344 i32.const 2 call $~lib/builtins/abort @@ -13516,16 +12053,16 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 2048 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1888 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $45 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 345 i32.const 2 call $~lib/builtins/abort @@ -13534,12 +12071,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2072 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1912 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $46 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 2 i32.const 2 @@ -13548,16 +12085,16 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 2112 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1952 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $48 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 348 i32.const 2 call $~lib/builtins/abort @@ -13567,16 +12104,16 @@ i32.const 3 i32.const 2 i32.const 17 - i32.const 2136 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1976 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $49 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 349 i32.const 2 call $~lib/builtins/abort @@ -13585,12 +12122,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2168 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2008 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $50 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 0 i32.const 1 @@ -13599,16 +12136,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 2208 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2048 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $52 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 352 i32.const 2 call $~lib/builtins/abort @@ -13618,16 +12155,16 @@ i32.const 4 i32.const 2 i32.const 17 - i32.const 2232 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2072 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $29 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 353 i32.const 2 call $~lib/builtins/abort @@ -13636,12 +12173,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2264 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2104 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $30 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const -1 i32.const 2147483647 @@ -13650,16 +12187,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 2304 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2144 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $32 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 356 i32.const 2 call $~lib/builtins/abort @@ -13669,16 +12206,16 @@ i32.const 4 i32.const 2 i32.const 17 - i32.const 2328 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2168 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $33 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 357 i32.const 2 call $~lib/builtins/abort @@ -13687,12 +12224,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2360 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2200 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $34 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const -2 i32.const 2147483647 @@ -13701,16 +12238,16 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 2400 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2240 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $36 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 360 i32.const 2 call $~lib/builtins/abort @@ -13720,16 +12257,16 @@ i32.const 3 i32.const 2 i32.const 17 - i32.const 2424 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2264 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $7 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 361 i32.const 2 call $~lib/builtins/abort @@ -13738,12 +12275,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2456 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2296 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $10 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const -2 i32.const 1 @@ -13752,16 +12289,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 2496 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2336 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $16 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 364 i32.const 2 call $~lib/builtins/abort @@ -13771,16 +12308,16 @@ i32.const 4 i32.const 2 i32.const 17 - i32.const 2520 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2360 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 365 i32.const 2 call $~lib/builtins/abort @@ -13789,12 +12326,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2552 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2392 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $18 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const -7 i32.const 1 @@ -13803,16 +12340,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 2592 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2432 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $20 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 368 i32.const 2 call $~lib/builtins/abort @@ -13822,16 +12359,16 @@ i32.const 4 i32.const 2 i32.const 17 - i32.const 2616 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2456 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 369 i32.const 2 call $~lib/builtins/abort @@ -13840,12 +12377,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2648 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2488 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $22 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const -2 i32.const -1 @@ -13854,16 +12391,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 2688 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2528 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $24 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 372 i32.const 2 call $~lib/builtins/abort @@ -13873,16 +12410,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2704 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2544 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $28 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 373 i32.const 2 call $~lib/builtins/abort @@ -13891,12 +12428,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2744 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2584 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $9 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 1 i32.const -2 @@ -13905,16 +12442,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 2784 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2624 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $12 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 376 i32.const 2 call $~lib/builtins/abort @@ -13924,16 +12461,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2800 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2640 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 377 i32.const 2 call $~lib/builtins/abort @@ -13942,12 +12479,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2840 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2680 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $14 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 4 i32.const 0 @@ -13956,16 +12493,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 2880 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2720 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $26 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 380 i32.const 2 call $~lib/builtins/abort @@ -13975,16 +12512,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2896 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2736 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $8 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 381 i32.const 2 call $~lib/builtins/abort @@ -13993,12 +12530,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2936 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2776 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $27 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $0 i32.const 7 i32.const 0 @@ -14007,16 +12544,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 2976 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2816 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $6 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 384 i32.const 2 call $~lib/builtins/abort @@ -14026,16 +12563,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2992 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2832 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 385 i32.const 2 call $~lib/builtins/abort @@ -14044,12 +12581,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 3032 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2872 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 local.get $0 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.tee $37 i32.const 7 i32.const 5 @@ -14058,16 +12595,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 3072 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2912 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 388 i32.const 2 call $~lib/builtins/abort @@ -14077,127 +12614,127 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 3088 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2928 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 389 i32.const 2 call $~lib/builtins/abort unreachable end local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $37 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $41 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $42 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $43 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $44 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $45 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $46 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $47 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $48 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $49 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $50 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $51 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $52 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $29 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $30 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $31 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $32 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $33 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $34 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $35 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $18 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $19 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $21 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $28 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.const 0 i32.const 0 @@ -14221,7 +12758,7 @@ global.get $std/array/i if i32.const 0 - i32.const 232 + i32.const 128 i32.const 402 i32.const 2 call $~lib/builtins/abort @@ -14236,7 +12773,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 405 i32.const 2 call $~lib/builtins/abort @@ -14251,7 +12788,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 408 i32.const 2 call $~lib/builtins/abort @@ -14266,7 +12803,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 416 i32.const 2 call $~lib/builtins/abort @@ -14278,7 +12815,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 417 i32.const 2 call $~lib/builtins/abort @@ -14293,7 +12830,7 @@ i32.eq if i32.const 0 - i32.const 232 + i32.const 128 i32.const 419 i32.const 2 call $~lib/builtins/abort @@ -14320,7 +12857,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 432 i32.const 2 call $~lib/builtins/abort @@ -14332,7 +12869,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 433 i32.const 2 call $~lib/builtins/abort @@ -14351,7 +12888,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 443 i32.const 2 call $~lib/builtins/abort @@ -14362,7 +12899,7 @@ call $~lib/array/Array#every if i32.const 0 - i32.const 232 + i32.const 128 i32.const 446 i32.const 2 call $~lib/builtins/abort @@ -14375,7 +12912,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 454 i32.const 2 call $~lib/builtins/abort @@ -14387,7 +12924,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 455 i32.const 2 call $~lib/builtins/abort @@ -14398,7 +12935,7 @@ call $~lib/array/Array#every if i32.const 0 - i32.const 232 + i32.const 128 i32.const 457 i32.const 2 call $~lib/builtins/abort @@ -14423,7 +12960,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 470 i32.const 2 call $~lib/builtins/abort @@ -14435,7 +12972,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 471 i32.const 2 call $~lib/builtins/abort @@ -14454,7 +12991,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 481 i32.const 2 call $~lib/builtins/abort @@ -14465,7 +13002,7 @@ call $~lib/array/Array#some if i32.const 0 - i32.const 232 + i32.const 128 i32.const 484 i32.const 2 call $~lib/builtins/abort @@ -14476,7 +13013,7 @@ call $~lib/array/Array#some if i32.const 0 - i32.const 232 + i32.const 128 i32.const 492 i32.const 2 call $~lib/builtins/abort @@ -14488,7 +13025,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 493 i32.const 2 call $~lib/builtins/abort @@ -14501,7 +13038,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 495 i32.const 2 call $~lib/builtins/abort @@ -14524,7 +13061,7 @@ call $~lib/array/Array#some if i32.const 0 - i32.const 232 + i32.const 128 i32.const 508 i32.const 2 call $~lib/builtins/abort @@ -14536,7 +13073,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 509 i32.const 2 call $~lib/builtins/abort @@ -14558,7 +13095,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 520 i32.const 2 call $~lib/builtins/abort @@ -14574,7 +13111,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 529 i32.const 2 call $~lib/builtins/abort @@ -14586,7 +13123,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -14602,7 +13139,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 533 i32.const 2 call $~lib/builtins/abort @@ -14630,7 +13167,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 547 i32.const 2 call $~lib/builtins/abort @@ -14642,7 +13179,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 548 i32.const 2 call $~lib/builtins/abort @@ -14663,7 +13200,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 573 i32.const 2 call $~lib/builtins/abort @@ -14706,7 +13243,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 587 i32.const 2 call $~lib/builtins/abort @@ -14722,7 +13259,7 @@ f32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 588 i32.const 2 call $~lib/builtins/abort @@ -14733,13 +13270,13 @@ global.get $std/array/arr i32.const 23 call $~lib/array/Array#map - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 6 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 597 i32.const 2 call $~lib/builtins/abort @@ -14751,7 +13288,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 598 i32.const 2 call $~lib/builtins/abort @@ -14762,13 +13299,13 @@ global.get $std/array/arr i32.const 24 call $~lib/array/Array#map - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 406 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 605 i32.const 2 call $~lib/builtins/abort @@ -14791,13 +13328,13 @@ global.get $std/array/arr i32.const 25 call $~lib/array/Array#map - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 1 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 620 i32.const 2 call $~lib/builtins/abort @@ -14809,7 +13346,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 621 i32.const 2 call $~lib/builtins/abort @@ -14822,7 +13359,7 @@ i32.const 3 call $~lib/array/Array#push local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.const 26 call $~lib/array/Array#filter @@ -14832,7 +13369,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 631 i32.const 2 call $~lib/builtins/abort @@ -14843,13 +13380,13 @@ global.get $std/array/arr i32.const 27 call $~lib/array/Array#filter - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 6 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 640 i32.const 2 call $~lib/builtins/abort @@ -14861,7 +13398,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 641 i32.const 2 call $~lib/builtins/abort @@ -14872,13 +13409,13 @@ global.get $std/array/arr i32.const 28 call $~lib/array/Array#filter - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 406 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 648 i32.const 2 call $~lib/builtins/abort @@ -14901,13 +13438,13 @@ global.get $std/array/arr i32.const 29 call $~lib/array/Array#filter - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 1 i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 663 i32.const 2 call $~lib/builtins/abort @@ -14919,7 +13456,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 664 i32.const 2 call $~lib/builtins/abort @@ -14932,7 +13469,7 @@ i32.const 3 call $~lib/array/Array#push local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.const 30 i32.const 0 @@ -14943,7 +13480,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 674 i32.const 2 call $~lib/builtins/abort @@ -14959,7 +13496,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 678 i32.const 2 call $~lib/builtins/abort @@ -14975,7 +13512,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 681 i32.const 2 call $~lib/builtins/abort @@ -14987,7 +13524,7 @@ call $~lib/array/Array#reduce if i32.const 0 - i32.const 232 + i32.const 128 i32.const 684 i32.const 2 call $~lib/builtins/abort @@ -15003,7 +13540,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 692 i32.const 2 call $~lib/builtins/abort @@ -15015,7 +13552,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 693 i32.const 2 call $~lib/builtins/abort @@ -15031,7 +13568,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 695 i32.const 2 call $~lib/builtins/abort @@ -15059,7 +13596,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 708 i32.const 2 call $~lib/builtins/abort @@ -15071,7 +13608,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 709 i32.const 2 call $~lib/builtins/abort @@ -15093,7 +13630,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 719 i32.const 2 call $~lib/builtins/abort @@ -15109,7 +13646,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 723 i32.const 2 call $~lib/builtins/abort @@ -15125,7 +13662,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 726 i32.const 2 call $~lib/builtins/abort @@ -15137,7 +13674,7 @@ call $~lib/array/Array#reduceRight if i32.const 0 - i32.const 232 + i32.const 128 i32.const 729 i32.const 2 call $~lib/builtins/abort @@ -15153,7 +13690,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 737 i32.const 2 call $~lib/builtins/abort @@ -15165,7 +13702,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 738 i32.const 2 call $~lib/builtins/abort @@ -15181,7 +13718,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 740 i32.const 2 call $~lib/builtins/abort @@ -15209,7 +13746,7 @@ i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 753 i32.const 2 call $~lib/builtins/abort @@ -15219,7 +13756,7 @@ i32.load offset=12 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 754 i32.const 2 call $~lib/builtins/abort @@ -15243,11 +13780,11 @@ i32.const 8 i32.const 2 i32.const 22 - i32.const 3360 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3200 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $11 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $10 i32.const 0 global.set $~lib/argc @@ -15267,20 +13804,20 @@ local.get $10 local.get $1 call $~lib/array/Array#sort - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 i32.const 8 i32.const 2 i32.const 22 - i32.const 3408 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3248 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $12 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 843 i32.const 2 call $~lib/builtins/abort @@ -15289,11 +13826,11 @@ i32.const 8 i32.const 3 i32.const 23 - i32.const 3456 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3296 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $13 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $15 i32.const 0 global.set $~lib/argc @@ -15313,20 +13850,20 @@ local.get $15 local.get $1 call $~lib/array/Array#sort - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 i32.const 8 i32.const 3 i32.const 23 - i32.const 3536 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3376 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $14 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 847 i32.const 2 call $~lib/builtins/abort @@ -15335,11 +13872,11 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 3616 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3456 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $25 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $16 i32.const 0 global.set $~lib/argc @@ -15359,21 +13896,21 @@ local.get $16 local.get $1 call $~lib/array/Array#sort - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 i32.const 5 i32.const 2 i32.const 17 - i32.const 3656 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3496 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $26 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 851 i32.const 2 call $~lib/builtins/abort @@ -15382,11 +13919,11 @@ i32.const 5 i32.const 2 i32.const 21 - i32.const 3696 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3536 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $8 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $17 i32.const 0 global.set $~lib/argc @@ -15406,21 +13943,21 @@ local.get $17 local.get $6 call $~lib/array/Array#sort - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 i32.const 5 i32.const 2 i32.const 21 - i32.const 3736 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3576 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $27 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 855 i32.const 2 call $~lib/builtins/abort @@ -15429,47 +13966,47 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 3776 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3616 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $28 i32.const 1 i32.const 2 i32.const 17 - i32.const 3792 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3632 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $18 i32.const 2 i32.const 2 i32.const 17 - i32.const 3816 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3656 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $19 i32.const 4 i32.const 2 i32.const 17 - i32.const 3840 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3680 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $20 i32.const 4 i32.const 2 i32.const 17 - i32.const 3872 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3712 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $7 i32.const 64 call $std/array/createReverseOrderedArray @@ -15494,16 +14031,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 3960 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3800 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 875 i32.const 2 call $~lib/builtins/abort @@ -15515,16 +14052,16 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 3984 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3824 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 878 i32.const 2 call $~lib/builtins/abort @@ -15539,7 +14076,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 881 i32.const 2 call $~lib/builtins/abort @@ -15554,7 +14091,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 884 i32.const 2 call $~lib/builtins/abort @@ -15569,7 +14106,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 887 i32.const 2 call $~lib/builtins/abort @@ -15584,7 +14121,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 890 i32.const 2 call $~lib/builtins/abort @@ -15599,7 +14136,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 893 i32.const 2 call $~lib/builtins/abort @@ -15608,63 +14145,63 @@ local.get $9 call $std/array/assertSortedDefault local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $28 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $18 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $19 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $21 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 64 call $std/array/createRandomOrderedArray local.set $3 @@ -15684,38 +14221,38 @@ i32.const 52 call $std/array/assertSorted local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release call $std/array/createReverseOrderedNestedArray local.tee $0 i32.const 53 call $std/array/assertSorted<~lib/array/Array> local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release call $std/array/createReverseOrderedElementsArray local.tee $0 i32.const 54 call $std/array/assertSorted<~lib/array/Array> local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 7 i32.const 2 i32.const 27 - i32.const 4288 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4072 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 i32.const 7 i32.const 2 i32.const 27 - i32.const 4336 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4120 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 i32.const 1 global.set $~lib/argc @@ -15743,7 +14280,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 930 i32.const 2 call $~lib/builtins/abort @@ -15772,37 +14309,37 @@ local.get $6 call $std/array/assertSorted<~lib/array/Array> local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 2 i32.const 0 i32.const 29 - i32.const 4456 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4240 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $9 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $9 call $~lib/array/Array#join_bool local.set $11 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $11 - i32.const 4560 + i32.const 4344 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 941 i32.const 2 call $~lib/builtins/abort @@ -15811,19 +14348,19 @@ i32.const 3 i32.const 2 i32.const 17 - i32.const 4600 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4384 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $25 - i32.const 4272 + i32.const 4056 call $~lib/array/Array#join local.tee $26 - i32.const 5104 + i32.const 4888 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 942 i32.const 2 call $~lib/builtins/abort @@ -15832,19 +14369,19 @@ i32.const 3 i32.const 2 i32.const 21 - i32.const 5136 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4920 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $8 - i32.const 5168 + i32.const 4952 call $~lib/array/Array#join local.tee $27 - i32.const 5104 + i32.const 4888 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 943 i32.const 2 call $~lib/builtins/abort @@ -15853,19 +14390,19 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 5192 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4976 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $2 - i32.const 5216 + i32.const 5000 call $~lib/array/Array#join local.tee $6 - i32.const 5240 + i32.const 5024 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 944 i32.const 2 call $~lib/builtins/abort @@ -15874,25 +14411,25 @@ i32.const 6 i32.const 3 i32.const 23 - i32.const 5304 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 5088 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $12 - i32.const 5368 - call $~lib/rt/purerc/__retain + i32.const 5152 + call $~lib/rt/pure/__retain drop local.get $12 call $~lib/array/Array#join_flt local.set $13 - i32.const 5368 - call $~lib/rt/purerc/__release + i32.const 5152 + call $~lib/rt/pure/__release local.get $13 - i32.const 6568 + i32.const 6352 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 945 i32.const 2 call $~lib/builtins/abort @@ -15901,19 +14438,19 @@ i32.const 3 i32.const 2 i32.const 28 - i32.const 6688 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6472 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 - i32.const 4272 + i32.const 4056 call $~lib/array/Array<~lib/string/String>#join local.tee $5 - i32.const 6664 + i32.const 6448 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 946 i32.const 2 call $~lib/builtins/abort @@ -15923,123 +14460,123 @@ i32.const 2 i32.const 33 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.tee $1 i32.load offset=4 local.tee $0 call $std/array/Ref#constructor local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $0 i32.const 0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store offset=4 local.get $0 call $std/array/Ref#constructor local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store offset=8 local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $14 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $14 call $~lib/array/Array#join_ref local.set $1 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - i32.const 6768 + i32.const 6552 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 948 i32.const 2 call $~lib/builtins/abort unreachable end local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 2 i32.const 17 - i32.const 6848 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6632 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $15 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $29 i32.const 1 i32.const 2 i32.const 17 - i32.const 6864 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6648 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $16 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $30 i32.const 2 i32.const 2 i32.const 17 - i32.const 6888 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6672 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $17 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $31 i32.const 4 i32.const 2 i32.const 17 - i32.const 6912 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6696 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $18 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $32 local.get $29 call $~lib/array/Array#toString local.tee $19 - i32.const 4272 + i32.const 4056 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 958 i32.const 2 call $~lib/builtins/abort @@ -16048,12 +14585,12 @@ local.get $30 call $~lib/array/Array#toString local.tee $20 - i32.const 6664 + i32.const 6448 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 959 i32.const 2 call $~lib/builtins/abort @@ -16062,12 +14599,12 @@ local.get $31 call $~lib/array/Array#toString local.tee $21 - i32.const 6944 + i32.const 6728 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 960 i32.const 2 call $~lib/builtins/abort @@ -16076,12 +14613,12 @@ local.get $32 call $~lib/array/Array#toString local.tee $22 - i32.const 6968 + i32.const 6752 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 961 i32.const 2 call $~lib/builtins/abort @@ -16090,25 +14627,25 @@ i32.const 3 i32.const 0 i32.const 34 - i32.const 7000 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6784 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $33 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $33 call $~lib/array/Array#join_int local.set $2 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $2 - i32.const 7024 + i32.const 6808 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 963 i32.const 2 call $~lib/builtins/abort @@ -16117,25 +14654,25 @@ i32.const 3 i32.const 1 i32.const 35 - i32.const 7056 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6840 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $34 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $34 call $~lib/array/Array#join_int local.set $6 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $6 - i32.const 7080 + i32.const 6864 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 964 i32.const 2 call $~lib/builtins/abort @@ -16144,25 +14681,25 @@ i32.const 3 i32.const 3 i32.const 30 - i32.const 7120 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6904 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $35 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $35 call $~lib/array/Array#join_int local.set $4 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $4 - i32.const 7160 + i32.const 6944 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 965 i32.const 2 call $~lib/builtins/abort @@ -16171,25 +14708,25 @@ i32.const 4 i32.const 3 i32.const 36 - i32.const 7224 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7008 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $36 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $36 call $~lib/array/Array#join_int local.set $5 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $5 - i32.const 7272 + i32.const 7056 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 966 i32.const 2 call $~lib/builtins/abort @@ -16198,20 +14735,20 @@ i32.const 7 i32.const 2 i32.const 27 - i32.const 7376 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7160 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $23 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $24 call $~lib/array/Array<~lib/string/String | null>#toString local.tee $28 - i32.const 7424 + i32.const 7208 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 970 i32.const 2 call $~lib/builtins/abort @@ -16220,18 +14757,18 @@ i32.const 4 i32.const 2 i32.const 28 - i32.const 7520 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7304 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $9 call $~lib/array/Array<~lib/string/String | null>#toString local.tee $11 - i32.const 7552 + i32.const 7336 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 971 i32.const 2 call $~lib/builtins/abort @@ -16241,47 +14778,47 @@ i32.const 2 i32.const 24 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.tee $3 i32.load offset=4 local.tee $0 i32.const 2 i32.const 2 i32.const 17 - i32.const 7584 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7368 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $12 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $0 i32.const 2 i32.const 2 i32.const 17 - i32.const 7608 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7392 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $13 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store offset=4 local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $7 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $7 call $~lib/array/Array<~lib/array/Array>#join_arr local.set $1 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $1 - i32.const 7632 + i32.const 7416 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 974 i32.const 2 call $~lib/builtins/abort @@ -16291,47 +14828,47 @@ i32.const 2 i32.const 37 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.tee $3 i32.load offset=4 local.tee $0 i32.const 2 i32.const 0 i32.const 20 - i32.const 7664 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7448 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $14 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $0 i32.const 2 i32.const 0 i32.const 20 - i32.const 7688 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7472 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $25 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store offset=4 local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $10 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $10 call $~lib/array/Array<~lib/array/Array>#join_arr local.set $3 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $3 - i32.const 7632 + i32.const 7416 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 977 i32.const 2 call $~lib/builtins/abort @@ -16341,7 +14878,7 @@ i32.const 2 i32.const 39 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.tee $26 i32.load offset=4 local.set $8 @@ -16349,121 +14886,121 @@ i32.const 2 i32.const 38 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.tee $0 i32.load offset=4 i32.const 1 i32.const 2 i32.const 21 - i32.const 7712 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7496 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $27 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $8 local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $26 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 - i32.const 4536 - call $~lib/rt/purerc/__retain + i32.const 4320 + call $~lib/rt/pure/__retain drop local.get $8 call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join_arr local.set $0 - i32.const 4536 - call $~lib/rt/purerc/__release + i32.const 4320 + call $~lib/rt/pure/__release local.get $0 - i32.const 6664 + i32.const 6448 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 980 i32.const 2 call $~lib/builtins/abort unreachable end local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $29 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $30 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $31 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $18 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $32 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $19 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $21 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $33 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $34 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $35 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $28 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/array/main (; 194 ;) (type $FUNCSIG$v) + (func $std/array/main (; 172 ;) (type $FUNCSIG$v) global.get $~lib/started i32.eqz if @@ -16472,7 +15009,7 @@ global.set $~lib/started end ) - (func $~lib/rt/purerc/markGray (; 195 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 173 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -16493,10 +15030,487 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 196 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/removeBlock (; 174 ;) (type $FUNCSIG$vii) (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 7520 + i32.const 275 + 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 7520 + i32.const 277 + 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 7520 + i32.const 290 + 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 $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.get $1 + i32.eq + if + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $4 + i32.store offset=96 + local.get $4 + i32.eqz + if + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 (; 175 ;) (type $FUNCSIG$vii) (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 7520 + i32.const 203 + 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 7520 + i32.const 205 + 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 $3 + i32.const 3 + i32.and + local.get $2 + 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 7520 + i32.const 226 + 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 (result i32) + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $3 + i32.store + local.get $2 + else + local.get $1 + end + local.set $1 + 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 7520 + i32.const 241 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 7520 + i32.const 242 + 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 7520 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const 1 + local.get $4 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/tlsf/freeBlock (; 176 ;) (type $FUNCSIG$vii) (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 7520 + i32.const 530 + 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/tlsf/onFree + ) + (func $~lib/rt/pure/scanBlack (; 177 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -16507,9 +15521,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 197 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 178 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -16526,7 +15540,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -16539,11 +15553,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 198 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 179 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -16565,24 +15579,24 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__collect (; 199 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/__collect (; 180 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.tee $5 local.tee $2 local.set $3 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $0 loop $repeat|0 block $break|0 @@ -16610,7 +15624,7 @@ end if local.get $4 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray local.get $2 local.get $4 i32.store @@ -16648,7 +15662,7 @@ end end local.get $2 - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.set $0 loop $repeat|1 @@ -16659,7 +15673,7 @@ br_if $break|1 local.get $0 i32.load - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan local.get $0 i32.const 4 i32.add @@ -16684,7 +15698,7 @@ i32.and i32.store offset=4 local.get $1 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite local.get $0 i32.const 4 i32.add @@ -16693,9 +15707,9 @@ end end local.get $5 - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/common/__instanceof (; 200 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/__instanceof (; 181 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 16 i32.sub @@ -16703,7 +15717,7 @@ local.tee $0 if (result i32) local.get $0 - i32.const 7720 + i32.const 7696 i32.load i32.le_u else @@ -16721,7 +15735,7 @@ local.get $0 i32.const 3 i32.shl - i32.const 7720 + i32.const 7696 i32.add i32.load offset=4 local.tee $0 @@ -16730,9 +15744,1026 @@ end i32.const 0 ) - (func $~lib/rt/purerc/__visit (; 201 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__typeinfo (; 182 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 8040 + if (result i32) + local.get $0 + i32.const 7696 + i32.load + i32.gt_u + else + i32.const 1 + end + if + i32.const 240 + i32.const 7568 + i32.const 23 + i32.const 34 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 7696 + i32.add + i32.load + ) + (func $~lib/rt/tlsf/addMemory (; 183 ;) (type $FUNCSIG$viii) (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 7520 + i32.const 384 + 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 7520 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 7520 + i32.const 406 + 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/initializeRoot (; 184 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 8016 + i32.const 0 + i32.store + i32.const 9584 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 8016 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 8016 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 8016 + i32.const 9600 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 8016 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 185 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 7608 + i32.const 7520 + i32.const 446 + 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 (; 186 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 7520 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 187 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 188 ;) (type $FUNCSIG$viii) (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 7520 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 (; 189 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 7520 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 7520 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 190 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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/tlsf/reallocateBlock (; 191 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $2 + call $~lib/rt/tlsf/prepareSize + local.set $3 + local.get $1 + i32.load + local.tee $4 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 7520 + i32.const 491 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32.const -4 + i32.and + i32.le_u + if + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + local.get $2 + i32.store offset=12 + local.get $1 + return + end + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $6 + i32.load + local.tee $5 + i32.const 1 + i32.and + if + local.get $4 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $5 + local.get $3 + i32.ge_u + if + local.get $0 + local.get $6 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $4 + i32.const 3 + i32.and + local.get $5 + i32.or + i32.store + local.get $1 + local.get $2 + i32.store offset=12 + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + return + end + end + local.get $0 + local.get $2 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + local.get $1 + i32.load offset=4 + i32.store offset=4 + local.get $3 + local.get $1 + i32.load offset=8 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + local.get $4 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/tlsf/onFree + local.get $3 + ) + (func $~lib/rt/tlsf/__realloc (; 192 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 552 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + 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 7520 + i32.const 553 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + local.get $1 + call $~lib/rt/tlsf/reallocateBlock + i32.const 16 + i32.add + ) + (func $~lib/rt/tlsf/__free (; 193 ;) (type $FUNCSIG$vi) (param $0 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 560 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + 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 7520 + i32.const 561 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/increment (; 194 ;) (type $FUNCSIG$vi) (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 7664 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 7664 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 195 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 8016 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $0 + ) + (func $~lib/rt/pure/growRoots (; 196 ;) (type $FUNCSIG$v) + (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 $2 + i32.sub + local.tee $1 + 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 + local.get $2 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $1 + 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 (; 197 ;) (type $FUNCSIG$vi) (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 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 198 ;) (type $FUNCSIG$vi) (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/pure/onDecrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 7664 + i32.const 114 + 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 7664 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + 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/__retainRelease (; 199 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.const 8016 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $1 + i32.const 8016 + i32.gt_u + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + end + local.get $0 + ) + (func $~lib/rt/pure/__release (; 200 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 8016 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 201 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $0 + loop $continue|0 + local.get $2 + local.get $0 + i32.lt_u + if + local.get $2 + i32.load + local.tee $3 + if + local.get $3 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + ) + (func $~lib/rt/pure/__visit (; 202 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + local.get $0 + i32.const 8016 i32.lt_u if return @@ -16764,7 +16795,7 @@ br $case5|0 end local.get $0 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 end local.get $0 @@ -16775,7 +16806,7 @@ i32.le_u if i32.const 0 - i32.const 320 + i32.const 7664 i32.const 74 i32.const 17 call $~lib/builtins/abort @@ -16788,11 +16819,11 @@ i32.sub i32.store offset=4 local.get $0 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 end local.get $0 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 end local.get $0 @@ -16808,7 +16839,7 @@ i32.ne if i32.const 0 - i32.const 320 + i32.const 7664 i32.const 85 i32.const 6 call $~lib/builtins/abort @@ -16824,54 +16855,23 @@ i32.and if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 end local.get $0 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 end i32.const 0 - i32.const 320 + i32.const 7664 i32.const 96 i32.const 24 call $~lib/builtins/abort unreachable end ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 202 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - i32.load offset=4 - local.tee $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $0 - loop $continue|0 - local.get $2 - local.get $0 - i32.lt_u - if - local.get $2 - i32.load - local.tee $3 - if - local.get $3 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - ) - (func $~lib/builtins/__visit_members (; 203 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 203 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) block $block$16$break block $switch$1$case$41 block $switch$1$case$40 @@ -16940,7 +16940,7 @@ if local.get $0 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end ) (func $null (; 204 ;) (type $FUNCSIG$v) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 4c0441e0..8a5c6f0f 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -2,12 +2,10 @@ (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) - (type $FUNCSIG$v (func)) - (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) - (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$fiii (func (param i32 i32 i32) (result f32))) (type $FUNCSIG$fii (func (param i32 i32) (result f32))) (type $FUNCSIG$d (func (result f64))) @@ -18,6 +16,7 @@ (type $FUNCSIG$idd (func (param f64 f64) (result i32))) (type $FUNCSIG$dii (func (param i32 i32) (result f64))) (type $FUNCSIG$id (func (param f64) (result i32))) + (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iid (func (param i32 f64) (result i32))) (type $FUNCSIG$jii (func (param i32 i32) (result i64))) @@ -26,190 +25,190 @@ (type $FUNCSIG$ij (func (param i64) (result i32))) (type $FUNCSIG$viji (func (param i32 i64 i32))) (type $FUNCSIG$iiij (func (param i32 i32 i64) (result i32))) + (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) - (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) (import "Math" "random" (func $~lib/bindings/Math/random (result f64))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (memory $0 1) (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") - (data (i32.const 112) "\1e\00\00\00\01\00\00\00\10\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 160) "(\00\00\00\01\00\00\00\10\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 216) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 256) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c\00") - (data (i32.const 280) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05") - (data (i32.const 304) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 360) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05") - (data (i32.const 384) "$\00\00\00\01\00\00\00\10\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 440) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 488) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\00\00\00\00\00") - (data (i32.const 512) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\00\00") - (data (i32.const 536) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 560) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") - (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 704) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00") - (data (i32.const 784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00") - (data (i32.const 824) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y\00") - (data (i32.const 872) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 888) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") + (data (i32.const 112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 152) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c\00") + (data (i32.const 176) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05") + (data (i32.const 200) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05") + (data (i32.const 224) "$\00\00\00\01\00\00\00\10\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 280) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 328) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\00\00\00\00\00") + (data (i32.const 352) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\00\00") + (data (i32.const 376) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") + (data (i32.const 400) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02") + (data (i32.const 424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 464) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00") + (data (i32.const 624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00") + (data (i32.const 664) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y\00") + (data (i32.const 712) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") + (data (i32.const 728) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") + (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 864) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 904) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 944) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 944) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00") (data (i32.const 984) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1024) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 1024) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 1064) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1104) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00") + (data (i32.const 1104) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 1144) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 1184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 1224) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1264) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 1264) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 1304) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 1344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 1384) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 1424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 1464) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 1504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 1544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 1584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00") (data (i32.const 1624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") + (data (i32.const 1664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00") (data (i32.const 1704) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00") - (data (i32.const 1864) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1904) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 1944) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 1960) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2000) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2032) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 2056) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2096) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04\00\00\00") - (data (i32.const 2120) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05\00\00\00") - (data (i32.const 2152) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2192) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 2216) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2248) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2288) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2312) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00") - (data (i32.const 2344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2384) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2408) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 2440) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2480) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\04\00\00\00") - (data (i32.const 2504) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05\00\00\00") - (data (i32.const 2536) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2576) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 2600) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2632) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2672) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2688) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2728) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2768) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2864) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2880) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2920) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 2960) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 2976) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 3016) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 3056) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 3072) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00") - (data (i32.const 3112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") - (data (i32.const 3152) "\ac\00\00\00\01\00\00\00\10\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?\00") - (data (i32.const 3344) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f") - (data (i32.const 3392) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f") - (data (i32.const 3440) "@\00\00\00\01\00\00\00\0f\00\00\00@\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") - (data (i32.const 3520) "@\00\00\00\01\00\00\00\0f\00\00\00@\00\00\00\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f") - (data (i32.const 3600) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02\00\00\00") - (data (i32.const 3640) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 3680) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02\00\00\00") - (data (i32.const 3720) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff") - (data (i32.const 3760) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") - (data (i32.const 3776) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 3800) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01\00\00\00") - (data (i32.const 3824) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00") - (data (i32.const 3856) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 3888) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.\00") - (data (i32.const 3944) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") - (data (i32.const 3968) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") - (data (i32.const 3992) "^\00\00\00\01\00\00\00\10\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") - (data (i32.const 4104) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 4160) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a\00") - (data (i32.const 4184) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b\00") - (data (i32.const 4208) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b\00") - (data (i32.const 4232) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a\00") - (data (i32.const 4256) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00") - (data (i32.const 4272) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00P\10\00\00h\10\00\00P\10\00\00\80\10\00\00\98\10\00\00\b0\10\00\00\00\00\00\00") - (data (i32.const 4320) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\b0\10\00\00P\10\00\00P\10\00\00\80\10\00\00h\10\00\00\98\10\00\00\00\00\00\00") - (data (i32.const 4368) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 4416) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l\00") - (data (i32.const 4440) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\00") - (data (i32.const 4464) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e\00") - (data (i32.const 4488) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e\00") - (data (i32.const 4520) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,\00") - (data (i32.const 4544) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e\00") - (data (i32.const 4584) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") - (data (i32.const 4616) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000\00") - (data (i32.const 4640) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 5056) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\000\12\00\000\12\00\00\90\01\00\00d\00\00\00") - (data (i32.const 5088) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003\00") - (data (i32.const 5120) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 5152) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-\00") - (data (i32.const 5176) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") - (data (i32.const 5200) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_\00") - (data (i32.const 5224) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008\00") - (data (i32.const 5288) "0\00\00\00\01\00\00\00\0f\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f") - (data (i32.const 5352) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 \00") - (data (i32.const 5376) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000\00") - (data (i32.const 5400) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N\00") - (data (i32.const 5424) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 5464) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 5496) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\00*\00&\00$\00%\00^\00@\00#\00!\00?\00") + (data (i32.const 3184) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f") + (data (i32.const 3232) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f") + (data (i32.const 3280) "@\00\00\00\01\00\00\00\0f\00\00\00@\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f") + (data (i32.const 3360) "@\00\00\00\01\00\00\00\0f\00\00\00@\00\00\00\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f") + (data (i32.const 3440) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02\00\00\00") + (data (i32.const 3480) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02\00\00\00") + (data (i32.const 3520) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02\00\00\00") + (data (i32.const 3560) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff") + (data (i32.const 3600) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00") + (data (i32.const 3616) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") + (data (i32.const 3640) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01\00\00\00") + (data (i32.const 3664) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 3696) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 3728) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.\00") + (data (i32.const 3784) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00") + (data (i32.const 3808) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") + (data (i32.const 3832) "^\00\00\00\01\00\00\00\10\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") + (data (i32.const 3944) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a\00") + (data (i32.const 3968) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b\00") + (data (i32.const 3992) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b\00") + (data (i32.const 4016) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a\00") + (data (i32.const 4040) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00") + (data (i32.const 4056) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00x\0f\00\00\90\0f\00\00x\0f\00\00\a8\0f\00\00\c0\0f\00\00\d8\0f\00\00\00\00\00\00") + (data (i32.const 4104) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f\00\00\00\00\00\00") + (data (i32.const 4152) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 4200) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l\00") + (data (i32.const 4224) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\00") + (data (i32.const 4248) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e\00") + (data (i32.const 4272) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e\00") + (data (i32.const 4304) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,\00") + (data (i32.const 4328) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e\00") + (data (i32.const 4368) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff") + (data (i32.const 4400) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000\00") + (data (i32.const 4424) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data (i32.const 4840) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00X\11\00\00X\11\00\00\90\01\00\00d\00\00\00") + (data (i32.const 4872) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003\00") + (data (i32.const 4904) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 4936) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-\00") + (data (i32.const 4960) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80") + (data (i32.const 4984) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_\00") + (data (i32.const 5008) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008\00") + (data (i32.const 5072) "0\00\00\00\01\00\00\00\0f\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f") + (data (i32.const 5136) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 \00") + (data (i32.const 5160) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000\00") + (data (i32.const 5184) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N\00") + (data (i32.const 5208) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00") + (data (i32.const 5248) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") + (data (i32.const 5280) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (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)) @@ -219,10 +218,7 @@ (global $~lib/math/random_state1_64 (mut i64) (i64.const 0)) (global $~lib/math/random_state0_32 (mut i32) (i32.const 0)) (global $~lib/math/random_state1_32 (mut i32) (i32.const 0)) - (global $std/array/charset i32 (i32.const 3168)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) + (global $std/array/charset i32 (i32.const 3008)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MIN_VALUE i32 (i32.const -2147483648)) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) @@ -234,1362 +230,23 @@ (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 $~lib/builtins/RTTI_BASE i32 (i32.const 7720)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 8040)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 7696)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 8016)) (export "memory" (memory $0)) (export "main" (func $std/array/main)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) (export "__realloc" (func $~lib/rt/tlsf/__realloc)) (export "__free" (func $~lib/rt/tlsf/__free)) - (export "__retain" (func $~lib/rt/purerc/__retain)) - (export "__release" (func $~lib/rt/purerc/__release)) - (export "__collect" (func $~lib/rt/purerc/__collect)) - (export "__instanceof" (func $~lib/rt/common/__instanceof)) - (export "__typeinfo" (func $~lib/rt/common/__typeinfo)) - (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (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 128 - i32.const 275 - 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 128 - i32.const 277 - 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 128 - i32.const 290 - 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 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.1 - 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 - end - local.get $7 - i32.eqz - if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 - 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 (; 6 ;) (type $FUNCSIG$vii) (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 128 - i32.const 203 - 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 128 - i32.const 205 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 - i32.load - local.set $5 - end - end - local.get $2 - i32.const 2 - i32.and - if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 - i32.load - local.set $6 - local.get $6 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 226 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $6 - 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 $3 - call $~lib/rt/tlsf/removeBlock - local.get $3 - local.get $6 - i32.const 3 - i32.and - local.get $7 - i32.or - local.tee $2 - i32.store - local.get $3 - 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 128 - i32.const 241 - 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 128 - i32.const 242 - 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 128 - i32.const 258 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - 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 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $9 - i32.shl - i32.or - i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end - ) - (func $~lib/rt/tlsf/addMemory (; 7 ;) (type $FUNCSIG$iiii) (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 128 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 128 - i32.const 394 - 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 128 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 8 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 176 - i32.const 128 - i32.const 446 - 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 (; 10 ;) (type $FUNCSIG$iii) (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 128 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 12 ;) (type $FUNCSIG$viii) (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 128 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 128 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (; 15 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (export "__retain" (func $~lib/rt/pure/__retain)) + (export "__release" (func $~lib/rt/pure/__release)) + (export "__collect" (func $~lib/rt/pure/__collect)) + (export "__instanceof" (func $~lib/rt/__instanceof)) + (export "__typeinfo" (func $~lib/rt/__typeinfo)) + (func $~lib/arraybuffer/ArrayBufferView#constructor (; 5 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $1 @@ -1619,7 +276,7 @@ i32.const 12 i32.const 14 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -1637,7 +294,7 @@ local.get $3 local.get $4 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $3 @@ -1647,7 +304,7 @@ i32.store offset=8 local.get $0 ) - (func $~lib/array/Array#constructor (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 6 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 if (result i32) @@ -1656,7 +313,7 @@ i32.const 16 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain end local.get $1 i32.const 2 @@ -1671,10 +328,10 @@ i32.store offset=12 local.get $0 ) - (func $~lib/array/Array.isArray<~lib/array/Array | null> (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/array/Array | null> (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 1 if (result i32) @@ -1686,13 +343,13 @@ end local.set $1 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array.isArray<~lib/array/Array> (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/array/Array> (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 1 if (result i32) @@ -1704,25 +361,25 @@ end local.set $1 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $std/array/P#constructor (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/P#constructor (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 0 i32.const 18 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 ) - (func $~lib/array/Array.isArray (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 0 if (result i32) @@ -1734,10 +391,10 @@ end local.set $1 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/typedarray/Uint8Array#constructor (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/typedarray/Uint8Array#constructor (; 11 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 if (result i32) @@ -1746,7 +403,7 @@ i32.const 12 i32.const 19 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain end local.get $1 i32.const 0 @@ -1755,10 +412,10 @@ local.set $0 local.get $0 ) - (func $~lib/array/Array.isArray<~lib/typedarray/Uint8Array> (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/typedarray/Uint8Array> (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 0 if (result i32) @@ -1770,10 +427,10 @@ end local.set $1 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/array/Array.isArray (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 0 if (result i32) local.get $0 @@ -1783,10 +440,10 @@ i32.const 0 end ) - (func $~lib/array/Array.isArray<~lib/string/String> (; 24 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.isArray<~lib/string/String> (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 0 if (result i32) @@ -1798,71 +455,10 @@ end local.set $1 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/rt/purerc/increment (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 320 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 320 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/memory/memory.copy (; 27 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2068,7 +664,7 @@ end end ) - (func $~lib/rt/common/__allocArray (; 28 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/rt/__allocArray (; 16 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -2086,7 +682,7 @@ local.set $6 local.get $4 local.get $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $4 local.get $6 @@ -2106,7 +702,7 @@ end local.get $4 ) - (func $~lib/memory/memory.fill (; 29 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.fill (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2369,7 +965,7 @@ end end ) - (func $~lib/array/Array#fill (; 30 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/array/Array#fill (; 18 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -2444,13 +1040,13 @@ call $~lib/memory/memory.fill end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#get:length (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -2459,7 +1055,7 @@ i32.add i32.load8_u ) - (func $~lib/array/Array#__get (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -2467,8 +1063,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -2478,14 +1074,14 @@ local.get $1 call $~lib/array/Array#__unchecked_get ) - (func $std/array/isArraysEqual (; 34 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 22 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.eqz @@ -2501,9 +1097,9 @@ i32.const 0 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -2514,9 +1110,9 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -2541,9 +1137,9 @@ i32.const 0 local.set $4 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -2559,12 +1155,12 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#fill (; 35 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/array/Array#fill (; 23 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -2649,13 +1245,13 @@ unreachable end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#get:length (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 24 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -2664,7 +1260,7 @@ i32.add i32.load ) - (func $~lib/array/Array#__get (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 26 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -2672,8 +1268,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -2683,14 +1279,14 @@ local.get $1 call $~lib/array/Array#__unchecked_get ) - (func $std/array/isArraysEqual (; 39 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.eqz @@ -2706,9 +1302,9 @@ i32.const 0 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -2719,9 +1315,9 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -2746,9 +1342,9 @@ i32.const 0 local.set $4 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -2764,30 +1360,30 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#get:length (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 16 i32.sub i32.load offset=12 ) - (func $std/array/internalCapacity (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/internalCapacity (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $1 call $~lib/arraybuffer/ArrayBuffer#get:byteLength @@ -2795,187 +1391,12 @@ i32.shr_s local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/rt/tlsf/reallocateBlock (; 43 ;) (type $FUNCSIG$iiii) (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.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.set $4 - local.get $4 - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 491 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32) - 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 - end - local.set $6 - local.get $6 - i32.load - local.set $7 - local.get $7 - i32.const 1 - i32.and - if - local.get $4 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.add - local.get $7 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $5 - local.get $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 - i32.load offset=4 - i32.store offset=4 - local.get $8 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $8 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $1 - call $~lib/rt/tlsf/onFree - local.get $8 - ) - (func $~lib/rt/tlsf/__realloc (; 44 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 552 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 128 - i32.const 553 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/array/ensureSize (; 45 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/ensureSize (; 31 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2996,7 +1417,7 @@ i32.gt_u if i32.const 24 - i32.const 456 + i32.const 296 i32.const 14 i32.const 47 call $~lib/builtins/abort @@ -3027,7 +1448,7 @@ if local.get $0 local.get $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $0 local.get $6 @@ -3038,7 +1459,7 @@ i32.store offset=8 end ) - (func $~lib/array/Array#push (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#push (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -3065,7 +1486,7 @@ i32.store offset=12 local.get $3 ) - (func $~lib/array/Array#__unchecked_get (; 47 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -3074,7 +1495,7 @@ i32.add i32.load ) - (func $~lib/array/Array#__get (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -3082,8 +1503,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -3093,7 +1514,7 @@ local.get $1 call $~lib/array/Array#__unchecked_get ) - (func $~lib/array/Array#pop (; 49 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#pop (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -3103,8 +1524,8 @@ i32.const 1 i32.lt_s if - i32.const 840 - i32.const 456 + i32.const 680 + i32.const 296 i32.const 250 i32.const 20 call $~lib/builtins/abort @@ -3126,7 +1547,7 @@ i32.store offset=12 local.get $2 ) - (func $~lib/array/Array#concat (; 50 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#concat (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3135,7 +1556,7 @@ (local $7 i32) (local $8 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -3157,10 +1578,10 @@ i32.gt_u if local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release block i32.const 24 - i32.const 456 + i32.const 296 i32.const 197 i32.const 59 call $~lib/builtins/abort @@ -3173,8 +1594,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $5 local.get $5 i32.load offset=4 @@ -3200,10 +1621,10 @@ local.get $5 local.set $8 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 ) - (func $~lib/array/Array#copyWithin (; 51 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/array/Array#copyWithin (; 37 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -3389,16 +1810,16 @@ call $~lib/memory/memory.copy end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $std/array/isArraysEqual (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.eqz @@ -3414,9 +1835,9 @@ i32.const 0 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -3427,9 +1848,9 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -3454,9 +1875,9 @@ i32.const 0 local.set $4 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -3472,12 +1893,12 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#unshift (; 53 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#unshift (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -3510,7 +1931,7 @@ i32.store offset=12 local.get $2 ) - (func $~lib/array/Array#shift (; 54 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#shift (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3522,8 +1943,8 @@ i32.const 1 i32.lt_s if - i32.const 840 - i32.const 456 + i32.const 680 + i32.const 296 i32.const 311 i32.const 20 call $~lib/builtins/abort @@ -3559,7 +1980,7 @@ i32.store offset=12 local.get $3 ) - (func $~lib/array/Array#reverse (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#reverse (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3611,9 +2032,9 @@ end end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#indexOf (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#indexOf (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3682,7 +2103,7 @@ end i32.const -1 ) - (func $~lib/array/Array#includes (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#includes (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 local.get $1 local.get $2 @@ -3690,7 +2111,7 @@ i32.const 0 i32.ge_s ) - (func $~lib/array/Array#splice (; 58 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#splice (; 44 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3749,8 +2170,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $6 local.get $6 i32.load offset=4 @@ -3798,7 +2219,7 @@ i32.store offset=12 local.get $6 ) - (func $~lib/array/Array#__unchecked_set (; 59 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__unchecked_set (; 45 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 local.get $1 @@ -3808,7 +2229,7 @@ local.get $2 i32.store ) - (func $~lib/array/Array#__set (; 60 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 46 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $0 i32.load offset=12 @@ -3834,20 +2255,20 @@ i32.store offset=12 end ) - (func $start:std/array~anonymous|0 (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|0 (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 0 i32.eq local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#findIndex (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#findIndex (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3904,36 +2325,36 @@ end i32.const -1 ) - (func $start:std/array~anonymous|1 (; 63 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|1 (; 49 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 1 i32.eq local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|2 (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|2 (; 50 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 100 i32.eq local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|3 (; 65 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|3 (; 51 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -3944,26 +2365,26 @@ i32.eq local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|4 (; 66 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|4 (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 100 i32.eq local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|5 (; 67 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|5 (; 53 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -3973,23 +2394,23 @@ i32.eq local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|6 (; 68 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|6 (; 54 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 0 i32.ge_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#every (; 69 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#every (; 55 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4049,23 +2470,23 @@ end i32.const 1 ) - (func $start:std/array~anonymous|7 (; 70 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|7 (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 0 i32.le_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|8 (; 71 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|8 (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -4076,26 +2497,26 @@ i32.lt_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|9 (; 72 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|9 (; 58 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 10 i32.lt_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|10 (; 73 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|10 (; 59 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -4105,23 +2526,23 @@ i32.lt_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|11 (; 74 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|11 (; 60 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 3 i32.ge_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#some (; 75 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#some (; 61 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4178,23 +2599,23 @@ end i32.const 0 ) - (func $start:std/array~anonymous|12 (; 76 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|12 (; 62 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const -1 i32.le_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|13 (; 77 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|13 (; 63 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -4205,26 +2626,26 @@ i32.gt_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|14 (; 78 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|14 (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 10 i32.gt_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|15 (; 79 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|15 (; 65 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -4234,21 +2655,21 @@ i32.gt_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|16 (; 80 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|16 (; 66 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop global.get $std/array/i local.get $0 i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/array/Array#forEach (; 81 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#forEach (; 67 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4298,9 +2719,9 @@ unreachable end ) - (func $start:std/array~anonymous|17 (; 82 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|17 (; 68 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -4311,22 +2732,22 @@ i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|18 (; 83 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|18 (; 69 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop global.get $std/array/i local.get $0 i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|19 (; 84 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|19 (; 70 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -4336,12 +2757,12 @@ i32.add global.set $std/array/i local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|20 (; 85 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $start:std/array~anonymous|20 (; 71 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 i32.const 0 @@ -4448,7 +2869,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 570 i32.const 6 call $~lib/builtins/abort @@ -4456,21 +2877,21 @@ end end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|21 (; 86 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) + (func $start:std/array~anonymous|21 (; 72 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32) (local $3 f32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 f32.convert_i32_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#map (; 87 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#map (; 73 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4485,8 +2906,8 @@ i32.const 2 i32.const 22 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $3 local.get $3 i32.load offset=4 @@ -4542,11 +2963,11 @@ end local.get $3 ) - (func $~lib/array/Array#get:length (; 88 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 89 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__unchecked_get (; 75 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32) local.get $0 i32.load offset=4 local.get $1 @@ -4555,7 +2976,7 @@ i32.add f32.load ) - (func $~lib/array/Array#__get (; 90 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32) + (func $~lib/array/Array#__get (; 76 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32) local.get $1 local.get $0 i32.load offset=8 @@ -4563,8 +2984,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -4574,10 +2995,10 @@ local.get $1 call $~lib/array/Array#__unchecked_get ) - (func $start:std/array~anonymous|22 (; 91 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|22 (; 77 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -4590,10 +3011,10 @@ local.get $0 local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#map (; 92 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#map (; 78 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4607,8 +3028,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $3 local.get $3 i32.load offset=4 @@ -4664,10 +3085,10 @@ end local.get $3 ) - (func $start:std/array~anonymous|23 (; 93 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|23 (; 79 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop global.get $std/array/i local.get $0 @@ -4676,13 +3097,13 @@ local.get $0 local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|24 (; 94 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|24 (; 80 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -4694,23 +3115,23 @@ local.get $0 local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|25 (; 95 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|25 (; 81 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 2 i32.ge_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#filter (; 96 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#filter (; 82 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4720,8 +3141,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $2 block $break|0 block @@ -4779,10 +3200,10 @@ end local.get $2 ) - (func $start:std/array~anonymous|26 (; 97 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|26 (; 83 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 100 @@ -4797,13 +3218,13 @@ i32.ge_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|27 (; 98 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|27 (; 84 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop global.get $std/array/i local.get $0 @@ -4814,13 +3235,13 @@ i32.ge_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|28 (; 99 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start:std/array~anonymous|28 (; 85 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 call $~lib/array/Array#pop @@ -4834,23 +3255,23 @@ i32.ge_s local.set $3 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $start:std/array~anonymous|29 (; 100 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|29 (; 86 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $~lib/array/Array#reduce (; 101 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduce (; 87 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4908,23 +3329,23 @@ end local.get $3 ) - (func $start:std/array~anonymous|30 (; 102 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|30 (; 88 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|31 (; 103 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|31 (; 89 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 if (result i32) @@ -4936,10 +3357,10 @@ end local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $~lib/array/Array#reduce (; 104 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduce (; 90 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4997,10 +3418,10 @@ end local.get $3 ) - (func $start:std/array~anonymous|32 (; 105 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|32 (; 91 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 if (result i32) @@ -5012,13 +3433,13 @@ end local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|33 (; 106 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|33 (; 92 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 i32.const 1 @@ -5029,26 +3450,26 @@ i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|34 (; 107 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|34 (; 93 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|35 (; 108 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|35 (; 94 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 call $~lib/array/Array#pop @@ -5058,23 +3479,23 @@ i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|36 (; 109 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|36 (; 95 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $~lib/array/Array#reduceRight (; 110 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduceRight (; 96 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $2 @@ -5119,23 +3540,23 @@ end local.get $3 ) - (func $start:std/array~anonymous|37 (; 111 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|37 (; 97 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|38 (; 112 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|38 (; 98 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 if (result i32) @@ -5147,10 +3568,10 @@ end local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $~lib/array/Array#reduceRight (; 113 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduceRight (; 99 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $2 @@ -5195,10 +3616,10 @@ end local.get $3 ) - (func $start:std/array~anonymous|39 (; 114 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|39 (; 100 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 if (result i32) @@ -5210,13 +3631,13 @@ end local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|40 (; 115 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|40 (; 101 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 i32.const 1 @@ -5227,26 +3648,26 @@ i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|41 (; 116 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|41 (; 102 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $start:std/array~anonymous|42 (; 117 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start:std/array~anonymous|42 (; 103 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $3 call $~lib/array/Array#pop @@ -5256,10 +3677,10 @@ i32.add local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $~lib/math/murmurHash3 (; 118 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64) + (func $~lib/math/murmurHash3 (; 104 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64) local.get $0 local.get $0 i64.const 33 @@ -5288,7 +3709,7 @@ local.set $0 local.get $0 ) - (func $~lib/math/splitMix32 (; 119 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/math/splitMix32 (; 105 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 1831565813 i32.add @@ -5323,12 +3744,12 @@ i32.shr_u i32.xor ) - (func $~lib/math/NativeMath.seedRandom (; 120 ;) (type $FUNCSIG$vj) (param $0 i64) + (func $~lib/math/NativeMath.seedRandom (; 106 ;) (type $FUNCSIG$vj) (param $0 i64) local.get $0 i64.eqz if i32.const 0 - i32.const 3128 + i32.const 2968 i32.const 1021 i32.const 4 call $~lib/builtins/abort @@ -5352,7 +3773,7 @@ call $~lib/math/splitMix32 global.set $~lib/math/random_state1_32 ) - (func $~lib/util/sort/insertionSort (; 121 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 107 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f32) (local $5 i32) @@ -5444,73 +3865,7 @@ unreachable end ) - (func $~lib/rt/tlsf/freeBlock (; 122 ;) (type $FUNCSIG$vii) (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 128 - i32.const 530 - 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/tlsf/onFree - ) - (func $~lib/rt/tlsf/__free (; 123 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 560 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 128 - i32.const 561 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/util/sort/weakHeapSort (; 124 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/weakHeapSort (; 108 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -5805,7 +4160,7 @@ local.get $10 f32.store ) - (func $~lib/array/Array#sort (; 125 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort (; 109 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 f32) @@ -5821,7 +4176,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -5856,7 +4211,7 @@ f32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end block $~lib/util/sort/SORT|inlined.0 @@ -5882,9 +4237,9 @@ end end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 126 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 110 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -5917,7 +4272,7 @@ i32.lt_s i32.sub ) - (func $~lib/array/Array#sort|trampoline (; 127 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort|trampoline (; 111 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -5936,19 +4291,19 @@ local.get $1 call $~lib/array/Array#sort ) - (func $~lib/builtins/isNaN (; 128 ;) (type $FUNCSIG$if) (param $0 f32) (result i32) + (func $~lib/builtins/isNaN (; 112 ;) (type $FUNCSIG$if) (param $0 f32) (result i32) local.get $0 local.get $0 f32.ne ) - (func $std/array/isArraysEqual (; 129 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 113 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.eqz @@ -5964,9 +4319,9 @@ i32.const 0 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -5977,9 +4332,9 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -6017,9 +4372,9 @@ i32.const 0 local.set $4 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -6036,12 +4391,12 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/util/sort/insertionSort (; 130 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 114 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f64) (local $5 i32) @@ -6133,7 +4488,7 @@ unreachable end ) - (func $~lib/util/sort/weakHeapSort (; 131 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/weakHeapSort (; 115 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6428,7 +4783,7 @@ local.get $10 f64.store ) - (func $~lib/array/Array#sort (; 132 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort (; 116 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 f64) @@ -6444,7 +4799,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -6479,7 +4834,7 @@ f64.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end block $~lib/util/sort/SORT|inlined.0 @@ -6505,9 +4860,9 @@ end end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 133 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 117 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) (local $2 i64) (local $3 i64) local.get $0 @@ -6540,7 +4895,7 @@ i64.lt_s i32.sub ) - (func $~lib/array/Array#sort|trampoline (; 134 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort|trampoline (; 118 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -6559,11 +4914,11 @@ local.get $1 call $~lib/array/Array#sort ) - (func $~lib/array/Array#get:length (; 135 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 119 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array#__unchecked_get (; 136 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__unchecked_get (; 120 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) local.get $0 i32.load offset=4 local.get $1 @@ -6572,7 +4927,7 @@ i32.add f64.load ) - (func $~lib/array/Array#__get (; 137 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/array/Array#__get (; 121 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) local.get $1 local.get $0 i32.load offset=8 @@ -6580,8 +4935,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -6591,19 +4946,19 @@ local.get $1 call $~lib/array/Array#__unchecked_get ) - (func $~lib/builtins/isNaN (; 138 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/builtins/isNaN (; 122 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) local.get $0 local.get $0 f64.ne ) - (func $std/array/isArraysEqual (; 139 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual (; 123 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.eqz @@ -6619,9 +4974,9 @@ i32.const 0 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -6632,9 +4987,9 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -6672,9 +5027,9 @@ i32.const 0 local.set $4 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -6691,12 +5046,12 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/util/sort/insertionSort (; 140 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 124 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6788,7 +5143,7 @@ unreachable end ) - (func $~lib/util/sort/weakHeapSort (; 141 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/weakHeapSort (; 125 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -7083,7 +5438,7 @@ local.get $10 i32.store ) - (func $~lib/array/Array#sort (; 142 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort (; 126 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7097,7 +5452,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -7132,7 +5487,7 @@ i32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end block $~lib/util/sort/SORT|inlined.0 @@ -7158,14 +5513,14 @@ end end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 143 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 127 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.sub ) - (func $~lib/array/Array#sort|trampoline (; 144 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort|trampoline (; 128 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -7184,7 +5539,7 @@ local.get $1 call $~lib/array/Array#sort ) - (func $~lib/util/sort/insertionSort (; 145 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort (; 129 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -7276,7 +5631,7 @@ unreachable end ) - (func $~lib/util/sort/weakHeapSort (; 146 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/weakHeapSort (; 130 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -7571,7 +5926,7 @@ local.get $10 i32.store ) - (func $~lib/array/Array#sort (; 147 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort (; 131 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7585,7 +5940,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -7620,7 +5975,7 @@ i32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end block $~lib/util/sort/SORT|inlined.0 @@ -7646,9 +6001,9 @@ end end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 148 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 132 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.gt_u @@ -7657,7 +6012,7 @@ i32.lt_u i32.sub ) - (func $~lib/array/Array#sort|trampoline (; 149 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#sort|trampoline (; 133 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -7676,14 +6031,14 @@ local.get $1 call $~lib/array/Array#sort ) - (func $~lib/array/Array.create (; 150 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.create (; 134 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 268435452 i32.gt_u if i32.const 24 - i32.const 456 + i32.const 296 i32.const 45 i32.const 61 call $~lib/builtins/abort @@ -7693,8 +6048,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.const 0 @@ -7707,7 +6062,7 @@ call $~lib/memory/memory.fill local.get $1 ) - (func $std/array/createReverseOrderedArray (; 151 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createReverseOrderedArray (; 135 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -7741,15 +6096,15 @@ end local.get $1 ) - (func $~lib/math/NativeMath.random (; 152 ;) (type $FUNCSIG$d) (result f64) + (func $~lib/math/NativeMath.random (; 136 ;) (type $FUNCSIG$d) (result f64) (local $0 i64) (local $1 i64) (local $2 i64) global.get $~lib/math/random_seeded i32.eqz if - i32.const 3904 - i32.const 3128 + i32.const 3744 + i32.const 2968 i32.const 1030 i32.const 24 call $~lib/builtins/abort @@ -7798,7 +6153,7 @@ f64.const 1 f64.sub ) - (func $std/array/createRandomOrderedArray (; 153 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createRandomOrderedArray (; 137 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -7832,17 +6187,17 @@ end local.get $1 ) - (func $~lib/util/sort/COMPARATOR~anonymous|1 (; 154 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|1 (; 138 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.sub ) - (func $std/array/isSorted (; 155 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted (; 139 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $break|0 block @@ -7878,7 +6233,7 @@ i32.const 0 local.set $4 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -7894,13 +6249,13 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $std/array/assertSorted (; 156 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted (; 140 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -7911,20 +6266,20 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 832 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/array/assertSortedDefault (; 157 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $std/array/assertSortedDefault (; 141 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 block $~lib/util/sort/COMPARATOR|inlined.1 (result i32) @@ -7933,36 +6288,36 @@ end call $std/array/assertSorted local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/array~anonymous|43 (; 158 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|43 (; 142 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.sub ) - (func $start:std/array~anonymous|44 (; 159 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|44 (; 143 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.sub ) - (func $start:std/array~anonymous|45 (; 160 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|45 (; 144 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.sub ) - (func $start:std/array~anonymous|46 (; 161 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|46 (; 145 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.sub ) - (func $~lib/array/Array.create<~lib/array/Array> (; 162 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.create<~lib/array/Array> (; 146 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 268435452 i32.gt_u if i32.const 24 - i32.const 456 + i32.const 296 i32.const 45 i32.const 61 call $~lib/builtins/abort @@ -7972,8 +6327,8 @@ i32.const 2 i32.const 24 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.const 0 @@ -7986,237 +6341,10 @@ call $~lib/memory/memory.fill local.get $1 ) - (func $~lib/rt/common/__typeinfo (; 163 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 - local.get $0 - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - i32.load - i32.gt_u - end - if - i32.const 400 - i32.const 4120 - i32.const 55 - i32.const 34 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/purerc/growRoots (; 164 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/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 - local.get $0 - local.get $1 - call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 - local.get $1 - i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 - i32.add - global.set $~lib/rt/purerc/END - ) - (func $~lib/rt/purerc/appendRoot (; 165 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END - i32.ge_u - if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 1 - i32.add - global.set $~lib/rt/purerc/CUR - ) - (func $~lib/rt/purerc/decrement (; 166 ;) (type $FUNCSIG$vi) (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/purerc/onDecrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 320 - i32.const 114 - 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/builtins/__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 320 - i32.const 123 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/common/__typeinfo - i32.const 8 - 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/purerc/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/purerc/__retainRelease (; 167 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - local.get $1 - i32.ne - if - global.get $~lib/builtins/HEAP_BASE - local.set $2 - local.get $0 - local.get $2 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $1 - local.get $2 - i32.gt_u - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - end - local.get $0 - ) - (func $~lib/array/Array<~lib/array/Array>#__unchecked_set (; 168 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array<~lib/array/Array>#__unchecked_set (; 147 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=4 @@ -8229,15 +6357,15 @@ local.get $2 local.get $3 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/array/Array<~lib/array/Array>#__set (; 169 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array<~lib/array/Array>#__set (; 148 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -8247,10 +6375,10 @@ i32.gt_u if local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release block - i32.const 4008 - i32.const 456 + i32.const 3848 + i32.const 296 i32.const 112 i32.const 38 call $~lib/builtins/abort @@ -8280,9 +6408,9 @@ i32.store offset=12 end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/array/createReverseOrderedNestedArray (; 170 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createReverseOrderedNestedArray (; 149 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -8314,7 +6442,7 @@ local.get $3 call $~lib/array/Array<~lib/array/Array>#__set local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -8326,13 +6454,13 @@ end local.get $1 ) - (func $start:std/array~anonymous|47 (; 171 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|47 (; 150 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 0 @@ -8343,12 +6471,12 @@ i32.sub local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/util/sort/insertionSort<~lib/array/Array> (; 172 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort<~lib/array/Array> (; 151 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -8369,7 +6497,7 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $3 i32.const 1 @@ -8387,7 +6515,7 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 block (result i32) i32.const 2 @@ -8418,11 +6546,11 @@ i32.store else local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $break|1 end local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $continue|1 end end @@ -8437,7 +6565,7 @@ local.get $4 i32.store local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add @@ -8448,7 +6576,7 @@ unreachable end ) - (func $~lib/array/Array<~lib/array/Array>#sort (; 173 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#sort (; 152 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8462,7 +6590,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -8474,11 +6602,11 @@ if local.get $3 i32.load offset=4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $3 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 block (result i32) i32.const 2 @@ -8499,12 +6627,12 @@ i32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end @@ -8521,13 +6649,13 @@ call $~lib/util/sort/insertionSort<~lib/array/Array> end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/array/Array>#get:length (; 174 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#get:length (; 153 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array<~lib/array/Array>#__unchecked_get (; 175 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#__unchecked_get (; 154 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -8535,16 +6663,16 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/array/Array>#__get (; 176 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#__get (; 155 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if - i32.const 4008 - i32.const 456 + i32.const 3848 + i32.const 296 i32.const 97 i32.const 45 call $~lib/builtins/abort @@ -8557,8 +6685,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -8568,14 +6696,14 @@ local.get $1 call $~lib/array/Array<~lib/array/Array>#__unchecked_get ) - (func $std/array/isSorted<~lib/array/Array> (; 177 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted<~lib/array/Array> (; 156 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $break|0 block @@ -8613,18 +6741,18 @@ i32.const 0 local.set $6 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -8637,13 +6765,13 @@ i32.const 1 local.set $5 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 ) - (func $std/array/assertSorted<~lib/array/Array> (; 178 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/array/Array> (; 157 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -8654,25 +6782,25 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 832 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/array/Array.create> (; 179 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.create> (; 158 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 268435452 i32.gt_u if i32.const 24 - i32.const 456 + i32.const 296 i32.const 45 i32.const 61 call $~lib/builtins/abort @@ -8682,8 +6810,8 @@ i32.const 2 i32.const 26 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.const 0 @@ -8696,14 +6824,14 @@ call $~lib/memory/memory.fill local.get $1 ) - (func $std/array/Proxy#constructor (; 180 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/Proxy#constructor (; 159 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.eqz if i32.const 4 i32.const 25 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -8711,10 +6839,10 @@ i32.store local.get $0 ) - (func $~lib/array/Array>#__unchecked_set (; 181 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array>#__unchecked_set (; 160 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=4 @@ -8727,15 +6855,15 @@ local.get $2 local.get $3 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/array/Array>#__set (; 182 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array>#__set (; 161 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -8745,10 +6873,10 @@ i32.gt_u if local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release block - i32.const 4008 - i32.const 456 + i32.const 3848 + i32.const 296 i32.const 112 i32.const 38 call $~lib/builtins/abort @@ -8778,9 +6906,9 @@ i32.store offset=12 end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/array/createReverseOrderedElementsArray (; 183 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createReverseOrderedElementsArray (; 162 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -8808,7 +6936,7 @@ local.tee $3 call $~lib/array/Array>#__set local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -8820,13 +6948,13 @@ end local.get $1 ) - (func $start:std/array~anonymous|48 (; 184 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|48 (; 163 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load @@ -8835,12 +6963,12 @@ i32.sub local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/util/sort/insertionSort> (; 185 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort> (; 164 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -8861,7 +6989,7 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $3 i32.const 1 @@ -8879,7 +7007,7 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 block (result i32) i32.const 2 @@ -8910,11 +7038,11 @@ i32.store else local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $break|1 end local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $continue|1 end end @@ -8929,7 +7057,7 @@ local.get $4 i32.store local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add @@ -8940,7 +7068,7 @@ unreachable end ) - (func $~lib/array/Array>#sort (; 186 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>#sort (; 165 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8954,7 +7082,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -8966,11 +7094,11 @@ if local.get $3 i32.load offset=4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $3 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 block (result i32) i32.const 2 @@ -8991,12 +7119,12 @@ i32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end @@ -9013,13 +7141,13 @@ call $~lib/util/sort/insertionSort> end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array>#get:length (; 187 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array>#get:length (; 166 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array>#__unchecked_get (; 188 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>#__unchecked_get (; 167 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -9027,16 +7155,16 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array>#__get (; 189 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>#__get (; 168 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if - i32.const 4008 - i32.const 456 + i32.const 3848 + i32.const 296 i32.const 97 i32.const 45 call $~lib/builtins/abort @@ -9049,8 +7177,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -9060,14 +7188,14 @@ local.get $1 call $~lib/array/Array>#__unchecked_get ) - (func $std/array/isSorted> (; 190 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted> (; 169 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $break|0 block @@ -9105,18 +7233,18 @@ i32.const 0 local.set $6 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -9129,13 +7257,13 @@ i32.const 1 local.set $5 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 ) - (func $std/array/assertSorted> (; 191 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted> (; 170 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -9146,18 +7274,18 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 832 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/util/sort/insertionSort<~lib/string/String | null> (; 192 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort<~lib/string/String | null> (; 171 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -9178,7 +7306,7 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $3 i32.const 1 @@ -9196,7 +7324,7 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 block (result i32) i32.const 2 @@ -9227,11 +7355,11 @@ i32.store else local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $break|1 end local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $continue|1 end end @@ -9246,7 +7374,7 @@ local.get $4 i32.store local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add @@ -9257,7 +7385,7 @@ unreachable end ) - (func $~lib/array/Array<~lib/string/String | null>#sort (; 193 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#sort (; 172 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -9271,7 +7399,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -9283,11 +7411,11 @@ if local.get $3 i32.load offset=4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $3 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 block (result i32) i32.const 2 @@ -9308,12 +7436,12 @@ i32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end @@ -9330,13 +7458,13 @@ call $~lib/util/sort/insertionSort<~lib/string/String | null> end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/string/String | null>#get:length (; 194 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#get:length (; 173 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array<~lib/string/String | null>#__unchecked_get (; 195 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#__unchecked_get (; 174 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -9344,9 +7472,9 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/string/String | null>#__get (; 196 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#__get (; 175 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=8 @@ -9354,8 +7482,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -9365,14 +7493,14 @@ local.get $1 call $~lib/array/Array<~lib/string/String | null>#__unchecked_get ) - (func $std/array/isSorted<~lib/string/String | null> (; 197 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted<~lib/string/String | null> (; 176 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $break|0 block @@ -9410,18 +7538,18 @@ i32.const 0 local.set $6 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -9434,13 +7562,13 @@ i32.const 1 local.set $5 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 ) - (func $std/array/assertSorted<~lib/string/String | null> (; 198 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/string/String | null> (; 177 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -9451,18 +7579,18 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 832 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/string/String#get:length (; 199 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/string/String#get:length (; 178 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 16 i32.sub @@ -9470,16 +7598,16 @@ i32.const 1 i32.shr_u ) - (func $~lib/util/string/compareImpl (; 200 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (func $~lib/util/string/compareImpl (; 179 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (local $6 i32) (local $7 i32) (local $8 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 0 local.set $5 @@ -9529,21 +7657,21 @@ local.get $5 local.set $8 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 ) - (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 201 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 180 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -9566,9 +7694,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -9590,9 +7718,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -9602,9 +7730,9 @@ i32.const -1 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -9614,9 +7742,9 @@ i32.const 1 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -9635,12 +7763,12 @@ call $~lib/util/string/compareImpl local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $std/array/assertSorted<~lib/string/String | null>|trampoline (; 202 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/string/String | null>|trampoline (; 181 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) block $1of1 block $0of1 block $outOfRange @@ -9661,14 +7789,14 @@ local.get $1 call $std/array/assertSorted<~lib/string/String | null> ) - (func $~lib/string/String.__eq (; 203 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__eq (; 182 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -9677,9 +7805,9 @@ i32.const 1 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -9697,9 +7825,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -9714,9 +7842,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -9729,18 +7857,18 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__ne (; 204 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__ne (; 183 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -9748,21 +7876,21 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $std/array/isArraysEqual<~lib/string/String | null> (; 205 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $std/array/isArraysEqual<~lib/string/String | null> (; 184 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.eqz @@ -9778,9 +7906,9 @@ i32.const 0 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -9791,9 +7919,9 @@ i32.const 1 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -9820,20 +7948,20 @@ i32.const 0 local.set $6 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add @@ -9846,19 +7974,19 @@ i32.const 1 local.set $5 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 ) - (func $~lib/array/Array.create<~lib/string/String> (; 206 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array.create<~lib/string/String> (; 185 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 268435452 i32.gt_u if i32.const 24 - i32.const 456 + i32.const 296 i32.const 45 i32.const 61 call $~lib/builtins/abort @@ -9868,8 +7996,8 @@ i32.const 2 i32.const 28 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.const 0 @@ -9882,7 +8010,7 @@ call $~lib/memory/memory.fill local.get $1 ) - (func $~lib/string/String#charAt (; 207 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#charAt (; 186 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 i32.const 0 @@ -9890,7 +8018,7 @@ i32.eqz if i32.const 0 - i32.const 4384 + i32.const 4168 i32.const 40 i32.const 4 call $~lib/builtins/abort @@ -9901,8 +8029,8 @@ call $~lib/string/String#get:length i32.ge_u if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain return end i32.const 2 @@ -9918,24 +8046,24 @@ i32.load16_u i32.store16 local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/string/String#concat (; 208 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#concat (; 187 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 i32.const 0 i32.eq if - i32.const 4432 + i32.const 4216 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 end local.get $0 @@ -9956,18 +8084,18 @@ i32.const 0 i32.eq if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $5 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end local.get $4 i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 local.get $6 local.get $0 @@ -9982,19 +8110,19 @@ local.get $6 local.set $5 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 ) - (func $~lib/string/String.__concat (; 209 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__concat (; 188 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 - i32.const 4432 + i32.const 4216 local.get $0 i32.const 0 i32.ne @@ -10003,19 +8131,19 @@ call $~lib/string/String#concat local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $std/array/createRandomString (; 210 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createRandomString (; 189 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 f64) (local $4 i32) (local $5 i32) - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $1 block $break|0 i32.const 0 @@ -10044,12 +8172,12 @@ call $~lib/string/String.__concat local.tee $5 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -10061,10 +8189,10 @@ end local.get $1 ) - (func $~lib/array/Array<~lib/string/String>#__unchecked_set (; 211 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array<~lib/string/String>#__unchecked_set (; 190 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=4 @@ -10077,15 +8205,15 @@ local.get $2 local.get $3 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/array/Array<~lib/string/String>#__set (; 212 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array<~lib/string/String>#__set (; 191 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -10095,10 +8223,10 @@ i32.gt_u if local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release block - i32.const 4008 - i32.const 456 + i32.const 3848 + i32.const 296 i32.const 112 i32.const 38 call $~lib/builtins/abort @@ -10128,9 +8256,9 @@ i32.store offset=12 end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/array/createRandomStringArray (; 213 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createRandomStringArray (; 192 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -10156,7 +8284,7 @@ local.tee $3 call $~lib/array/Array<~lib/string/String>#__set local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -10168,7 +8296,7 @@ end local.get $1 ) - (func $~lib/util/sort/insertionSort<~lib/string/String> (; 214 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/sort/insertionSort<~lib/string/String> (; 193 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -10189,7 +8317,7 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $3 i32.const 1 @@ -10207,7 +8335,7 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 block (result i32) i32.const 2 @@ -10238,11 +8366,11 @@ i32.store else local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $break|1 end local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release br $continue|1 end end @@ -10257,7 +8385,7 @@ local.get $4 i32.store local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 i32.const 1 i32.add @@ -10268,7 +8396,7 @@ unreachable end ) - (func $~lib/array/Array<~lib/string/String>#sort (; 215 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#sort (; 194 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -10282,7 +8410,7 @@ i32.le_s if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $0 @@ -10294,11 +8422,11 @@ if local.get $3 i32.load offset=4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $3 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 block (result i32) i32.const 2 @@ -10319,12 +8447,12 @@ i32.store end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end @@ -10341,13 +8469,13 @@ call $~lib/util/sort/insertionSort<~lib/string/String> end local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/string/String>#get:length (; 216 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#get:length (; 195 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 217 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 196 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -10355,16 +8483,16 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/string/String>#__get (; 218 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__get (; 197 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if - i32.const 4008 - i32.const 456 + i32.const 3848 + i32.const 296 i32.const 97 i32.const 45 call $~lib/builtins/abort @@ -10377,8 +8505,8 @@ i32.shr_u i32.ge_u if - i32.const 400 - i32.const 456 + i32.const 240 + i32.const 296 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -10388,14 +8516,14 @@ local.get $1 call $~lib/array/Array<~lib/string/String>#__unchecked_get ) - (func $std/array/isSorted<~lib/string/String> (; 219 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isSorted<~lib/string/String> (; 198 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $break|0 block @@ -10433,18 +8561,18 @@ i32.const 0 local.set $6 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 return end local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 i32.const 1 i32.add @@ -10457,13 +8585,13 @@ i32.const 1 local.set $5 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 ) - (func $std/array/assertSorted<~lib/string/String> (; 220 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/string/String> (; 199 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -10474,27 +8602,27 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 832 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0 (; 221 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0 (; 200 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -10517,9 +8645,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -10541,9 +8669,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -10553,9 +8681,9 @@ i32.const -1 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -10565,9 +8693,9 @@ i32.const 1 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -10586,12 +8714,12 @@ call $~lib/util/string/compareImpl local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $std/array/assertSorted<~lib/string/String>|trampoline (; 222 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $std/array/assertSorted<~lib/string/String>|trampoline (; 201 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) block $1of1 block $0of1 block $outOfRange @@ -10612,7 +8740,7 @@ local.get $1 call $std/array/assertSorted<~lib/string/String> ) - (func $~lib/string/String#substring (; 223 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#substring (; 202 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -10627,7 +8755,7 @@ i32.eqz if i32.const 0 - i32.const 4384 + i32.const 4168 i32.const 196 i32.const 4 call $~lib/builtins/abort @@ -10697,8 +8825,8 @@ local.get $3 i32.eqz if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain return end local.get $8 @@ -10715,7 +8843,7 @@ end if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $3 @@ -10729,9 +8857,9 @@ local.get $3 call $~lib/memory/memory.copy local.get $10 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#join_bool (; 224 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_bool (; 203 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -10742,7 +8870,7 @@ (local $9 i32) (local $10 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -10753,11 +8881,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -10767,15 +8895,15 @@ local.get $2 i32.eqz if - i32.const 4480 - i32.const 4504 + i32.const 4264 + i32.const 4288 local.get $4 i32.load8_u select - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -10797,7 +8925,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -10827,8 +8955,8 @@ i32.const 1 i32.shl i32.add - i32.const 4480 - i32.const 4504 + i32.const 4264 + i32.const 4288 local.get $10 select local.get $6 @@ -10882,8 +9010,8 @@ i32.const 1 i32.shl i32.add - i32.const 4480 - i32.const 4504 + i32.const 4264 + i32.const 4288 local.get $10 select local.get $6 @@ -10904,33 +9032,33 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 225 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 204 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_bool local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/util/number/decimalCount32 (; 226 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/decimalCount32 (; 205 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 100000 @@ -10999,7 +9127,7 @@ unreachable unreachable ) - (func $~lib/util/number/utoa32_lut (; 227 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/number/utoa32_lut (; 206 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -11007,7 +9135,7 @@ (local $7 i32) (local $8 i64) (local $9 i64) - i32.const 5072 + i32.const 4856 i32.load offset=4 local.set $3 block $break|0 @@ -11140,7 +9268,7 @@ i32.store16 end ) - (func $~lib/util/number/itoa32 (; 228 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa32 (; 207 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -11150,8 +9278,8 @@ local.get $0 i32.eqz if - i32.const 4632 - call $~lib/rt/purerc/__retain + i32.const 4416 + call $~lib/rt/pure/__retain return end local.get $0 @@ -11195,14 +9323,14 @@ i32.store16 end local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa (; 229 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa (; 208 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/util/number/itoa32 return ) - (func $~lib/util/number/itoa_stream (; 230 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 209 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -11261,7 +9389,7 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 231 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 210 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11272,7 +9400,7 @@ (local $9 i32) (local $10 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -11283,11 +9411,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -11301,12 +9429,12 @@ i32.load call $~lib/util/number/itoa local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end @@ -11326,7 +9454,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -11403,33 +9531,33 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 232 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 211 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/util/number/utoa32 (; 233 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/utoa32 (; 212 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -11438,8 +9566,8 @@ local.get $0 i32.eqz if - i32.const 4632 - call $~lib/rt/purerc/__retain + i32.const 4416 + call $~lib/rt/pure/__retain return end local.get $0 @@ -11464,14 +9592,14 @@ call $~lib/util/number/utoa32_lut end local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa (; 234 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa (; 213 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/util/number/utoa32 return ) - (func $~lib/util/number/itoa_stream (; 235 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 214 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -11510,7 +9638,7 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 236 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 215 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -11521,7 +9649,7 @@ (local $9 i32) (local $10 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -11532,11 +9660,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -11550,12 +9678,12 @@ i32.load call $~lib/util/number/itoa local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end @@ -11575,7 +9703,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -11652,40 +9780,40 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 237 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 216 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/builtins/isFinite (; 238 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/builtins/isFinite (; 217 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) local.get $0 local.get $0 f64.sub f64.const 0 f64.eq ) - (func $~lib/array/Array#__unchecked_get (; 239 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__unchecked_get (; 218 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) local.get $0 i32.load offset=4 local.get $1 @@ -11694,7 +9822,7 @@ i32.add i64.load ) - (func $~lib/array/Array#__unchecked_get (; 240 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 219 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -11703,7 +9831,7 @@ i32.add i32.load16_s ) - (func $~lib/util/number/genDigits (; 241 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/util/number/genDigits (; 220 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) (local $7 i32) (local $8 i64) (local $9 i64) @@ -11758,7 +9886,7 @@ local.set $14 local.get $6 local.set $15 - i32.const 6536 + i32.const 6320 i32.load offset=4 local.set $16 block $break|0 @@ -12259,7 +10387,7 @@ end local.get $15 ) - (func $~lib/util/number/prettify (; 242 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/prettify (; 221 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -12589,7 +10717,7 @@ unreachable unreachable ) - (func $~lib/util/number/dtoa_core (; 243 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/util/number/dtoa_core (; 222 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 i32) (local $3 f64) (local $4 i32) @@ -12758,11 +10886,11 @@ i32.shl i32.sub global.set $~lib/util/number/_K - i32.const 6224 + i32.const 6008 local.get $13 call $~lib/array/Array#__unchecked_get global.set $~lib/util/number/_frc_pow - i32.const 6448 + i32.const 6232 local.get $13 call $~lib/array/Array#__unchecked_get global.set $~lib/util/number/_exp_pow @@ -13027,7 +11155,7 @@ local.get $2 i32.add ) - (func $~lib/util/number/dtoa (; 244 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/util/number/dtoa (; 223 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -13035,8 +11163,8 @@ f64.const 0 f64.eq if - i32.const 5392 - call $~lib/rt/purerc/__retain + i32.const 5176 + call $~lib/rt/pure/__retain return end local.get $0 @@ -13046,17 +11174,17 @@ local.get $0 call $~lib/builtins/isNaN if - i32.const 5416 - call $~lib/rt/purerc/__retain + i32.const 5200 + call $~lib/rt/pure/__retain return end - i32.const 5440 - i32.const 5480 + i32.const 5224 + i32.const 5264 local.get $0 f64.const 0 f64.lt select - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end i32.const 28 @@ -13074,7 +11202,7 @@ i32.eq if local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $1 @@ -13086,7 +11214,7 @@ call $~lib/rt/tlsf/__free local.get $3 ) - (func $~lib/util/number/dtoa_stream (; 245 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32) + (func $~lib/util/number/dtoa_stream (; 224 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32) (local $3 i32) (local $4 i32) local.get $0 @@ -13139,8 +11267,8 @@ i32.add local.set $4 local.get $0 - i32.const 5440 - i32.const 5480 + i32.const 5224 + i32.const 5264 local.get $3 select local.get $4 @@ -13157,7 +11285,7 @@ local.get $2 call $~lib/util/number/dtoa_core ) - (func $~lib/array/Array#join_flt (; 246 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_flt (; 225 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -13168,7 +11296,7 @@ (local $9 i32) (local $10 f64) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -13179,11 +11307,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -13197,12 +11325,12 @@ f64.load call $~lib/util/number/dtoa local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end @@ -13222,7 +11350,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -13299,33 +11427,33 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 247 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 226 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_flt local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array<~lib/string/String>#join_str (; 248 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#join_str (; 227 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -13336,7 +11464,7 @@ (local $9 i32) (local $10 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -13347,11 +11475,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -13363,10 +11491,10 @@ if local.get $4 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -13399,7 +11527,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 i32.const 0 @@ -13431,7 +11559,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $10 block $break|1 i32.const 0 @@ -13449,7 +11577,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 i32.const 0 @@ -13506,7 +11634,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 i32.const 0 @@ -13527,38 +11655,38 @@ local.get $10 local.set $8 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 ) - (func $~lib/array/Array<~lib/string/String>#join (; 249 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#join (; 228 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array<~lib/string/String>#join_str local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $std/array/Ref#constructor (; 250 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/Ref#constructor (; 229 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.eqz if i32.const 0 i32.const 32 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 ) - (func $~lib/array/Array#join_ref (; 251 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_ref (; 230 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -13568,7 +11696,7 @@ (local $8 i32) (local $9 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -13579,11 +11707,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -13593,11 +11721,11 @@ local.get $2 i32.eqz if - i32.const 6720 - call $~lib/rt/purerc/__retain + i32.const 6504 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -13617,7 +11745,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $7 i32.const 0 local.set $8 @@ -13639,7 +11767,7 @@ i32.add i32.load local.get $9 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $9 local.get $9 if @@ -13648,7 +11776,7 @@ i32.const 1 i32.shl i32.add - i32.const 6720 + i32.const 6504 i32.const 15 i32.const 1 i32.shl @@ -13696,7 +11824,7 @@ i32.const 1 i32.shl i32.add - i32.const 6720 + i32.const 6504 i32.const 15 i32.const 1 i32.shl @@ -13716,42 +11844,42 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $7 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 252 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 231 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_ref local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array#toString (; 253 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#toString (; 232 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join ) - (func $~lib/util/number/itoa (; 254 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa (; 233 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 24 i32.shl @@ -13760,7 +11888,7 @@ call $~lib/util/number/itoa32 return ) - (func $~lib/util/number/itoa_stream (; 255 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 234 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -13835,7 +11963,7 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 256 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 235 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -13846,7 +11974,7 @@ (local $9 i32) (local $10 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -13857,11 +11985,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -13875,12 +12003,12 @@ i32.load8_s call $~lib/util/number/itoa local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end @@ -13900,7 +12028,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -13977,45 +12105,45 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 257 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 236 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array#toString (; 258 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#toString (; 237 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join ) - (func $~lib/util/number/itoa (; 259 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa (; 238 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 65535 i32.and call $~lib/util/number/utoa32 return ) - (func $~lib/util/number/itoa_stream (; 260 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 239 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -14060,7 +12188,7 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 261 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 240 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -14071,7 +12199,7 @@ (local $9 i32) (local $10 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -14082,11 +12210,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -14100,12 +12228,12 @@ i32.load16_u call $~lib/util/number/itoa local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end @@ -14125,7 +12253,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -14202,38 +12330,38 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 262 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 241 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array#toString (; 263 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#toString (; 242 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join ) - (func $~lib/util/number/decimalCount64 (; 264 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/decimalCount64 (; 243 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) local.get $0 i64.const 1000000000000000 @@ -14302,7 +12430,7 @@ unreachable unreachable ) - (func $~lib/util/number/utoa64_lut (; 265 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/util/number/utoa64_lut (; 244 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i64) (local $5 i32) @@ -14314,7 +12442,7 @@ (local $11 i32) (local $12 i64) (local $13 i64) - i32.const 5072 + i32.const 4856 i32.load offset=4 local.set $3 block $break|0 @@ -14428,7 +12556,7 @@ local.get $2 call $~lib/util/number/utoa32_lut ) - (func $~lib/util/number/utoa64 (; 266 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/utoa64 (; 245 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -14439,8 +12567,8 @@ local.get $0 i64.eqz if - i32.const 4632 - call $~lib/rt/purerc/__retain + i32.const 4416 + call $~lib/rt/pure/__retain return end local.get $0 @@ -14495,14 +12623,14 @@ end end local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa (; 267 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa (; 246 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) local.get $0 call $~lib/util/number/utoa64 return ) - (func $~lib/util/number/itoa_stream (; 268 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_stream (; 247 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -14567,7 +12695,7 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 269 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 248 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -14578,7 +12706,7 @@ (local $9 i32) (local $10 i64) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -14589,11 +12717,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -14607,12 +12735,12 @@ i64.load call $~lib/util/number/itoa local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end @@ -14632,7 +12760,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -14709,38 +12837,38 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 270 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 249 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array#toString (; 271 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#toString (; 250 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join ) - (func $~lib/util/number/itoa64 (; 272 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa64 (; 251 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -14752,8 +12880,8 @@ local.get $0 i64.eqz if - i32.const 4632 - call $~lib/rt/purerc/__retain + i32.const 4416 + call $~lib/rt/pure/__retain return end local.get $0 @@ -14829,14 +12957,14 @@ i32.store16 end local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa (; 273 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa (; 252 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) local.get $0 call $~lib/util/number/itoa64 return ) - (func $~lib/util/number/itoa_stream (; 274 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_stream (; 253 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -14923,7 +13051,7 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 275 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 254 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -14934,7 +13062,7 @@ (local $9 i32) (local $10 i64) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -14945,11 +13073,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -14963,12 +13091,12 @@ i64.load call $~lib/util/number/itoa local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end @@ -14988,7 +13116,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -15065,38 +13193,38 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 276 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 255 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array#toString (; 277 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#toString (; 256 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join ) - (func $~lib/array/Array<~lib/string/String | null>#join_str (; 278 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#join_str (; 257 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -15107,7 +13235,7 @@ (local $9 i32) (local $10 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -15118,11 +13246,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -15134,10 +13262,10 @@ if local.get $4 i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -15170,7 +13298,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 i32.const 0 @@ -15202,7 +13330,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $10 block $break|1 i32.const 0 @@ -15220,7 +13348,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 i32.const 0 @@ -15277,7 +13405,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 i32.const 0 @@ -15298,36 +13426,36 @@ local.get $10 local.set $8 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 ) - (func $~lib/array/Array<~lib/string/String | null>#join (; 279 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#join (; 258 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array<~lib/string/String | null>#join_str local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array<~lib/string/String | null>#toString (; 280 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String | null>#toString (; 259 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array<~lib/string/String | null>#join ) - (func $~lib/array/Array<~lib/string/String>#toString (; 281 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#toString (; 260 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array<~lib/string/String>#join ) - (func $~lib/array/Array<~lib/array/Array>#join_arr (; 282 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join_arr (; 261 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -15337,7 +13465,7 @@ (local $8 i32) (local $9 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -15348,16 +13476,16 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $4 local.get $1 call $~lib/string/String#get:length @@ -15373,7 +13501,7 @@ local.get $6 i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if (result i32) @@ -15381,16 +13509,16 @@ local.get $1 call $~lib/array/Array#join else - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain end local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -15410,7 +13538,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if @@ -15422,12 +13550,12 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $5 if @@ -15436,10 +13564,10 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $3 i32.const 1 @@ -15457,7 +13585,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if @@ -15469,48 +13597,48 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $4 local.set $9 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 ) - (func $~lib/array/Array<~lib/array/Array>#join (; 283 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join (; 262 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array<~lib/array/Array>#join_arr local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array<~lib/array/Array>#toString (; 284 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#toString (; 263 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array<~lib/array/Array>#join ) - (func $~lib/util/number/itoa (; 285 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa (; 264 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 255 i32.and call $~lib/util/number/utoa32 return ) - (func $~lib/util/number/itoa_stream (; 286 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 265 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -15555,7 +13683,7 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 287 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 266 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -15566,7 +13694,7 @@ (local $9 i32) (local $10 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -15577,11 +13705,11 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -15595,12 +13723,12 @@ i32.load8_u call $~lib/util/number/itoa local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end @@ -15620,7 +13748,7 @@ i32.shl i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 i32.const 0 local.set $9 @@ -15697,33 +13825,33 @@ call $~lib/string/String#substring local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end local.get $8 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array#join (; 288 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 267 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array#join_int local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array<~lib/array/Array>#join_arr (; 289 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join_arr (; 268 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -15733,7 +13861,7 @@ (local $8 i32) (local $9 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -15744,16 +13872,16 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $4 local.get $1 call $~lib/string/String#get:length @@ -15769,7 +13897,7 @@ local.get $6 i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if (result i32) @@ -15777,16 +13905,16 @@ local.get $1 call $~lib/array/Array#join else - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain end local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -15806,7 +13934,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if @@ -15818,12 +13946,12 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $5 if @@ -15832,10 +13960,10 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $3 i32.const 1 @@ -15853,7 +13981,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if @@ -15865,41 +13993,41 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $4 local.set $9 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 ) - (func $~lib/array/Array<~lib/array/Array>#join (; 290 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join (; 269 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array<~lib/array/Array>#join_arr local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array<~lib/array/Array>#toString (; 291 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#toString (; 270 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array<~lib/array/Array>#join ) - (func $~lib/array/Array<~lib/array/Array>#join_arr (; 292 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join_arr (; 271 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -15909,7 +14037,7 @@ (local $8 i32) (local $9 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -15920,16 +14048,16 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $4 local.get $1 call $~lib/string/String#get:length @@ -15945,7 +14073,7 @@ local.get $6 i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if (result i32) @@ -15953,16 +14081,16 @@ local.get $1 call $~lib/array/Array#join else - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain end local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -15982,7 +14110,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if @@ -15994,12 +14122,12 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $5 if @@ -16008,10 +14136,10 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $3 i32.const 1 @@ -16029,7 +14157,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if @@ -16041,36 +14169,36 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $4 local.set $9 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 ) - (func $~lib/array/Array<~lib/array/Array>#join (; 293 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array>#join (; 272 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array<~lib/array/Array>#join_arr local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join_arr (; 294 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join_arr (; 273 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -16080,7 +14208,7 @@ (local $8 i32) (local $9 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -16091,16 +14219,16 @@ i32.const 0 i32.lt_s if - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain local.set $4 local.get $1 call $~lib/string/String#get:length @@ -16116,7 +14244,7 @@ local.get $6 i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if (result i32) @@ -16124,16 +14252,16 @@ local.get $1 call $~lib/array/Array<~lib/array/Array>#join else - i32.const 4272 - call $~lib/rt/purerc/__retain + i32.const 4056 + call $~lib/rt/pure/__retain end local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -16153,7 +14281,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if @@ -16165,12 +14293,12 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $5 if @@ -16179,10 +14307,10 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $3 i32.const 1 @@ -16200,7 +14328,7 @@ i32.add i32.load local.get $7 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $7 local.get $7 if @@ -16212,52 +14340,41 @@ call $~lib/string/String.__concat local.tee $9 local.get $4 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $4 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end local.get $4 local.set $9 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join (; 295 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join (; 274 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join_arr local.set $2 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#toString (; 296 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#toString (; 275 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.const 4536 + i32.const 4320 call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#join ) - (func $~lib/rt/purerc/__release (; 297 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - ) - (func $start:std/array (; 298 ;) (type $FUNCSIG$v) + (func $start:std/array (; 276 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -16327,7 +14444,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 37 i32.const 2 call $~lib/builtins/abort @@ -16340,7 +14457,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 38 i32.const 2 call $~lib/builtins/abort @@ -16355,7 +14472,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 39 i32.const 2 call $~lib/builtins/abort @@ -16371,7 +14488,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort @@ -16384,60 +14501,60 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 41 i32.const 2 call $~lib/builtins/abort unreachable end - i32.const 272 + i32.const 168 call $~lib/array/Array.isArray<~lib/string/String> i32.const 0 i32.eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 42 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 5 i32.const 0 i32.const 20 - i32.const 296 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 192 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $1 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 i32.const 5 i32.const 0 i32.const 20 - i32.const 376 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 216 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 50 i32.const 2 call $~lib/builtins/abort @@ -16448,21 +14565,21 @@ i32.const 0 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 i32.const 5 i32.const 0 i32.const 20 - i32.const 504 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 344 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 53 i32.const 2 call $~lib/builtins/abort @@ -16473,21 +14590,21 @@ i32.const 0 i32.const -3 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 i32.const 5 i32.const 0 i32.const 20 - i32.const 528 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 368 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 56 i32.const 2 call $~lib/builtins/abort @@ -16498,21 +14615,21 @@ i32.const -2 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 i32.const 5 i32.const 0 i32.const 20 - i32.const 552 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 392 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $6 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 59 i32.const 2 call $~lib/builtins/abort @@ -16523,71 +14640,71 @@ i32.const 1 i32.const 0 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 i32.const 5 i32.const 0 i32.const 20 - i32.const 576 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 416 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $7 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 62 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 5 i32.const 2 i32.const 21 - i32.const 600 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 440 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $7 local.get $7 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 i32.const 5 i32.const 2 i32.const 21 - i32.const 640 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 480 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 69 i32.const 2 call $~lib/builtins/abort @@ -16598,21 +14715,21 @@ i32.const 0 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 i32.const 5 i32.const 2 i32.const 21 - i32.const 680 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 520 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 72 i32.const 2 call $~lib/builtins/abort @@ -16623,21 +14740,21 @@ i32.const 0 i32.const -3 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 i32.const 5 i32.const 2 i32.const 21 - i32.const 720 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 560 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 75 i32.const 2 call $~lib/builtins/abort @@ -16648,21 +14765,21 @@ i32.const -2 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 i32.const 5 i32.const 2 i32.const 21 - i32.const 760 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 600 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 78 i32.const 2 call $~lib/builtins/abort @@ -16673,40 +14790,40 @@ i32.const 1 i32.const 0 call $~lib/array/Array#fill - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 i32.const 5 i32.const 2 i32.const 21 - i32.const 800 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 640 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $2 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 81 i32.const 2 call $~lib/builtins/abort unreachable end local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block global.get $std/array/arr @@ -16716,7 +14833,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 87 i32.const 2 call $~lib/builtins/abort @@ -16729,7 +14846,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 88 i32.const 2 call $~lib/builtins/abort @@ -16747,7 +14864,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 92 i32.const 2 call $~lib/builtins/abort @@ -16760,7 +14877,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 93 i32.const 2 call $~lib/builtins/abort @@ -16773,7 +14890,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 94 i32.const 2 call $~lib/builtins/abort @@ -16788,7 +14905,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 98 i32.const 2 call $~lib/builtins/abort @@ -16801,7 +14918,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 99 i32.const 2 call $~lib/builtins/abort @@ -16814,7 +14931,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 100 i32.const 2 call $~lib/builtins/abort @@ -16831,7 +14948,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 104 i32.const 2 call $~lib/builtins/abort @@ -16844,7 +14961,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 105 i32.const 2 call $~lib/builtins/abort @@ -16858,7 +14975,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 106 i32.const 2 call $~lib/builtins/abort @@ -16875,7 +14992,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 110 i32.const 2 call $~lib/builtins/abort @@ -16888,7 +15005,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 111 i32.const 2 call $~lib/builtins/abort @@ -16902,7 +15019,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 112 i32.const 2 call $~lib/builtins/abort @@ -16916,7 +15033,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 113 i32.const 2 call $~lib/builtins/abort @@ -16933,7 +15050,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 117 i32.const 2 call $~lib/builtins/abort @@ -16946,7 +15063,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 118 i32.const 2 call $~lib/builtins/abort @@ -16960,7 +15077,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 119 i32.const 2 call $~lib/builtins/abort @@ -16974,7 +15091,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 120 i32.const 2 call $~lib/builtins/abort @@ -16988,7 +15105,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 121 i32.const 2 call $~lib/builtins/abort @@ -17011,7 +15128,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 130 i32.const 2 call $~lib/builtins/abort @@ -17024,7 +15141,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 131 i32.const 2 call $~lib/builtins/abort @@ -17037,7 +15154,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 132 i32.const 2 call $~lib/builtins/abort @@ -17047,12 +15164,12 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 888 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 728 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 call $~lib/array/Array#concat - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr call $std/array/internalCapacity i32.const 3 @@ -17060,7 +15177,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 135 i32.const 2 call $~lib/builtins/abort @@ -17074,7 +15191,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 137 i32.const 2 call $~lib/builtins/abort @@ -17088,7 +15205,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 138 i32.const 2 call $~lib/builtins/abort @@ -17102,7 +15219,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 139 i32.const 2 call $~lib/builtins/abort @@ -17118,7 +15235,7 @@ drop block (result i32) local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr local.get $2 call $~lib/array/Array#concat @@ -17131,7 +15248,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 146 i32.const 2 call $~lib/builtins/abort @@ -17144,7 +15261,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 147 i32.const 2 call $~lib/builtins/abort @@ -17157,7 +15274,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 148 i32.const 2 call $~lib/builtins/abort @@ -17171,7 +15288,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 149 i32.const 2 call $~lib/builtins/abort @@ -17185,7 +15302,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 150 i32.const 2 call $~lib/builtins/abort @@ -17199,7 +15316,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 151 i32.const 2 call $~lib/builtins/abort @@ -17213,7 +15330,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 152 i32.const 2 call $~lib/builtins/abort @@ -17227,7 +15344,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 153 i32.const 2 call $~lib/builtins/abort @@ -17243,7 +15360,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 156 i32.const 2 call $~lib/builtins/abort @@ -17251,7 +15368,7 @@ end block (result i32) local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr i32.const 0 call $~lib/array/Array#concat @@ -17264,7 +15381,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 159 i32.const 2 call $~lib/builtins/abort @@ -17278,7 +15395,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 160 i32.const 2 call $~lib/builtins/abort @@ -17287,11 +15404,11 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 904 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 744 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 local.get $1 call $~lib/array/Array#get:length @@ -17300,7 +15417,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 163 i32.const 2 call $~lib/builtins/abort @@ -17308,7 +15425,7 @@ end block (result i32) local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 global.get $std/array/arr call $~lib/array/Array#concat @@ -17321,7 +15438,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 165 i32.const 2 call $~lib/builtins/abort @@ -17334,22 +15451,22 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 166 i32.const 2 call $~lib/builtins/abort unreachable end local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 0 @@ -17357,12 +15474,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 920 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 760 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 0 @@ -17373,16 +15490,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 960 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 800 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $2 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 174 i32.const 2 call $~lib/builtins/abort @@ -17391,12 +15508,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1000 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 840 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $7 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 1 @@ -17407,16 +15524,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1040 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 880 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 176 i32.const 2 call $~lib/builtins/abort @@ -17425,12 +15542,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1080 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 920 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $8 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 1 @@ -17441,16 +15558,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1120 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 960 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $10 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 178 i32.const 2 call $~lib/builtins/abort @@ -17459,12 +15576,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1160 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1000 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $11 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 2 @@ -17475,16 +15592,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1200 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1040 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 180 i32.const 2 call $~lib/builtins/abort @@ -17493,12 +15610,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1240 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1080 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $14 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 0 @@ -17509,16 +15626,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1280 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1120 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $16 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 182 i32.const 2 call $~lib/builtins/abort @@ -17527,12 +15644,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1320 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1160 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $17 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 1 @@ -17543,16 +15660,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1360 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1200 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $19 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 184 i32.const 2 call $~lib/builtins/abort @@ -17561,12 +15678,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1400 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1240 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $20 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 1 @@ -17577,16 +15694,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1440 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1280 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $22 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 186 i32.const 2 call $~lib/builtins/abort @@ -17595,12 +15712,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1480 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1320 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $23 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 0 @@ -17611,16 +15728,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1520 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1360 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $25 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 188 i32.const 2 call $~lib/builtins/abort @@ -17629,12 +15746,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1560 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1400 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $26 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const 0 @@ -17645,16 +15762,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1600 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1440 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $28 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 190 i32.const 2 call $~lib/builtins/abort @@ -17663,12 +15780,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1640 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1480 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $29 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const -4 @@ -17679,16 +15796,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1680 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1520 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $31 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 192 i32.const 2 call $~lib/builtins/abort @@ -17697,12 +15814,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1720 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1560 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $32 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const -4 @@ -17713,16 +15830,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1760 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1600 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $34 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 194 i32.const 2 call $~lib/builtins/abort @@ -17731,12 +15848,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1800 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1640 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $35 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 local.get $1 i32.const -4 @@ -17747,95 +15864,95 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1840 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1680 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $37 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 196 i32.const 2 call $~lib/builtins/abort unreachable end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $19 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $18 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $21 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $28 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $29 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $31 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $32 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $30 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $34 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $35 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $33 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $37 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block global.get $std/array/arr @@ -17849,7 +15966,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 204 i32.const 2 call $~lib/builtins/abort @@ -17862,7 +15979,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 205 i32.const 2 call $~lib/builtins/abort @@ -17876,7 +15993,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 206 i32.const 2 call $~lib/builtins/abort @@ -17890,7 +16007,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 207 i32.const 2 call $~lib/builtins/abort @@ -17904,7 +16021,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 208 i32.const 2 call $~lib/builtins/abort @@ -17918,7 +16035,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 209 i32.const 2 call $~lib/builtins/abort @@ -17935,7 +16052,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 213 i32.const 2 call $~lib/builtins/abort @@ -17948,7 +16065,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 214 i32.const 2 call $~lib/builtins/abort @@ -17962,7 +16079,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 215 i32.const 2 call $~lib/builtins/abort @@ -17976,7 +16093,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 216 i32.const 2 call $~lib/builtins/abort @@ -17990,7 +16107,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 217 i32.const 2 call $~lib/builtins/abort @@ -18004,7 +16121,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 218 i32.const 2 call $~lib/builtins/abort @@ -18018,7 +16135,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 219 i32.const 2 call $~lib/builtins/abort @@ -18035,7 +16152,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 228 i32.const 2 call $~lib/builtins/abort @@ -18048,7 +16165,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 229 i32.const 2 call $~lib/builtins/abort @@ -18061,7 +16178,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 230 i32.const 2 call $~lib/builtins/abort @@ -18075,7 +16192,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 231 i32.const 2 call $~lib/builtins/abort @@ -18089,7 +16206,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 232 i32.const 2 call $~lib/builtins/abort @@ -18103,7 +16220,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 233 i32.const 2 call $~lib/builtins/abort @@ -18117,7 +16234,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 234 i32.const 2 call $~lib/builtins/abort @@ -18132,7 +16249,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 238 i32.const 2 call $~lib/builtins/abort @@ -18145,7 +16262,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 239 i32.const 2 call $~lib/builtins/abort @@ -18158,7 +16275,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 240 i32.const 2 call $~lib/builtins/abort @@ -18172,7 +16289,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 241 i32.const 2 call $~lib/builtins/abort @@ -18186,7 +16303,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 242 i32.const 2 call $~lib/builtins/abort @@ -18200,7 +16317,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 243 i32.const 2 call $~lib/builtins/abort @@ -18210,7 +16327,7 @@ block global.get $std/array/arr call $~lib/array/Array#reverse - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr call $~lib/array/Array#get:length i32.const 3 @@ -18218,7 +16335,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 251 i32.const 2 call $~lib/builtins/abort @@ -18231,7 +16348,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 252 i32.const 2 call $~lib/builtins/abort @@ -18245,7 +16362,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 253 i32.const 2 call $~lib/builtins/abort @@ -18259,7 +16376,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 254 i32.const 2 call $~lib/builtins/abort @@ -18273,7 +16390,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 255 i32.const 2 call $~lib/builtins/abort @@ -18300,7 +16417,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 265 i32.const 2 call $~lib/builtins/abort @@ -18317,7 +16434,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 268 i32.const 2 call $~lib/builtins/abort @@ -18334,7 +16451,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 271 i32.const 2 call $~lib/builtins/abort @@ -18351,7 +16468,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 274 i32.const 2 call $~lib/builtins/abort @@ -18368,7 +16485,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 277 i32.const 2 call $~lib/builtins/abort @@ -18385,7 +16502,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 280 i32.const 2 call $~lib/builtins/abort @@ -18402,7 +16519,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 283 i32.const 2 call $~lib/builtins/abort @@ -18419,7 +16536,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 286 i32.const 2 call $~lib/builtins/abort @@ -18436,7 +16553,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 289 i32.const 2 call $~lib/builtins/abort @@ -18453,7 +16570,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 292 i32.const 2 call $~lib/builtins/abort @@ -18472,7 +16589,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 299 i32.const 2 call $~lib/builtins/abort @@ -18489,7 +16606,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 302 i32.const 2 call $~lib/builtins/abort @@ -18506,7 +16623,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 305 i32.const 2 call $~lib/builtins/abort @@ -18523,7 +16640,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 308 i32.const 2 call $~lib/builtins/abort @@ -18540,7 +16657,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 311 i32.const 2 call $~lib/builtins/abort @@ -18557,7 +16674,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 314 i32.const 2 call $~lib/builtins/abort @@ -18574,7 +16691,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 317 i32.const 2 call $~lib/builtins/abort @@ -18591,7 +16708,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 320 i32.const 2 call $~lib/builtins/abort @@ -18608,7 +16725,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 323 i32.const 2 call $~lib/builtins/abort @@ -18625,7 +16742,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 326 i32.const 2 call $~lib/builtins/abort @@ -18635,7 +16752,7 @@ i32.const 1 i32.const 1 call $~lib/array/Array#splice - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/arr call $~lib/array/Array#get:length i32.const 4 @@ -18643,7 +16760,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 330 i32.const 2 call $~lib/builtins/abort @@ -18656,7 +16773,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 331 i32.const 2 call $~lib/builtins/abort @@ -18670,7 +16787,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 332 i32.const 2 call $~lib/builtins/abort @@ -18684,7 +16801,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 333 i32.const 2 call $~lib/builtins/abort @@ -18695,11 +16812,11 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1880 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1720 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $33 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $37 local.get $37 i32.const 0 @@ -18709,16 +16826,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1920 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1760 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $30 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 340 i32.const 2 call $~lib/builtins/abort @@ -18728,16 +16845,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 1960 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1800 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $32 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 341 i32.const 2 call $~lib/builtins/abort @@ -18746,12 +16863,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 1976 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1816 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $31 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const 2 @@ -18761,16 +16878,16 @@ i32.const 3 i32.const 2 i32.const 17 - i32.const 2016 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1856 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $29 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 344 i32.const 2 call $~lib/builtins/abort @@ -18780,16 +16897,16 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 2048 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1888 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $28 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 345 i32.const 2 call $~lib/builtins/abort @@ -18798,12 +16915,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2072 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1912 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $24 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const 2 @@ -18813,16 +16930,16 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 2112 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1952 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $25 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 348 i32.const 2 call $~lib/builtins/abort @@ -18832,16 +16949,16 @@ i32.const 3 i32.const 2 i32.const 17 - i32.const 2136 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 1976 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $21 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 349 i32.const 2 call $~lib/builtins/abort @@ -18850,12 +16967,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2168 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2008 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $23 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const 0 @@ -18865,16 +16982,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 2208 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2048 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $18 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 352 i32.const 2 call $~lib/builtins/abort @@ -18884,16 +17001,16 @@ i32.const 4 i32.const 2 i32.const 17 - i32.const 2232 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2072 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $20 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 353 i32.const 2 call $~lib/builtins/abort @@ -18902,12 +17019,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2264 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2104 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $19 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const -1 @@ -18917,16 +17034,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 2304 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2144 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $17 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 356 i32.const 2 call $~lib/builtins/abort @@ -18936,16 +17053,16 @@ i32.const 4 i32.const 2 i32.const 17 - i32.const 2328 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2168 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $16 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 357 i32.const 2 call $~lib/builtins/abort @@ -18954,12 +17071,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2360 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2200 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $12 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const -2 @@ -18969,16 +17086,16 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 2400 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2240 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 360 i32.const 2 call $~lib/builtins/abort @@ -18988,16 +17105,16 @@ i32.const 3 i32.const 2 i32.const 17 - i32.const 2424 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2264 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 361 i32.const 2 call $~lib/builtins/abort @@ -19006,12 +17123,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2456 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2296 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $11 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const -2 @@ -19021,16 +17138,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 2496 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2336 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $6 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 364 i32.const 2 call $~lib/builtins/abort @@ -19040,16 +17157,16 @@ i32.const 4 i32.const 2 i32.const 17 - i32.const 2520 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2360 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $8 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 365 i32.const 2 call $~lib/builtins/abort @@ -19058,12 +17175,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2552 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2392 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const -7 @@ -19073,16 +17190,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 2592 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2432 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $7 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 368 i32.const 2 call $~lib/builtins/abort @@ -19092,16 +17209,16 @@ i32.const 4 i32.const 2 i32.const 17 - i32.const 2616 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2456 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $2 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 369 i32.const 2 call $~lib/builtins/abort @@ -19110,12 +17227,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2648 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2488 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const -2 @@ -19125,16 +17242,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 2688 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2528 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 372 i32.const 2 call $~lib/builtins/abort @@ -19144,16 +17261,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2704 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2544 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $36 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 373 i32.const 2 call $~lib/builtins/abort @@ -19162,12 +17279,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2744 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2584 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $38 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const 1 @@ -19177,16 +17294,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 2784 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2624 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $40 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 376 i32.const 2 call $~lib/builtins/abort @@ -19196,16 +17313,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2800 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2640 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $41 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 377 i32.const 2 call $~lib/builtins/abort @@ -19214,12 +17331,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2840 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2680 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $42 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const 4 @@ -19229,16 +17346,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 2880 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2720 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $44 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 380 i32.const 2 call $~lib/builtins/abort @@ -19248,16 +17365,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2896 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2736 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $45 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 381 i32.const 2 call $~lib/builtins/abort @@ -19266,12 +17383,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2936 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2776 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $46 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const 7 @@ -19281,16 +17398,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 2976 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2816 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $48 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 384 i32.const 2 call $~lib/builtins/abort @@ -19300,16 +17417,16 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 2992 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2832 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $49 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 385 i32.const 2 call $~lib/builtins/abort @@ -19318,12 +17435,12 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 3032 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2872 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $50 local.get $37 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $37 local.get $37 i32.const 7 @@ -19333,16 +17450,16 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 3072 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2912 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $52 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 388 i32.const 2 call $~lib/builtins/abort @@ -19352,127 +17469,127 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 3088 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 2928 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $53 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 389 i32.const 2 call $~lib/builtins/abort unreachable end local.get $33 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $37 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $35 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $30 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $32 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $31 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $34 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $29 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $28 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $21 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $18 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $19 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $41 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $42 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $44 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $45 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $46 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $43 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $48 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $49 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $50 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $47 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $52 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $53 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block global.get $std/array/arr @@ -19501,7 +17618,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 402 i32.const 2 call $~lib/builtins/abort @@ -19517,7 +17634,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 405 i32.const 2 call $~lib/builtins/abort @@ -19533,7 +17650,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 408 i32.const 2 call $~lib/builtins/abort @@ -19549,7 +17666,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 416 i32.const 2 call $~lib/builtins/abort @@ -19562,7 +17679,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 417 i32.const 2 call $~lib/builtins/abort @@ -19578,7 +17695,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 419 i32.const 2 call $~lib/builtins/abort @@ -19606,7 +17723,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 432 i32.const 2 call $~lib/builtins/abort @@ -19619,7 +17736,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 433 i32.const 2 call $~lib/builtins/abort @@ -19645,7 +17762,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 443 i32.const 2 call $~lib/builtins/abort @@ -19661,7 +17778,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 446 i32.const 2 call $~lib/builtins/abort @@ -19677,7 +17794,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 454 i32.const 2 call $~lib/builtins/abort @@ -19690,7 +17807,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 455 i32.const 2 call $~lib/builtins/abort @@ -19706,7 +17823,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 457 i32.const 2 call $~lib/builtins/abort @@ -19734,7 +17851,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 470 i32.const 2 call $~lib/builtins/abort @@ -19747,7 +17864,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 471 i32.const 2 call $~lib/builtins/abort @@ -19773,7 +17890,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 481 i32.const 2 call $~lib/builtins/abort @@ -19789,7 +17906,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 484 i32.const 2 call $~lib/builtins/abort @@ -19805,7 +17922,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 492 i32.const 2 call $~lib/builtins/abort @@ -19818,7 +17935,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 493 i32.const 2 call $~lib/builtins/abort @@ -19834,7 +17951,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 495 i32.const 2 call $~lib/builtins/abort @@ -19862,7 +17979,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 508 i32.const 2 call $~lib/builtins/abort @@ -19875,7 +17992,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 509 i32.const 2 call $~lib/builtins/abort @@ -19902,7 +18019,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 520 i32.const 2 call $~lib/builtins/abort @@ -19919,7 +18036,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 529 i32.const 2 call $~lib/builtins/abort @@ -19932,7 +18049,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -19949,7 +18066,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 533 i32.const 2 call $~lib/builtins/abort @@ -19978,7 +18095,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 547 i32.const 2 call $~lib/builtins/abort @@ -19991,7 +18108,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 548 i32.const 2 call $~lib/builtins/abort @@ -20015,7 +18132,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 573 i32.const 2 call $~lib/builtins/abort @@ -20071,7 +18188,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 587 i32.const 2 call $~lib/builtins/abort @@ -20088,7 +18205,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 588 i32.const 2 call $~lib/builtins/abort @@ -20099,14 +18216,14 @@ global.get $std/array/arr i32.const 23 call $~lib/array/Array#map - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 6 i32.eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 597 i32.const 2 call $~lib/builtins/abort @@ -20119,7 +18236,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 598 i32.const 2 call $~lib/builtins/abort @@ -20130,14 +18247,14 @@ global.get $std/array/arr i32.const 24 call $~lib/array/Array#map - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 406 i32.eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 605 i32.const 2 call $~lib/builtins/abort @@ -20160,14 +18277,14 @@ global.get $std/array/arr i32.const 25 call $~lib/array/Array#map - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 1 i32.eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 620 i32.const 2 call $~lib/builtins/abort @@ -20180,7 +18297,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 621 i32.const 2 call $~lib/builtins/abort @@ -20195,7 +18312,7 @@ call $~lib/array/Array#push drop local.get $53 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block global.get $std/array/arr @@ -20209,7 +18326,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 631 i32.const 2 call $~lib/builtins/abort @@ -20220,14 +18337,14 @@ global.get $std/array/arr i32.const 27 call $~lib/array/Array#filter - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 6 i32.eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 640 i32.const 2 call $~lib/builtins/abort @@ -20240,7 +18357,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 641 i32.const 2 call $~lib/builtins/abort @@ -20251,14 +18368,14 @@ global.get $std/array/arr i32.const 28 call $~lib/array/Array#filter - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 406 i32.eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 648 i32.const 2 call $~lib/builtins/abort @@ -20281,14 +18398,14 @@ global.get $std/array/arr i32.const 29 call $~lib/array/Array#filter - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release global.get $std/array/i i32.const 1 i32.eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 663 i32.const 2 call $~lib/builtins/abort @@ -20301,7 +18418,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 664 i32.const 2 call $~lib/builtins/abort @@ -20316,7 +18433,7 @@ call $~lib/array/Array#push drop local.get $53 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block global.get $std/array/arr @@ -20330,7 +18447,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 674 i32.const 2 call $~lib/builtins/abort @@ -20347,7 +18464,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 678 i32.const 2 call $~lib/builtins/abort @@ -20366,7 +18483,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 681 i32.const 2 call $~lib/builtins/abort @@ -20385,7 +18502,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 684 i32.const 2 call $~lib/builtins/abort @@ -20402,7 +18519,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 692 i32.const 2 call $~lib/builtins/abort @@ -20415,7 +18532,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 693 i32.const 2 call $~lib/builtins/abort @@ -20432,7 +18549,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 695 i32.const 2 call $~lib/builtins/abort @@ -20461,7 +18578,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 708 i32.const 2 call $~lib/builtins/abort @@ -20474,7 +18591,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 709 i32.const 2 call $~lib/builtins/abort @@ -20501,7 +18618,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 719 i32.const 2 call $~lib/builtins/abort @@ -20518,7 +18635,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 723 i32.const 2 call $~lib/builtins/abort @@ -20537,7 +18654,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 726 i32.const 2 call $~lib/builtins/abort @@ -20556,7 +18673,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 729 i32.const 2 call $~lib/builtins/abort @@ -20573,7 +18690,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 737 i32.const 2 call $~lib/builtins/abort @@ -20586,7 +18703,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 738 i32.const 2 call $~lib/builtins/abort @@ -20603,7 +18720,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 740 i32.const 2 call $~lib/builtins/abort @@ -20632,7 +18749,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 753 i32.const 2 call $~lib/builtins/abort @@ -20645,7 +18762,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 754 i32.const 2 call $~lib/builtins/abort @@ -20675,32 +18792,32 @@ i32.const 8 i32.const 2 i32.const 22 - i32.const 3360 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3200 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $52 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $53 i32.const 0 global.set $~lib/argc local.get $53 i32.const 0 call $~lib/array/Array#sort|trampoline - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $53 i32.const 8 i32.const 2 i32.const 22 - i32.const 3408 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3248 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $50 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 843 i32.const 2 call $~lib/builtins/abort @@ -20709,32 +18826,32 @@ i32.const 8 i32.const 3 i32.const 23 - i32.const 3456 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3296 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $49 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $47 i32.const 0 global.set $~lib/argc local.get $47 i32.const 0 call $~lib/array/Array#sort|trampoline - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $47 i32.const 8 i32.const 3 i32.const 23 - i32.const 3536 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3376 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $43 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 847 i32.const 2 call $~lib/builtins/abort @@ -20743,32 +18860,32 @@ i32.const 5 i32.const 2 i32.const 17 - i32.const 3616 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3456 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $46 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $48 i32.const 0 global.set $~lib/argc local.get $48 i32.const 0 call $~lib/array/Array#sort|trampoline - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $48 i32.const 5 i32.const 2 i32.const 17 - i32.const 3656 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3496 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $44 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 851 i32.const 2 call $~lib/builtins/abort @@ -20777,32 +18894,32 @@ i32.const 5 i32.const 2 i32.const 21 - i32.const 3696 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3536 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $39 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $45 i32.const 0 global.set $~lib/argc local.get $45 i32.const 0 call $~lib/array/Array#sort|trampoline - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $45 i32.const 5 i32.const 2 i32.const 21 - i32.const 3736 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3576 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $41 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 855 i32.const 2 call $~lib/builtins/abort @@ -20811,47 +18928,47 @@ i32.const 0 i32.const 2 i32.const 17 - i32.const 3776 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3616 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $40 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $42 i32.const 1 i32.const 2 i32.const 17 - i32.const 3792 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3632 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $38 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $3 i32.const 2 i32.const 2 i32.const 17 - i32.const 3816 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3656 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $36 i32.const 4 i32.const 2 i32.const 17 - i32.const 3840 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3680 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 i32.const 4 i32.const 2 i32.const 17 - i32.const 3872 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3712 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $7 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $2 i32.const 64 call $std/array/createReverseOrderedArray @@ -20876,16 +18993,16 @@ i32.const 1 i32.const 2 i32.const 17 - i32.const 3960 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3800 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $9 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 875 i32.const 2 call $~lib/builtins/abort @@ -20897,16 +19014,16 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 3984 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 3824 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $13 i32.const 0 call $std/array/isArraysEqual i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 878 i32.const 2 call $~lib/builtins/abort @@ -20921,7 +19038,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 881 i32.const 2 call $~lib/builtins/abort @@ -20936,7 +19053,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 884 i32.const 2 call $~lib/builtins/abort @@ -20951,7 +19068,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 887 i32.const 2 call $~lib/builtins/abort @@ -20966,7 +19083,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 890 i32.const 2 call $~lib/builtins/abort @@ -20981,7 +19098,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 893 i32.const 2 call $~lib/builtins/abort @@ -20990,63 +19107,63 @@ local.get $14 call $std/array/assertSortedDefault local.get $52 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $53 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $50 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $49 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $47 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $43 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $46 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $48 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $44 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $45 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $41 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $42 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 64 @@ -21068,9 +19185,9 @@ i32.const 52 call $std/array/assertSorted local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 2 @@ -21080,7 +19197,7 @@ i32.const 53 call $std/array/assertSorted<~lib/array/Array> local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 512 @@ -21090,26 +19207,26 @@ i32.const 54 call $std/array/assertSorted> local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 7 i32.const 2 i32.const 27 - i32.const 4288 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4072 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $13 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $9 i32.const 7 i32.const 2 i32.const 27 - i32.const 4336 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4120 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $14 i32.const 1 global.set $~lib/argc @@ -21123,7 +19240,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 930 i32.const 2 call $~lib/builtins/abort @@ -21138,33 +19255,33 @@ i32.const 0 call $std/array/assertSorted<~lib/string/String>|trampoline local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 2 i32.const 0 i32.const 29 - i32.const 4456 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4240 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $14 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join local.tee $8 - i32.const 4560 + i32.const 4344 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 941 i32.const 2 call $~lib/builtins/abort @@ -21173,19 +19290,19 @@ i32.const 3 i32.const 2 i32.const 17 - i32.const 4600 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4384 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $9 - i32.const 4272 + i32.const 4056 call $~lib/array/Array#join local.tee $6 - i32.const 5104 + i32.const 4888 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 942 i32.const 2 call $~lib/builtins/abort @@ -21194,19 +19311,19 @@ i32.const 3 i32.const 2 i32.const 21 - i32.const 5136 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4920 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $5 - i32.const 5168 + i32.const 4952 call $~lib/array/Array#join local.tee $13 - i32.const 5104 + i32.const 4888 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 943 i32.const 2 call $~lib/builtins/abort @@ -21215,19 +19332,19 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 5192 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 4976 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $2 - i32.const 5216 + i32.const 5000 call $~lib/array/Array#join local.tee $10 - i32.const 5240 + i32.const 5024 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 944 i32.const 2 call $~lib/builtins/abort @@ -21236,19 +19353,19 @@ i32.const 6 i32.const 3 i32.const 23 - i32.const 5304 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 5088 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 - i32.const 5368 + i32.const 5152 call $~lib/array/Array#join local.tee $7 - i32.const 6568 + i32.const 6352 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 945 i32.const 2 call $~lib/builtins/abort @@ -21257,19 +19374,19 @@ i32.const 3 i32.const 2 i32.const 28 - i32.const 6688 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6472 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $36 - i32.const 4272 + i32.const 4056 call $~lib/array/Array<~lib/string/String>#join local.tee $4 - i32.const 6664 + i32.const 6448 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 946 i32.const 2 call $~lib/builtins/abort @@ -21280,7 +19397,7 @@ i32.const 2 i32.const 33 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.set $1 local.get $1 i32.load offset=4 @@ -21289,116 +19406,116 @@ i32.const 0 call $std/array/Ref#constructor local.tee $38 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $3 i32.const 0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store offset=4 local.get $3 i32.const 0 call $std/array/Ref#constructor local.tee $42 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store offset=8 local.get $1 end - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $3 local.get $3 - i32.const 4536 + i32.const 4320 call $~lib/array/Array#join local.tee $1 - i32.const 6768 + i32.const 6552 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 948 i32.const 2 call $~lib/builtins/abort unreachable end local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $42 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end block i32.const 0 i32.const 2 i32.const 17 - i32.const 6848 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6632 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $1 i32.const 1 i32.const 2 i32.const 17 - i32.const 6864 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6648 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $38 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $42 i32.const 2 i32.const 2 i32.const 17 - i32.const 6888 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6672 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $36 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 i32.const 4 i32.const 2 i32.const 17 - i32.const 6912 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6696 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $7 local.get $1 call $~lib/array/Array#toString local.tee $10 - i32.const 4272 + i32.const 4056 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 958 i32.const 2 call $~lib/builtins/abort @@ -21407,12 +19524,12 @@ local.get $42 call $~lib/array/Array#toString local.tee $2 - i32.const 6664 + i32.const 6448 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 959 i32.const 2 call $~lib/builtins/abort @@ -21421,12 +19538,12 @@ local.get $4 call $~lib/array/Array#toString local.tee $13 - i32.const 6944 + i32.const 6728 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 960 i32.const 2 call $~lib/builtins/abort @@ -21435,12 +19552,12 @@ local.get $7 call $~lib/array/Array#toString local.tee $5 - i32.const 6968 + i32.const 6752 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 961 i32.const 2 call $~lib/builtins/abort @@ -21449,18 +19566,18 @@ i32.const 3 i32.const 0 i32.const 34 - i32.const 7000 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6784 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $9 call $~lib/array/Array#toString local.tee $6 - i32.const 7024 + i32.const 6808 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 963 i32.const 2 call $~lib/builtins/abort @@ -21469,18 +19586,18 @@ i32.const 3 i32.const 1 i32.const 35 - i32.const 7056 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6840 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $14 call $~lib/array/Array#toString local.tee $8 - i32.const 7080 + i32.const 6864 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 964 i32.const 2 call $~lib/builtins/abort @@ -21489,18 +19606,18 @@ i32.const 3 i32.const 3 i32.const 30 - i32.const 7120 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 6904 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $41 call $~lib/array/Array#toString local.tee $40 - i32.const 7160 + i32.const 6944 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 965 i32.const 2 call $~lib/builtins/abort @@ -21509,18 +19626,18 @@ i32.const 4 i32.const 3 i32.const 36 - i32.const 7224 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7008 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $39 call $~lib/array/Array#toString local.tee $45 - i32.const 7272 + i32.const 7056 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 966 i32.const 2 call $~lib/builtins/abort @@ -21529,21 +19646,21 @@ i32.const 7 i32.const 2 i32.const 27 - i32.const 7376 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7160 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $48 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $44 local.get $44 call $~lib/array/Array<~lib/string/String | null>#toString local.tee $46 - i32.const 7424 + i32.const 7208 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 970 i32.const 2 call $~lib/builtins/abort @@ -21552,18 +19669,18 @@ i32.const 4 i32.const 2 i32.const 28 - i32.const 7520 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7304 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $47 call $~lib/array/Array<~lib/string/String>#toString local.tee $43 - i32.const 7552 + i32.const 7336 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 971 i32.const 2 call $~lib/builtins/abort @@ -21574,7 +19691,7 @@ i32.const 2 i32.const 24 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.set $49 local.get $49 i32.load offset=4 @@ -21583,35 +19700,35 @@ i32.const 2 i32.const 2 i32.const 17 - i32.const 7584 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7368 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $52 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $50 i32.const 2 i32.const 2 i32.const 17 - i32.const 7608 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7392 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $11 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store offset=4 local.get $49 end - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $54 local.get $54 call $~lib/array/Array<~lib/array/Array>#toString local.tee $50 - i32.const 7632 + i32.const 7416 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 974 i32.const 2 call $~lib/builtins/abort @@ -21622,7 +19739,7 @@ i32.const 2 i32.const 37 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.set $49 local.get $49 i32.load offset=4 @@ -21631,35 +19748,35 @@ i32.const 2 i32.const 0 i32.const 20 - i32.const 7664 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7448 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $12 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $53 i32.const 2 i32.const 0 i32.const 20 - i32.const 7688 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7472 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $16 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store offset=4 local.get $49 end - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $55 local.get $55 call $~lib/array/Array<~lib/array/Array>#toString local.tee $53 - i32.const 7632 + i32.const 7416 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 977 i32.const 2 call $~lib/builtins/abort @@ -21670,7 +19787,7 @@ i32.const 2 i32.const 39 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.set $49 local.get $49 i32.load offset=4 @@ -21681,7 +19798,7 @@ i32.const 2 i32.const 38 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.set $17 local.get $17 i32.load offset=4 @@ -21690,111 +19807,111 @@ i32.const 1 i32.const 2 i32.const 21 - i32.const 7712 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + i32.const 7496 + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.tee $20 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $17 end - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $49 end - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $56 local.get $56 call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#toString local.tee $15 - i32.const 6664 + i32.const 6448 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 980 i32.const 2 call $~lib/builtins/abort unreachable end local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $42 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $41 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $45 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $48 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $44 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $46 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $47 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $43 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $52 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $50 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $53 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end global.get $std/array/arr - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $54 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $55 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $56 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/array/main (; 299 ;) (type $FUNCSIG$v) + (func $std/array/main (; 277 ;) (type $FUNCSIG$v) global.get $~lib/started i32.eqz if @@ -21803,7 +19920,7 @@ global.set $~lib/started end ) - (func $~lib/rt/purerc/markGray (; 300 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/markGray (; 278 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -21827,10 +19944,621 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 301 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/removeBlock (; 279 ;) (type $FUNCSIG$vii) (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 7520 + i32.const 275 + 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 7520 + i32.const 277 + 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 7520 + i32.const 290 + 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 + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + 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 + end + i32.eq + if + block $~lib/rt/tlsf/SETHEAD|inlined.0 + 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 + end + local.get $7 + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + 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 + end + local.set $8 + block $~lib/rt/tlsf/SETSL|inlined.0 + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $8 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $8 + local.set $9 + local.get $11 + local.get $10 + i32.const 2 + i32.shl + i32.add + local.get $9 + i32.store offset=4 + end + local.get $8 + 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 (; 280 ;) (type $FUNCSIG$vii) (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 7520 + i32.const 203 + 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 7520 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + 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 + end + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + 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 + end + local.set $4 + local.get $4 + i32.load + local.set $5 + end + end + local.get $2 + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 4 + i32.sub + i32.load + end + local.set $3 + local.get $3 + i32.load + local.set $6 + local.get $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 226 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $6 + 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 $3 + call $~lib/rt/tlsf/removeBlock + local.get $3 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $2 + i32.store + local.get $3 + 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 7520 + i32.const 241 + 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 7520 + i32.const 242 + 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 7520 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $0 + local.set $3 + local.get $9 + local.set $6 + local.get $10 + local.set $7 + local.get $3 + local.get $6 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + 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 + block $~lib/rt/tlsf/SETHEAD|inlined.1 + local.get $0 + local.set $12 + local.get $9 + local.set $3 + local.get $10 + local.set $6 + local.get $1 + local.set $7 + local.get $12 + local.get $3 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=96 + end + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $9 + i32.shl + i32.or + i32.store + block $~lib/rt/tlsf/SETSL|inlined.1 + local.get $0 + local.set $3 + local.get $9 + local.set $6 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $0 + local.set $13 + local.get $9 + local.set $12 + local.get $13 + local.get $12 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + i32.const 1 + local.get $10 + i32.shl + i32.or + local.set $7 + local.get $3 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=4 + end + ) + (func $~lib/rt/tlsf/freeBlock (; 281 ;) (type $FUNCSIG$vii) (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 7520 + i32.const 530 + 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/tlsf/onFree + ) + (func $~lib/rt/pure/scanBlack (; 282 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -21845,9 +20573,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 302 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 283 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -21865,7 +20593,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -21880,11 +20608,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 303 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 284 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -21907,20 +20635,20 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__collect (; 304 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/__collect (; 285 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 local.get $0 local.set $1 @@ -21928,7 +20656,7 @@ block local.get $1 local.set $2 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $3 end loop $repeat|0 @@ -21959,7 +20687,7 @@ end if local.get $4 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray local.get $1 local.get $4 i32.store @@ -22005,7 +20733,7 @@ unreachable end local.get $1 - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR block $break|1 local.get $0 local.set $5 @@ -22017,7 +20745,7 @@ br_if $break|1 local.get $5 i32.load - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan local.get $5 i32.const 4 i32.add @@ -22048,7 +20776,7 @@ i32.and i32.store offset=4 local.get $4 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite local.get $5 i32.const 4 i32.add @@ -22059,9 +20787,9 @@ unreachable end local.get $0 - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/common/__instanceof (; 305 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/__instanceof (; 286 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -22069,7 +20797,7 @@ i32.sub i32.load offset=8 local.set $2 - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $3 local.get $2 if (result i32) @@ -22101,9 +20829,1281 @@ end i32.const 0 ) - (func $start (; 306 ;) (type $FUNCSIG$v) + (func $~lib/rt/__typeinfo (; 287 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/RTTI_BASE + local.set $1 + local.get $0 + i32.eqz + if (result i32) + i32.const 1 + else + local.get $0 + local.get $1 + i32.load + i32.gt_u + end + if + i32.const 240 + i32.const 7568 + i32.const 23 + i32.const 34 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + i32.const 8 + i32.mul + i32.add + i32.load + ) + (func $start (; 288 ;) (type $FUNCSIG$v) call $start:std/array ) + (func $~lib/rt/tlsf/addMemory (; 289 ;) (type $FUNCSIG$iiii) (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 7520 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 7520 + i32.const 394 + 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 7520 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 290 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 291 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 7608 + i32.const 7520 + i32.const 446 + 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 (; 292 ;) (type $FUNCSIG$iii) (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 7520 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 293 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 294 ;) (type $FUNCSIG$viii) (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 7520 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 295 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 7520 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 296 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) + (func $~lib/rt/tlsf/reallocateBlock (; 297 ;) (type $FUNCSIG$iiii) (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.get $2 + call $~lib/rt/tlsf/prepareSize + local.set $3 + local.get $1 + i32.load + local.set $4 + local.get $4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 491 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32.const -4 + i32.and + i32.le_u + if + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + local.get $2 + i32.store offset=12 + local.get $1 + return + end + block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32) + 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 + end + local.set $6 + local.get $6 + i32.load + local.set $7 + local.get $7 + i32.const 1 + i32.and + if + local.get $4 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $7 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $5 + local.get $5 + local.get $3 + i32.ge_u + if + local.get $0 + local.get $6 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $4 + i32.const 3 + i32.and + local.get $5 + i32.or + i32.store + local.get $1 + local.get $2 + i32.store offset=12 + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + return + end + end + local.get $0 + local.get $2 + call $~lib/rt/tlsf/allocateBlock + local.set $8 + local.get $8 + local.get $1 + i32.load offset=4 + i32.store offset=4 + local.get $8 + local.get $1 + i32.load offset=8 + i32.store offset=8 + local.get $8 + i32.const 16 + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + local.get $4 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/tlsf/onFree + local.get $8 + ) + (func $~lib/rt/tlsf/__realloc (; 298 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 552 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + 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 7520 + i32.const 553 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + local.get $1 + call $~lib/rt/tlsf/reallocateBlock + i32.const 16 + i32.add + ) + (func $~lib/rt/tlsf/__free (; 299 ;) (type $FUNCSIG$vi) (param $0 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 7520 + i32.const 560 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + 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 7520 + i32.const 561 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/increment (; 300 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 7664 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 7664 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 301 ;) (type $FUNCSIG$ii) (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 $~lib/rt/pure/growRoots (; 302 ;) (type $FUNCSIG$v) + (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 + local.get $0 + local.get $1 + call $~lib/memory/memory.copy + 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 (; 303 ;) (type $FUNCSIG$vi) (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 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 304 ;) (type $FUNCSIG$vi) (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/pure/onDecrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 7664 + i32.const 114 + 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 7664 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + 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/__retainRelease (; 305 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + local.get $1 + i32.ne + if + global.get $~lib/heap/HEAP_BASE + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $1 + local.get $2 + i32.gt_u + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + end + local.get $0 + ) + (func $~lib/rt/pure/__release (; 306 ;) (type $FUNCSIG$vi) (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 $~lib/array/Array#__visit_impl (; 307 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) nop ) @@ -22119,11 +22119,317 @@ (func $~lib/array/Array#__visit_impl (; 311 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) nop ) - (func $~lib/rt/purerc/__visit (; 312 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 312 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array>#__visit_impl (; 313 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array<~lib/string/String | null>#__visit_impl (; 314 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 315 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array#__visit_impl (; 316 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 317 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 318 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 319 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array#__visit_impl (; 320 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 321 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 322 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 323 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 324 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl (; 325 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/rt/pure/__visit (; 326 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -22165,7 +22471,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -22181,7 +22487,7 @@ i32.eqz if i32.const 0 - i32.const 320 + i32.const 7664 i32.const 74 i32.const 17 call $~lib/builtins/abort @@ -22194,7 +22500,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -22202,7 +22508,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -22228,7 +22534,7 @@ i32.eqz if i32.const 0 - i32.const 320 + i32.const 7664 i32.const 85 i32.const 6 call $~lib/builtins/abort @@ -22246,7 +22552,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -22255,7 +22561,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -22265,7 +22571,7 @@ i32.eqz if i32.const 0 - i32.const 320 + i32.const 7664 i32.const 96 i32.const 24 call $~lib/builtins/abort @@ -22273,313 +22579,7 @@ end end ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 313 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array>#__visit_impl (; 314 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array<~lib/string/String | null>#__visit_impl (; 315 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 316 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array#__visit_impl (; 317 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 318 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 319 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 320 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array#__visit_impl (; 321 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 322 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 323 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 324 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (; 325 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl (; 326 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/builtins/__visit_members (; 327 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 327 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block $block$16$break block @@ -22971,7 +22971,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index 710fc46e..ab50eff2 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -1,52 +1,38 @@ (module (type $FUNCSIG$iddd (func (param f64 f64 f64) (result i32))) (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) - (type $FUNCSIG$id (func (param f64) (result i32))) (type $FUNCSIG$idd (func (param f64 f64) (result i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$ifff (func (param f32 f32 f32) (result i32))) (type $FUNCSIG$fff (func (param f32 f32) (result f32))) - (type $FUNCSIG$if (func (param f32) (result i32))) (type $FUNCSIG$iff (func (param f32 f32) (result i32))) (type $FUNCSIG$v (func)) (import "math" "mod" (func $std/mod/mod (param f64 f64) (result f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) - (global $std/mod/js i32 (i32.const 1)) + (data (i32.const 8) "\14\00\00\00\01\00\00\00\10\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) - (func $~lib/builtins/isNaN (; 2 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) - local.get $0 - local.get $0 - f64.ne - ) - (func $~lib/math/NativeMath.mod (; 3 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64) + (func $~lib/math/NativeMath.mod (; 2 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64) (local $2 i64) (local $3 i64) (local $4 i64) (local $5 i64) (local $6 i64) (local $7 i64) - (local $8 f64) - (local $9 i64) - (local $10 i64) + (local $8 i64) local.get $0 i64.reinterpret_f64 - local.set $2 - local.get $1 - i64.reinterpret_f64 - local.set $3 - local.get $2 + local.tee $2 i64.const 52 i64.shr_u i64.const 2047 i64.and local.set $4 - local.get $3 + local.get $1 + i64.reinterpret_f64 + local.tee $3 i64.const 52 i64.shr_u i64.const 2047 @@ -55,12 +41,11 @@ local.get $2 i64.const 63 i64.shr_u - local.set $6 + local.set $7 local.get $3 i64.const 1 i64.shl - local.set $7 - local.get $7 + local.tee $6 i64.const 0 i64.eq if (result i32) @@ -74,103 +59,81 @@ i32.const 1 else local.get $1 - call $~lib/builtins/isNaN + local.get $1 + f64.ne end if local.get $0 local.get $1 f64.mul - local.set $8 - local.get $8 - local.get $8 + local.tee $0 + local.get $0 f64.div return end - local.get $2 - i64.const 1 - i64.shl - local.set $9 - local.get $9 - local.get $7 - i64.le_u - if - local.get $9 - local.get $7 - i64.eq + block $folding-inner0 + local.get $2 + i64.const 1 + i64.shl + local.tee $8 + local.get $6 + i64.le_u if - f64.const 0 + local.get $6 + local.get $8 + i64.eq + br_if $folding-inner0 local.get $0 - f64.mul return end - local.get $0 - return - end - local.get $4 - i64.eqz - if local.get $4 - local.get $2 - i64.const 12 - i64.shl - i64.clz - i64.sub - local.set $4 - local.get $2 - i64.const 0 - local.get $4 - i64.sub - i64.const 1 - i64.add - i64.shl + i64.eqz + if (result i64) + local.get $2 + i64.const 0 + local.get $4 + local.get $2 + i64.const 12 + i64.shl + i64.clz + i64.sub + local.tee $4 + i64.sub + i64.const 1 + i64.add + i64.shl + else + local.get $2 + i64.const 4503599627370495 + i64.and + i64.const 4503599627370496 + i64.or + end local.set $2 - else - local.get $2 - i64.const -1 - i64.const 12 - i64.shr_u - i64.and - local.set $2 - local.get $2 - i64.const 1 - i64.const 52 - i64.shl - i64.or - local.set $2 - end - local.get $5 - i64.eqz - if local.get $5 - local.get $3 - i64.const 12 - i64.shl - i64.clz - i64.sub - local.set $5 - local.get $3 - i64.const 0 - local.get $5 - i64.sub - i64.const 1 - i64.add - i64.shl + i64.eqz + if (result i64) + local.get $3 + i64.const 0 + local.get $5 + local.get $3 + i64.const 12 + i64.shl + i64.clz + i64.sub + local.tee $5 + i64.sub + i64.const 1 + i64.add + i64.shl + else + local.get $3 + i64.const 4503599627370495 + i64.and + i64.const 4503599627370496 + i64.or + end local.set $3 - else - local.get $3 - i64.const -1 - i64.const 12 - i64.shr_u - i64.and - local.set $3 - local.get $3 - i64.const 1 - i64.const 52 - i64.shl - i64.or - local.set $3 - end - block $break|0 loop $continue|0 local.get $4 local.get $5 @@ -183,12 +146,7 @@ local.get $2 local.get $3 i64.eq - if - f64.const 0 - local.get $0 - f64.mul - return - end + br_if $folding-inner0 local.get $2 local.get $3 i64.sub @@ -205,87 +163,76 @@ br $continue|0 end end - end - local.get $2 - local.get $3 - i64.ge_u - if local.get $2 local.get $3 - i64.eq + i64.ge_u if - f64.const 0 - local.get $0 - f64.mul - return + local.get $2 + local.get $3 + i64.eq + br_if $folding-inner0 + local.get $2 + local.get $3 + i64.sub + local.set $2 end local.get $2 + local.get $2 + i64.const 11 + i64.shl + i64.clz + local.tee $3 + i64.shl + local.set $2 + local.get $4 local.get $3 i64.sub - local.set $2 - end - local.get $2 - i64.const 11 - i64.shl - i64.clz - local.set $10 - local.get $4 - local.get $10 - i64.sub - local.set $4 - local.get $2 - local.get $10 - i64.shl - local.set $2 - local.get $4 - i64.const 0 - i64.gt_s - if - local.get $2 - i64.const 1 - i64.const 52 - i64.shl - i64.sub - local.set $2 - local.get $2 - local.get $4 - i64.const 52 + local.tee $3 + i64.const 0 + i64.gt_s + if (result i64) + local.get $2 + i64.const 4503599627370496 + i64.sub + local.get $3 + i64.const 52 + i64.shl + i64.or + else + local.get $2 + i64.const 0 + local.get $3 + i64.sub + i64.const 1 + i64.add + i64.shr_u + end + local.get $7 + i64.const 63 i64.shl i64.or - local.set $2 - else - local.get $2 - i64.const 0 - local.get $4 - i64.sub - i64.const 1 - i64.add - i64.shr_u - local.set $2 + f64.reinterpret_i64 + return end - local.get $2 - local.get $6 - i64.const 63 - i64.shl - i64.or - local.set $2 - local.get $2 - f64.reinterpret_i64 + f64.const 0 + local.get $0 + f64.mul ) - (func $std/mod/check (; 4 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) + (func $std/mod/check (; 3 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32) local.get $1 - call $~lib/builtins/isNaN + local.get $1 + f64.ne if local.get $0 - call $~lib/builtins/isNaN + local.get $0 + f64.ne return end local.get $1 f64.const 0 f64.eq if - i32.const 1 - f64.convert_i32_u + f64.const 1 local.get $1 f64.div f64.const 1 @@ -298,56 +245,41 @@ local.get $1 f64.eq ) - (func $std/mod/test_fmod (; 5 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) + (func $std/mod/test_fmod (; 4 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32) local.get $0 local.get $1 call $~lib/math/NativeMath.mod local.get $2 call $std/mod/check if (result i32) - global.get $std/mod/js - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - call $std/mod/mod - local.get $2 - call $std/mod/check - end + local.get $0 + local.get $1 + call $std/mod/mod + local.get $2 + call $std/mod/check else i32.const 0 end ) - (func $~lib/builtins/isNaN (; 6 ;) (type $FUNCSIG$if) (param $0 f32) (result i32) - local.get $0 - local.get $0 - f32.ne - ) - (func $~lib/math/NativeMathf.mod (; 7 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) + (func $~lib/math/NativeMathf.mod (; 5 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 f32) - (local $9 i32) - (local $10 i32) + (local $8 i32) local.get $0 i32.reinterpret_f32 - local.set $2 - local.get $1 - i32.reinterpret_f32 - local.set $3 - local.get $2 + local.tee $2 i32.const 23 i32.shr_u i32.const 255 i32.and local.set $4 - local.get $3 + local.get $1 + i32.reinterpret_f32 + local.tee $3 i32.const 23 i32.shr_u i32.const 255 @@ -356,122 +288,91 @@ local.get $2 i32.const -2147483648 i32.and - local.set $6 + local.set $7 local.get $3 i32.const 1 i32.shl - local.set $7 - local.get $7 - i32.const 0 - i32.eq + local.tee $6 if (result i32) - i32.const 1 - else local.get $4 i32.const 255 i32.eq + else + i32.const 1 end if (result i32) i32.const 1 else local.get $1 - call $~lib/builtins/isNaN + local.get $1 + f32.ne end if local.get $0 local.get $1 f32.mul - local.set $8 - local.get $8 - local.get $8 + local.tee $0 + local.get $0 f32.div return end - local.get $2 - i32.const 1 - i32.shl - local.set $9 - local.get $9 - local.get $7 - i32.le_u - if - local.get $9 - local.get $7 - i32.eq + block $folding-inner0 + local.get $2 + i32.const 1 + i32.shl + local.tee $8 + local.get $6 + i32.le_u if - f32.const 0 + local.get $6 + local.get $8 + i32.eq + br_if $folding-inner0 local.get $0 - f32.mul return end - local.get $0 - return - end - local.get $4 - i32.eqz - if local.get $4 - local.get $2 - i32.const 9 - i32.shl - i32.clz - i32.sub - local.set $4 - local.get $2 - i32.const 0 - local.get $4 - i32.sub - i32.const 1 - i32.add - i32.shl + if (result i32) + local.get $2 + i32.const 8388607 + i32.and + i32.const 8388608 + i32.or + else + local.get $2 + i32.const 1 + local.get $4 + local.get $2 + i32.const 9 + i32.shl + i32.clz + i32.sub + local.tee $4 + i32.sub + i32.shl + end local.set $2 - else - local.get $2 - i32.const -1 - i32.const 9 - i32.shr_u - i32.and - local.set $2 - local.get $2 - i32.const 1 - i32.const 23 - i32.shl - i32.or - local.set $2 - end - local.get $5 - i32.eqz - if local.get $5 - local.get $3 - i32.const 9 - i32.shl - i32.clz - i32.sub - local.set $5 - local.get $3 - i32.const 0 - local.get $5 - i32.sub - i32.const 1 - i32.add - i32.shl + if (result i32) + local.get $3 + i32.const 8388607 + i32.and + i32.const 8388608 + i32.or + else + local.get $3 + i32.const 1 + local.get $5 + local.get $3 + i32.const 9 + i32.shl + i32.clz + i32.sub + local.tee $5 + i32.sub + i32.shl + end local.set $3 - else - local.get $3 - i32.const -1 - i32.const 9 - i32.shr_u - i32.and - local.set $3 - local.get $3 - i32.const 1 - i32.const 23 - i32.shl - i32.or - local.set $3 - end - block $break|0 loop $continue|0 local.get $4 local.get $5 @@ -484,12 +385,7 @@ local.get $2 local.get $3 i32.eq - if - f32.const 0 - local.get $0 - f32.mul - return - end + br_if $folding-inner0 local.get $2 local.get $3 i32.sub @@ -506,85 +402,72 @@ br $continue|0 end end - end - local.get $2 - local.get $3 - i32.ge_u - if local.get $2 local.get $3 - i32.eq + i32.ge_u if - f32.const 0 - local.get $0 - f32.mul - return + local.get $2 + local.get $3 + i32.eq + br_if $folding-inner0 + local.get $2 + local.get $3 + i32.sub + local.set $2 end local.get $2 + local.get $2 + i32.const 8 + i32.shl + i32.clz + local.tee $3 + i32.shl + local.set $2 + local.get $4 local.get $3 i32.sub - local.set $2 - end - local.get $2 - i32.const 8 - i32.shl - i32.clz - local.set $10 - local.get $4 - local.get $10 - i32.sub - local.set $4 - local.get $2 - local.get $10 - i32.shl - local.set $2 - local.get $4 - i32.const 0 - i32.gt_s - if - local.get $2 - i32.const 1 - i32.const 23 - i32.shl - i32.sub - local.set $2 - local.get $2 - local.get $4 - i32.const 23 - i32.shl - i32.or - local.set $2 - else - local.get $2 + local.tee $3 i32.const 0 - local.get $4 - i32.sub - i32.const 1 - i32.add - i32.shr_u - local.set $2 + i32.gt_s + if (result i32) + local.get $2 + i32.const 8388608 + i32.sub + local.get $3 + i32.const 23 + i32.shl + i32.or + else + local.get $2 + i32.const 1 + local.get $3 + i32.sub + i32.shr_u + end + local.get $7 + i32.or + f32.reinterpret_i32 + return end - local.get $2 - local.get $6 - i32.or - local.set $2 - local.get $2 - f32.reinterpret_i32 + f32.const 0 + local.get $0 + f32.mul ) - (func $std/mod/check (; 8 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) + (func $std/mod/check (; 6 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32) local.get $1 - call $~lib/builtins/isNaN + local.get $1 + f32.ne if local.get $0 - call $~lib/builtins/isNaN + local.get $0 + f32.ne return end local.get $1 f32.const 0 f32.eq if - i32.const 1 - f32.convert_i32_u + f32.const 1 local.get $1 f32.div f32.const 1 @@ -597,14 +480,14 @@ local.get $1 f32.eq ) - (func $std/mod/test_fmodf (; 9 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) + (func $std/mod/test_fmodf (; 7 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32) local.get $0 local.get $1 call $~lib/math/NativeMathf.mod local.get $2 call $std/mod/check ) - (func $start:std/mod (; 10 ;) (type $FUNCSIG$v) + (func $start:std/mod (; 8 ;) (type $FUNCSIG$v) f64.const 3 f64.const 2 f64.const 1 @@ -1282,8 +1165,7 @@ unreachable end f64.const 0 - f64.const inf - f64.neg + f64.const -inf f64.const 0 call $std/mod/test_fmod i32.eqz @@ -1296,8 +1178,7 @@ unreachable end f64.const -0 - f64.const inf - f64.neg + f64.const -inf f64.const -0 call $std/mod/test_fmod i32.eqz @@ -1336,8 +1217,7 @@ unreachable end f64.const 1 - f64.const inf - f64.neg + f64.const -inf f64.const 1 call $std/mod/test_fmod i32.eqz @@ -1350,8 +1230,7 @@ unreachable end f64.const -1 - f64.const inf - f64.neg + f64.const -inf f64.const -1 call $std/mod/test_fmod i32.eqz @@ -1389,8 +1268,7 @@ call $~lib/builtins/abort unreachable end - f64.const inf - f64.neg + f64.const -inf f64.const 0 f64.const nan:0x8000000000000 call $std/mod/test_fmod @@ -1403,8 +1281,7 @@ call $~lib/builtins/abort unreachable end - f64.const inf - f64.neg + f64.const -inf f64.const -0 f64.const nan:0x8000000000000 call $std/mod/test_fmod @@ -1443,8 +1320,7 @@ call $~lib/builtins/abort unreachable end - f64.const inf - f64.neg + f64.const -inf f64.const 1 f64.const nan:0x8000000000000 call $std/mod/test_fmod @@ -1457,8 +1333,7 @@ call $~lib/builtins/abort unreachable end - f64.const inf - f64.neg + f64.const -inf f64.const -1 f64.const nan:0x8000000000000 call $std/mod/test_fmod @@ -1484,8 +1359,7 @@ call $~lib/builtins/abort unreachable end - f64.const inf - f64.neg + f64.const -inf f64.const inf f64.const nan:0x8000000000000 call $std/mod/test_fmod @@ -1499,8 +1373,7 @@ unreachable end f64.const inf - f64.const inf - f64.neg + f64.const -inf f64.const nan:0x8000000000000 call $std/mod/test_fmod i32.eqz @@ -1512,10 +1385,8 @@ call $~lib/builtins/abort unreachable end - f64.const inf - f64.neg - f64.const inf - f64.neg + f64.const -inf + f64.const -inf f64.const nan:0x8000000000000 call $std/mod/test_fmod i32.eqz @@ -1540,8 +1411,7 @@ call $~lib/builtins/abort unreachable end - f64.const inf - f64.neg + f64.const -inf f64.const nan:0x8000000000000 f64.const nan:0x8000000000000 call $std/mod/test_fmod @@ -1568,8 +1438,7 @@ unreachable end f64.const nan:0x8000000000000 - f64.const inf - f64.neg + f64.const -inf f64.const nan:0x8000000000000 call $std/mod/test_fmod i32.eqz @@ -2089,8 +1958,7 @@ unreachable end f32.const 0 - f32.const inf - f32.neg + f32.const -inf f32.const 0 call $std/mod/test_fmodf i32.eqz @@ -2103,8 +1971,7 @@ unreachable end f32.const -0 - f32.const inf - f32.neg + f32.const -inf f32.const -0 call $std/mod/test_fmodf i32.eqz @@ -2143,8 +2010,7 @@ unreachable end f32.const 1 - f32.const inf - f32.neg + f32.const -inf f32.const 1 call $std/mod/test_fmodf i32.eqz @@ -2157,8 +2023,7 @@ unreachable end f32.const -1 - f32.const inf - f32.neg + f32.const -inf f32.const -1 call $std/mod/test_fmodf i32.eqz @@ -2196,8 +2061,7 @@ call $~lib/builtins/abort unreachable end - f32.const inf - f32.neg + f32.const -inf f32.const 0 f32.const nan:0x400000 call $std/mod/test_fmodf @@ -2210,8 +2074,7 @@ call $~lib/builtins/abort unreachable end - f32.const inf - f32.neg + f32.const -inf f32.const -0 f32.const nan:0x400000 call $std/mod/test_fmodf @@ -2250,8 +2113,7 @@ call $~lib/builtins/abort unreachable end - f32.const inf - f32.neg + f32.const -inf f32.const 1 f32.const nan:0x400000 call $std/mod/test_fmodf @@ -2264,8 +2126,7 @@ call $~lib/builtins/abort unreachable end - f32.const inf - f32.neg + f32.const -inf f32.const -1 f32.const nan:0x400000 call $std/mod/test_fmodf @@ -2291,8 +2152,7 @@ call $~lib/builtins/abort unreachable end - f32.const inf - f32.neg + f32.const -inf f32.const inf f32.const nan:0x400000 call $std/mod/test_fmodf @@ -2306,8 +2166,7 @@ unreachable end f32.const inf - f32.const inf - f32.neg + f32.const -inf f32.const nan:0x400000 call $std/mod/test_fmodf i32.eqz @@ -2319,10 +2178,8 @@ call $~lib/builtins/abort unreachable end - f32.const inf - f32.neg - f32.const inf - f32.neg + f32.const -inf + f32.const -inf f32.const nan:0x400000 call $std/mod/test_fmodf i32.eqz @@ -2347,8 +2204,7 @@ call $~lib/builtins/abort unreachable end - f32.const inf - f32.neg + f32.const -inf f32.const nan:0x400000 f32.const nan:0x400000 call $std/mod/test_fmodf @@ -2375,8 +2231,7 @@ unreachable end f32.const nan:0x400000 - f32.const inf - f32.neg + f32.const -inf f32.const nan:0x400000 call $std/mod/test_fmodf i32.eqz @@ -2389,9 +2244,10 @@ unreachable end ) - (func $start (; 11 ;) (type $FUNCSIG$v) + (func $start (; 9 ;) (type $FUNCSIG$v) call $start:std/mod ) - (func $null (; 12 ;) (type $FUNCSIG$v) + (func $null (; 10 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 87ae76e2..bd96d9f0 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -4,9 +4,9 @@ (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iij (func (param i32 i64) (result i32))) (type $FUNCSIG$ij (func (param i64) (result i32))) (type $FUNCSIG$iiji (func (param i32 i64 i32) (result i32))) @@ -17,1639 +17,241 @@ (type $FUNCSIG$iid (func (param i32 f64) (result i32))) (type $FUNCSIG$iidi (func (param i32 f64 i32) (result i32))) (type $FUNCSIG$vid (func (param i32 f64))) + (type $FUNCSIG$i (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) (memory $0 1) - (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") - (data (i32.const 112) "\1e\00\00\00\01\00\00\00\10\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 160) "(\00\00\00\01\00\00\00\10\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 216) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00") - (data (i32.const 256) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 312) "$\00\00\00\01\00\00\00\10\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 368) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 424) "\1a\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data (i32.const 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s") + (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 200) "(\00\00\00\01\00\00\00\10\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 256) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") + (data (i32.const 304) "$\00\00\00\01\00\00\00\10\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 360) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 400) "\1a\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a") (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 424)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 640)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $start) - (func $~lib/rt/tlsf/removeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/memory/memory.fill (; 4 ;) (type $FUNCSIG$vii) (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 128 - i32.const 275 - 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 128 - i32.const 277 - 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 128 - i32.const 290 - 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 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.1 - 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 - end - local.get $7 - i32.eqz - if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 - 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 (; 5 ;) (type $FUNCSIG$vii) (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 128 - i32.const 203 - 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 128 - i32.const 205 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 - i32.load - local.set $5 - end - end - local.get $2 - i32.const 2 - i32.and - if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 - i32.load - local.set $6 - local.get $6 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 226 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $6 - 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 $3 - call $~lib/rt/tlsf/removeBlock - local.get $3 - local.get $6 - i32.const 3 - i32.and - local.get $7 - i32.or - local.tee $2 - i32.store - local.get $3 - 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 128 - i32.const 241 - 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 128 - i32.const 242 - 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 128 - i32.const 258 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - 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 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $9 - i32.shl - i32.or - i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end - ) - (func $~lib/rt/tlsf/addMemory (; 6 ;) (type $FUNCSIG$iiii) (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 128 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 128 - i32.const 394 - 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 128 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 7 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 176 - i32.const 128 - i32.const 446 - 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 (; 9 ;) (type $FUNCSIG$iii) (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 128 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 11 ;) (type $FUNCSIG$viii) (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 128 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 128 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.fill (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i64) block $~lib/util/memory/memset|inlined.0 - local.get $0 - local.set $5 local.get $1 - local.set $4 - local.get $2 - local.set $3 - local.get $3 i32.eqz - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 - local.get $4 + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 i32.store8 - local.get $5 - local.get $3 + local.get $0 + local.get $1 i32.add i32.const 1 i32.sub - local.get $4 + i32.const 0 i32.store8 - local.get $3 + local.get $1 i32.const 2 i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 i32.const 1 i32.add - local.get $4 + i32.const 0 i32.store8 - local.get $5 + local.get $0 i32.const 2 i32.add - local.get $4 + i32.const 0 i32.store8 - local.get $5 - local.get $3 + local.get $0 + local.get $1 i32.add + local.tee $2 i32.const 2 i32.sub - local.get $4 + i32.const 0 i32.store8 - local.get $5 - local.get $3 - i32.add + local.get $2 i32.const 3 i32.sub - local.get $4 + i32.const 0 i32.store8 - local.get $3 + local.get $1 i32.const 6 i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 i32.const 3 i32.add - local.get $4 + i32.const 0 i32.store8 - local.get $5 - local.get $3 + local.get $0 + local.get $1 i32.add i32.const 4 i32.sub - local.get $4 + i32.const 0 i32.store8 - local.get $3 + local.get $1 i32.const 8 i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end + br_if $~lib/util/memory/memset|inlined.0 + local.get $1 i32.const 0 - local.get $5 + local.get $0 i32.sub i32.const 3 i32.and - local.set $6 - local.get $5 - local.get $6 - i32.add - local.set $5 - local.get $3 - local.get $6 + local.tee $1 i32.sub - local.set $3 - local.get $3 + local.set $2 + local.get $0 + local.get $1 + i32.add + local.tee $0 + i32.const 0 + i32.store + local.get $2 i32.const -4 i32.and - local.set $3 - i32.const -1 - i32.const 255 - i32.div_u - local.get $4 - i32.const 255 - i32.and - i32.mul - local.set $7 - local.get $5 - local.get $7 - i32.store - local.get $5 - local.get $3 + local.tee $1 + local.get $0 i32.add i32.const 4 i32.sub - local.get $7 + i32.const 0 i32.store - local.get $3 + local.get $1 i32.const 8 i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 i32.const 4 i32.add - local.get $7 + i32.const 0 i32.store - local.get $5 + local.get $0 i32.const 8 i32.add - local.get $7 + i32.const 0 i32.store - local.get $5 - local.get $3 + local.get $0 + local.get $1 i32.add + local.tee $2 i32.const 12 i32.sub - local.get $7 + i32.const 0 i32.store - local.get $5 - local.get $3 - i32.add + local.get $2 i32.const 8 i32.sub - local.get $7 + i32.const 0 i32.store - local.get $3 + local.get $1 i32.const 24 i32.le_u - if - br $~lib/util/memory/memset|inlined.0 - end - local.get $5 + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 i32.const 12 i32.add - local.get $7 + i32.const 0 i32.store - local.get $5 + local.get $0 i32.const 16 i32.add - local.get $7 + i32.const 0 i32.store - local.get $5 + local.get $0 i32.const 20 i32.add - local.get $7 + i32.const 0 i32.store - local.get $5 + local.get $0 i32.const 24 i32.add - local.get $7 + i32.const 0 i32.store - local.get $5 - local.get $3 + local.get $0 + local.get $1 i32.add + local.tee $2 i32.const 28 i32.sub - local.get $7 + i32.const 0 i32.store - local.get $5 - local.get $3 - i32.add + local.get $2 i32.const 24 i32.sub - local.get $7 + i32.const 0 i32.store - local.get $5 - local.get $3 - i32.add + local.get $2 i32.const 20 i32.sub - local.get $7 + i32.const 0 i32.store - local.get $5 - local.get $3 - i32.add + local.get $2 i32.const 16 i32.sub - local.get $7 + i32.const 0 i32.store - i32.const 24 - local.get $5 + local.get $0 i32.const 4 i32.and + i32.const 24 i32.add - local.set $6 - local.get $5 - local.get $6 + local.tee $2 + local.get $0 i32.add - local.set $5 - local.get $3 - local.get $6 + local.set $0 + local.get $1 + local.get $2 i32.sub - local.set $3 - local.get $7 - i64.extend_i32_u - local.get $7 - i64.extend_i32_u - i64.const 32 - i64.shl - i64.or - local.set $8 - block $break|0 - loop $continue|0 - local.get $3 + local.set $1 + loop $continue|0 + local.get $1 + i32.const 32 + i32.ge_u + if + local.get $0 + i64.const 0 + i64.store + local.get $0 + i32.const 8 + i32.add + i64.const 0 + i64.store + local.get $0 + i32.const 16 + i32.add + i64.const 0 + i64.store + local.get $0 + i32.const 24 + i32.add + i64.const 0 + i64.store + local.get $1 i32.const 32 - i32.ge_u - if - local.get $5 - local.get $8 - i64.store - local.get $5 - i32.const 8 - i32.add - local.get $8 - i64.store - local.get $5 - i32.const 16 - i32.add - local.get $8 - i64.store - local.get $5 - i32.const 24 - i32.add - local.get $8 - i64.store - local.get $3 - i32.const 32 - i32.sub - local.set $3 - local.get $5 - i32.const 32 - i32.add - local.set $5 - br $continue|0 - end + i32.sub + local.set $1 + local.get $0 + i32.const 32 + i32.add + local.set $0 + br $continue|0 end end end ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/arraybuffer/ArrayBuffer#constructor (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 1073741808 i32.gt_u if @@ -1660,45 +262,32 @@ call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 15 call $~lib/rt/tlsf/__alloc - local.set $2 - local.get $2 - i32.const 0 - local.get $1 - call $~lib/memory/memory.fill - local.get $2 - call $~lib/rt/purerc/__retain - ) - (func $~lib/set/Set#clear (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + local.get $0 + call $~lib/memory/memory.fill + local.get $1 + call $~lib/rt/pure/__retain + ) + (func $~lib/set/Set#clear (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.load + call $~lib/rt/pure/__release + local.get $0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + i32.const 3 i32.store offset=4 local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $0 + i32.const 32 + call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 local.get $0 i32.const 4 @@ -1710,118 +299,94 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 17 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end + (func $~lib/set/Set#constructor (; 7 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 17 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash8 (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - i32.const -2128831035 - local.get $0 - i32.xor - i32.const 16777619 - i32.mul - ) - (func $~lib/set/Set#find (; 19 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/set/Set#find (; 8 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.load - local.get $2 local.get $0 i32.load offset=4 + local.get $2 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=4 - i32.const 1 + local.set $0 + loop $continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load8_u + local.get $1 + i32.const 255 i32.and - i32.eqz - if (result i32) - local.get $3 - i32.load8_s - local.get $1 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - i32.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=4 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 + i32.eq end + if + local.get $0 + return + end + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $continue|0 end end i32.const 0 ) - (func $~lib/set/Set#has (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/set/Set#has (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.0 - end + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul call $~lib/set/Set#find i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -1829,160 +394,127 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) local.get $1 i32.const 1 i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul + local.tee $2 + i32.const 2 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 + local.set $4 local.get $2 f64.convert_i32_s f64.const 2.6666666666666665 f64.mul i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.mul + local.tee $6 + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 local.get $0 i32.load offset=8 - local.set $6 - local.get $6 + local.tee $3 local.get $0 i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 8 - end - i32.mul + i32.const 3 + i32.shl 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 + local.set $2 + loop $continue|0 + local.get $3 + local.get $7 + i32.ne + if + local.get $3 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=4 - i32.const 1 + local.get $2 + local.get $3 + i32.load8_s + i32.store8 + local.get $2 + local.get $3 + i32.load8_s + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $1 i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - i32.load8_s - i32.store8 - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - i32.load8_s - local.set $11 - local.get $11 - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.2 - end - local.get $1 - i32.and - local.set $11 - local.get $3 - local.get $11 - i32.const 4 - i32.mul - i32.add - local.set $12 - local.get $10 - local.get $12 - i32.load - i32.store offset=4 - local.get $12 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 8 - end - i32.add - local.set $8 - end - local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 8 - end + i32.const 2 + i32.shl + local.get $4 i32.add - local.set $6 - br $continue|0 + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 8 + i32.add + local.set $2 end + local.get $3 + i32.const 8 + i32.add + local.set $3 + br $continue|0 end end local.get $0 - local.tee $9 - local.get $3 - local.get $9 + local.get $4 + local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $9 local.get $5 - local.get $9 + local.get $0 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 - local.get $4 + local.get $6 i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.1 - end + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.tee $2 local.set $3 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#find - local.set $4 - local.get $4 i32.eqz if local.get $0 @@ -2016,23 +548,20 @@ end local.get $0 i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $2 - i32.const 1 - i32.add - i32.store offset=16 - local.get $2 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 8 - end - i32.mul + local.set $2 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 i32.add - local.set $4 + i32.store offset=16 local.get $4 + i32.const 3 + i32.shl + local.get $2 + i32.add + local.tee $2 local.get $1 i32.store8 local.get $0 @@ -2041,57 +570,45 @@ i32.const 1 i32.add i32.store offset=20 + local.get $2 local.get $0 i32.load - local.get $3 local.get $0 i32.load offset=4 + local.get $3 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add - local.set $2 - local.get $4 - local.get $2 + local.tee $0 i32.load i32.store offset=4 + local.get $0 local.get $2 - local.get $4 i32.store end ) - (func $~lib/set/Set#get:size (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 24 - i32.shl - i32.const 24 - i32.shr_s - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.3 - end + local.get $1 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul call $~lib/set/Set#find - local.set $3 - local.get $3 + local.tee $1 i32.eqz if - i32.const 0 return end - local.get $3 - local.get $3 + local.get $1 + local.get $1 i32.load offset=4 i32.const 1 i32.or @@ -2106,17 +623,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 - local.get $4 + local.tee $2 i32.const 1 i32.add i32.const 4 - local.tee $2 local.get $0 i32.load offset=20 - local.tee $5 - local.get $2 - local.get $5 + local.tee $1 + i32.const 4 + local.get $1 i32.gt_u select i32.ge_u @@ -2135,319 +650,274 @@ end if local.get $0 - local.get $4 + local.get $2 call $~lib/set/Set#rehash end - i32.const 1 ) - (func $std/set/testNumeric (; 25 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 13 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) - i32.const 0 call $~lib/set/Set#constructor - local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $repeat|0 + local.set $1 + loop $repeat|0 + local.get $0 + i32.const 100 + i32.lt_s + if local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $repeat|1 + i32.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + i32.const 100 + i32.lt_s + if local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - i32.const 0 - local.set $1 - loop $repeat|2 + i32.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + i32.const 50 + i32.lt_s + if local.get $1 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|2 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|2 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $1 - loop $repeat|3 + i32.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + i32.const 50 + i32.lt_s + if local.get $1 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|3 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 + local.get $1 call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz + local.get $1 + i32.load offset=20 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/purerc/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + (func $~lib/set/Set#constructor (; 14 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 18 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + i32.const 0 i32.store offset=4 local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + i32.const 0 i32.store offset=8 local.get $0 - i32.const 4 + i32.const 0 i32.store offset=12 local.get $0 i32.const 0 @@ -2455,108 +925,25 @@ local.get $0 i32.const 0 i32.store offset=20 - ) - (func $~lib/set/Set#constructor (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 18 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end - call $~lib/set/Set#clear + local.get $0 + call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - local.get $0 - i32.load - local.get $2 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i32.load8_u - local.get $1 - i32.const 255 - i32.and - i32.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=4 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 - end - end - end - i32.const 0 - ) - (func $~lib/set/Set#has (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/set/Set#has (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.0 - end - call $~lib/set/Set#find + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2564,158 +951,125 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) local.get $1 i32.const 1 i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul + local.tee $2 + i32.const 2 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 + local.set $4 local.get $2 f64.convert_i32_s f64.const 2.6666666666666665 f64.mul i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.mul + local.tee $6 + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 local.get $0 i32.load offset=8 - local.set $6 - local.get $6 + local.tee $3 local.get $0 i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 8 - end - i32.mul + i32.const 3 + i32.shl 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 + local.set $2 + loop $continue|0 + local.get $3 + local.get $7 + i32.ne + if + local.get $3 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=4 - i32.const 1 + local.get $2 + local.get $3 + i32.load8_u + i32.store8 + local.get $2 + local.get $3 + i32.load8_u + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $1 i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - i32.load8_u - i32.store8 - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - i32.load8_u - local.set $11 - local.get $11 - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.2 - end - local.get $1 - i32.and - local.set $11 - local.get $3 - local.get $11 - i32.const 4 - i32.mul - i32.add - local.set $12 - local.get $10 - local.get $12 - i32.load - i32.store offset=4 - local.get $12 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 8 - end - i32.add - local.set $8 - end - local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 8 - end + i32.const 2 + i32.shl + local.get $4 i32.add - local.set $6 - br $continue|0 + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $2 + i32.store + local.get $2 + i32.const 8 + i32.add + local.set $2 end + local.get $3 + i32.const 8 + i32.add + local.set $3 + br $continue|0 end end local.get $0 - local.tee $9 - local.get $3 - local.get $9 + local.get $4 + local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $9 local.get $5 - local.get $9 + local.get $0 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 - local.get $4 + local.get $6 i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.1 - end + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.tee $2 local.set $3 local.get $0 local.get $1 - local.get $3 - call $~lib/set/Set#find - local.set $4 - local.get $4 + local.get $2 + call $~lib/set/Set#find i32.eqz if local.get $0 @@ -2749,23 +1103,20 @@ end local.get $0 i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $2 - i32.const 1 - i32.add - i32.store offset=16 - local.get $2 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 8 - end - i32.mul + local.set $2 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 i32.add - local.set $4 + i32.store offset=16 local.get $4 + i32.const 3 + i32.shl + local.get $2 + i32.add + local.tee $2 local.get $1 i32.store8 local.get $0 @@ -2774,55 +1125,43 @@ i32.const 1 i32.add i32.store offset=20 + local.get $2 local.get $0 i32.load - local.get $3 local.get $0 i32.load offset=4 + local.get $3 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add - local.set $2 - local.get $4 - local.get $2 + local.tee $0 i32.load i32.store offset=4 + local.get $0 local.get $2 - local.get $4 i32.store end ) - (func $~lib/set/Set#get:size (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 255 - i32.and - call $~lib/util/hash/hash8 - br $~lib/util/hash/HASH|inlined.3 - end - call $~lib/set/Set#find - local.set $3 - local.get $3 + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find + local.tee $1 i32.eqz if - i32.const 0 return end - local.get $3 - local.get $3 + local.get $1 + local.get $1 i32.load offset=4 i32.const 1 i32.or @@ -2837,17 +1176,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 - local.get $4 + local.tee $2 i32.const 1 i32.add i32.const 4 - local.tee $2 local.get $0 i32.load offset=20 - local.tee $5 - local.get $2 - local.get $5 + local.tee $1 + i32.const 4 + local.get $1 i32.gt_u select i32.ge_u @@ -2866,319 +1203,274 @@ end if local.get $0 - local.get $4 + local.get $2 call $~lib/set/Set#rehash end - i32.const 1 ) - (func $std/set/testNumeric (; 34 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 19 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) - i32.const 0 call $~lib/set/Set#constructor - local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $repeat|0 + local.set $1 + loop $repeat|0 + local.get $0 + i32.const 100 + i32.lt_u + if local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $repeat|1 + i32.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + i32.const 100 + i32.lt_u + if local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - i32.const 0 - local.set $1 - loop $repeat|2 + i32.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + i32.const 50 + i32.lt_u + if local.get $1 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|2 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|2 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $1 - loop $repeat|3 + i32.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + i32.const 50 + i32.lt_u + if local.get $1 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|3 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/purerc/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 35 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + (func $~lib/set/Set#constructor (; 20 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 19 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + i32.const 0 i32.store offset=4 local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + i32.const 0 i32.store offset=8 local.get $0 - i32.const 4 + i32.const 0 i32.store offset=12 local.get $0 i32.const 0 @@ -3186,134 +1478,79 @@ local.get $0 i32.const 0 i32.store offset=20 + local.get $0 + call $~lib/set/Set#clear + local.get $0 ) - (func $~lib/set/Set#constructor (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) + (func $~lib/set/Set#find (; 21 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=4 + local.get $2 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + loop $continue|0 local.get $0 - i32.eqz if - i32.const 24 - i32.const 19 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + local.get $0 + i32.load offset=4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load16_u + local.get $1 + i32.const 65535 + i32.and + i32.eq + end + if + local.get $0 + return + end + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and local.set $0 + br $continue|0 end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 end - call $~lib/set/Set#clear - local.get $0 + i32.const 0 ) - (func $~lib/util/hash/hash16 (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - i32.const -2128831035 - local.set $1 - local.get $1 + (func $~lib/set/Set#has (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 + local.get $1 + local.get $1 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + local.tee $0 i32.const 255 i32.and + i32.const -2128831035 i32.xor i32.const 16777619 i32.mul - local.set $1 - local.get $1 local.get $0 i32.const 8 i32.shr_u i32.xor i32.const 16777619 i32.mul - local.set $1 - local.get $1 - ) - (func $~lib/set/Set#find (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - local.get $0 - i32.load - local.get $2 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i32.load16_s - local.get $1 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - i32.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=4 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 - end - end - end - i32.const 0 - ) - (func $~lib/set/Set#has (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.0 - end call $~lib/set/Set#find i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 40 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3321,160 +1558,145 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) local.get $1 i32.const 1 i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul + local.tee $2 + i32.const 2 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 + local.set $4 local.get $2 f64.convert_i32_s f64.const 2.6666666666666665 f64.mul i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.mul + local.tee $7 + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 local.get $0 i32.load offset=8 - local.set $6 - local.get $6 + local.tee $3 local.get $0 i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 8 - end - i32.mul + i32.const 3 + i32.shl 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 + local.get $5 + local.set $2 + loop $continue|0 + local.get $3 + local.get $8 + i32.ne + if + local.get $3 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=4 - i32.const 1 + local.get $2 + local.get $3 + i32.load16_s + i32.store16 + local.get $2 + local.get $3 + i32.load16_s + local.tee $6 + i32.const 255 i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - i32.load16_s - i32.store16 - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - i32.load16_s - local.set $11 - local.get $11 - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.2 - end - local.get $1 - i32.and - local.set $11 - local.get $3 - local.get $11 - i32.const 4 - i32.mul - i32.add - local.set $12 - local.get $10 - local.get $12 - i32.load - i32.store offset=4 - local.get $12 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 8 - end - i32.add - local.set $8 - end + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 8 - end + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.and + i32.const 2 + i32.shl + local.get $4 i32.add - local.set $6 - br $continue|0 + local.tee $6 + i32.load + i32.store offset=4 + local.get $6 + local.get $2 + i32.store + local.get $2 + i32.const 8 + i32.add + local.set $2 end + local.get $3 + i32.const 8 + i32.add + local.set $3 + br $continue|0 end end local.get $0 - local.tee $9 - local.get $3 - local.get $9 + local.get $4 + local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $9 local.get $5 - local.get $9 + local.get $0 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 - local.get $4 + local.get $7 i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 41 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.1 - end + local.get $1 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + local.tee $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $2 + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + local.tee $2 local.set $3 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#find - local.set $4 - local.get $4 i32.eqz if local.get $0 @@ -3508,23 +1730,20 @@ end local.get $0 i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $2 - i32.const 1 - i32.add - i32.store offset=16 - local.get $2 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 8 - end - i32.mul + local.set $2 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 i32.add - local.set $4 + i32.store offset=16 local.get $4 + i32.const 3 + i32.shl + local.get $2 + i32.add + local.tee $2 local.get $1 i32.store16 local.get $0 @@ -3533,57 +1752,54 @@ i32.const 1 i32.add i32.store offset=20 + local.get $2 local.get $0 i32.load - local.get $3 local.get $0 i32.load offset=4 + local.get $3 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add - local.set $2 - local.get $4 - local.get $2 + local.tee $0 i32.load i32.store offset=4 + local.get $0 local.get $2 - local.get $4 i32.store end ) - (func $~lib/set/Set#get:size (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 16 - i32.shl - i32.const 16 - i32.shr_s - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.3 - end + local.get $1 + i32.const 16 + i32.shl + i32.const 16 + i32.shr_s + local.tee $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul call $~lib/set/Set#find - local.set $3 - local.get $3 + local.tee $1 i32.eqz if - i32.const 0 return end - local.get $3 - local.get $3 + local.get $1 + local.get $1 i32.load offset=4 i32.const 1 i32.or @@ -3598,17 +1814,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 - local.get $4 + local.tee $2 i32.const 1 i32.add i32.const 4 - local.tee $2 local.get $0 i32.load offset=20 - local.tee $5 - local.get $2 - local.get $5 + local.tee $1 + i32.const 4 + local.get $1 i32.gt_u select i32.ge_u @@ -3627,319 +1841,274 @@ end if local.get $0 - local.get $4 + local.get $2 call $~lib/set/Set#rehash end - i32.const 1 ) - (func $std/set/testNumeric (; 44 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 26 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) - i32.const 0 call $~lib/set/Set#constructor - local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $repeat|0 + local.set $1 + loop $repeat|0 + local.get $0 + i32.const 100 + i32.lt_s + if local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $repeat|1 + i32.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + i32.const 100 + i32.lt_s + if local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - i32.const 0 - local.set $1 - loop $repeat|2 + i32.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + i32.const 50 + i32.lt_s + if local.get $1 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|2 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|2 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $1 - loop $repeat|3 + i32.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + i32.const 50 + i32.lt_s + if local.get $1 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|3 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/purerc/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 45 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + (func $~lib/set/Set#constructor (; 27 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 20 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + i32.const 0 i32.store offset=4 local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + i32.const 0 i32.store offset=8 local.get $0 - i32.const 4 + i32.const 0 i32.store offset=12 local.get $0 i32.const 0 @@ -3947,108 +2116,34 @@ local.get $0 i32.const 0 i32.store offset=20 - ) - (func $~lib/set/Set#constructor (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 20 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end - call $~lib/set/Set#clear + local.get $0 + call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - local.get $0 - i32.load - local.get $2 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i32.load16_u - local.get $1 - i32.const 65535 - i32.and - i32.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=4 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 - end - end - end - i32.const 0 - ) - (func $~lib/set/Set#has (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/set/Set#has (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.0 - end - call $~lib/set/Set#find + local.get $1 + i32.const 65535 + i32.and + local.tee $0 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $0 + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 49 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4056,158 +2151,143 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) local.get $1 i32.const 1 i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul + local.tee $2 + i32.const 2 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 + local.set $4 local.get $2 f64.convert_i32_s f64.const 2.6666666666666665 f64.mul i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.mul + local.tee $7 + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 local.get $0 i32.load offset=8 - local.set $6 - local.get $6 + local.tee $3 local.get $0 i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 8 - end - i32.mul + i32.const 3 + i32.shl 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 + local.get $5 + local.set $2 + loop $continue|0 + local.get $3 + local.get $8 + i32.ne + if + local.get $3 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=4 - i32.const 1 + local.get $2 + local.get $3 + i32.load16_u + i32.store16 + local.get $2 + local.get $3 + i32.load16_u + local.tee $6 + i32.const 255 i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - i32.load16_u - i32.store16 - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - i32.load16_u - local.set $11 - local.get $11 - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.2 - end - local.get $1 - i32.and - local.set $11 - local.get $3 - local.get $11 - i32.const 4 - i32.mul - i32.add - local.set $12 - local.get $10 - local.get $12 - i32.load - i32.store offset=4 - local.get $12 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 8 - end - i32.add - local.set $8 - end + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 8 - end + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.and + i32.const 2 + i32.shl + local.get $4 i32.add - local.set $6 - br $continue|0 + local.tee $6 + i32.load + i32.store offset=4 + local.get $6 + local.get $2 + i32.store + local.get $2 + i32.const 8 + i32.add + local.set $2 end + local.get $3 + i32.const 8 + i32.add + local.set $3 + br $continue|0 end end local.get $0 - local.tee $9 - local.get $3 - local.get $9 + local.get $4 + local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $9 local.get $5 - local.get $9 + local.get $0 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 - local.get $4 + local.get $7 i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 50 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.1 - end + local.get $1 + i32.const 65535 + i32.and + local.tee $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $2 + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + local.tee $2 local.set $3 local.get $0 local.get $1 - local.get $3 - call $~lib/set/Set#find - local.set $4 - local.get $4 + local.get $2 + call $~lib/set/Set#find i32.eqz if local.get $0 @@ -4241,23 +2321,20 @@ end local.get $0 i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $2 - i32.const 1 - i32.add - i32.store offset=16 - local.get $2 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 8 - end - i32.mul + local.set $2 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 i32.add - local.set $4 + i32.store offset=16 local.get $4 + i32.const 3 + i32.shl + local.get $2 + i32.add + local.tee $2 local.get $1 i32.store16 local.get $0 @@ -4266,55 +2343,52 @@ i32.const 1 i32.add i32.store offset=20 + local.get $2 local.get $0 i32.load - local.get $3 local.get $0 i32.load offset=4 + local.get $3 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add - local.set $2 - local.get $4 - local.get $2 + local.tee $0 i32.load i32.store offset=4 + local.get $0 local.get $2 - local.get $4 i32.store end ) - (func $~lib/set/Set#get:size (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 52 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.const 65535 - i32.and - call $~lib/util/hash/hash16 - br $~lib/util/hash/HASH|inlined.3 - end - call $~lib/set/Set#find - local.set $3 - local.get $3 + local.get $1 + i32.const 65535 + i32.and + local.tee $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 8 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find + local.tee $1 i32.eqz if - i32.const 0 return end - local.get $3 - local.get $3 + local.get $1 + local.get $1 i32.load offset=4 i32.const 1 i32.or @@ -4329,17 +2403,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 - local.get $4 + local.tee $2 i32.const 1 i32.add i32.const 4 - local.tee $2 local.get $0 i32.load offset=20 - local.tee $5 - local.get $2 - local.get $5 + local.tee $1 + i32.const 4 + local.get $1 i32.gt_u select i32.ge_u @@ -4358,319 +2430,274 @@ end if local.get $0 - local.get $4 + local.get $2 call $~lib/set/Set#rehash end - i32.const 1 ) - (func $std/set/testNumeric (; 53 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 32 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) - i32.const 0 call $~lib/set/Set#constructor - local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $repeat|0 + local.set $1 + loop $repeat|0 + local.get $0 + i32.const 100 + i32.lt_u + if local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $repeat|1 + i32.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + i32.const 100 + i32.lt_u + if local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - i32.const 0 - local.set $1 - loop $repeat|2 + i32.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + i32.const 50 + i32.lt_u + if local.get $1 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|2 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|2 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $1 - loop $repeat|3 + i32.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + i32.const 50 + i32.lt_u + if local.get $1 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|3 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/purerc/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 54 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + (func $~lib/set/Set#constructor (; 33 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 21 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + i32.const 0 i32.store offset=4 local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + i32.const 0 i32.store offset=8 local.get $0 - i32.const 4 + i32.const 0 i32.store offset=12 local.get $0 i32.const 0 @@ -4678,54 +2705,18 @@ local.get $0 i32.const 0 i32.store offset=20 - ) - (func $~lib/set/Set#constructor (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 21 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end - call $~lib/set/Set#clear + local.get $0 + call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash32 (; 56 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - i32.const -2128831035 - local.set $1 - local.get $1 + (func $~lib/util/hash/hash32 (; 34 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 255 i32.and + i32.const -2128831035 i32.xor i32.const 16777619 i32.mul - local.set $1 - local.get $1 local.get $0 i32.const 8 i32.shr_u @@ -4734,8 +2725,6 @@ i32.xor i32.const 16777619 i32.mul - local.set $1 - local.get $1 local.get $0 i32.const 16 i32.shr_u @@ -4744,80 +2733,64 @@ i32.xor i32.const 16777619 i32.mul - local.set $1 - local.get $1 local.get $0 i32.const 24 i32.shr_u i32.xor i32.const 16777619 i32.mul - local.set $1 - local.get $1 ) - (func $~lib/set/Set#find (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/set/Set#find (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $0 i32.load - local.get $2 local.get $0 i32.load offset=4 + local.get $2 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i32.load - local.get $1 - i32.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=4 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 + local.set $0 + loop $continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i32.load + local.get $1 + i32.eq end + if + local.get $0 + return + end + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $continue|0 end end i32.const 0 ) - (func $~lib/set/Set#has (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/set/Set#has (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.0 - end + local.get $1 + call $~lib/util/hash/hash32 call $~lib/set/Set#find i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 59 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 37 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4825,156 +2798,115 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) local.get $1 i32.const 1 i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul + local.tee $2 + i32.const 2 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 + local.set $4 local.get $2 f64.convert_i32_s f64.const 2.6666666666666665 f64.mul i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.mul + local.tee $6 + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 local.get $0 i32.load offset=8 - local.set $6 - local.get $6 + local.tee $2 local.get $0 i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 8 - end - i32.mul + i32.const 3 + i32.shl 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 + local.set $3 + loop $continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=4 - i32.const 1 + local.get $3 + local.get $2 + i32.load + i32.store + local.get $3 + local.get $2 + i32.load + call $~lib/util/hash/hash32 + local.get $1 i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - i32.load - i32.store - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - i32.load - local.set $11 - local.get $11 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.2 - end - local.get $1 - i32.and - local.set $11 - local.get $3 - local.get $11 - i32.const 4 - i32.mul - i32.add - local.set $12 - local.get $10 - local.get $12 - i32.load - i32.store offset=4 - local.get $12 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 8 - end - i32.add - local.set $8 - end - local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 8 - end + i32.const 2 + i32.shl + local.get $4 i32.add - local.set $6 - br $continue|0 + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $3 + i32.store + local.get $3 + i32.const 8 + i32.add + local.set $3 end + local.get $2 + i32.const 8 + i32.add + local.set $2 + br $continue|0 end end local.get $0 - local.tee $9 - local.get $3 - local.get $9 + local.get $4 + local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $9 local.get $5 - local.get $9 + local.get $0 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 - local.get $4 + local.get $6 i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 60 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 38 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.1 - end - local.set $3 local.get $0 local.get $1 - local.get $3 + local.get $1 + call $~lib/util/hash/hash32 + local.tee $3 call $~lib/set/Set#find - local.set $4 - local.get $4 i32.eqz if local.get $0 @@ -5008,746 +2940,20 @@ end local.get $0 i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $2 - i32.const 1 - i32.add - i32.store offset=16 - local.get $2 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 8 - end - i32.mul - i32.add - local.set $4 - local.get $4 - local.get $1 - i32.store - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.add - i32.store offset=20 - local.get $0 - i32.load - local.get $3 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add local.set $2 - local.get $4 - local.get $2 - i32.load - i32.store offset=4 - local.get $2 - local.get $4 - i32.store - end - ) - (func $~lib/set/Set#get:size (; 61 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.3 - end - call $~lib/set/Set#find - local.set $3 - local.get $3 - i32.eqz - if - i32.const 0 - return - end - local.get $3 - local.get $3 - i32.load offset=4 - i32.const 1 - i32.or - i32.store offset=4 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.set $4 - local.get $4 - i32.const 1 - i32.add - i32.const 4 - local.tee $2 - local.get $0 - i32.load offset=20 - local.tee $5 - local.get $2 - local.get $5 - i32.gt_u - select - i32.ge_u - if (result i32) local.get $0 - i32.load offset=20 - local.get $0 - i32.load offset=12 - f64.convert_i32_s - f64.const 0.75 - f64.mul - i32.trunc_f64_s - i32.lt_s - else - i32.const 0 - end - if - local.get $0 - local.get $4 - call $~lib/set/Set#rehash - end - i32.const 1 - ) - (func $std/set/testNumeric (; 63 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - i32.const 0 - call $~lib/set/Set#constructor - local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $repeat|0 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|0 - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 6 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/set/Set#add - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 8 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|0 - unreachable - end - unreachable - end - local.get $0 - call $~lib/set/Set#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 10 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - block $break|1 - i32.const 50 - local.set $1 - loop $repeat|1 - local.get $1 - i32.const 100 - i32.lt_s - i32.eqz - br_if $break|1 - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 14 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/set/Set#add - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 16 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 - unreachable - end - unreachable - end - local.get $0 - call $~lib/set/Set#get:size - i32.const 100 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 18 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - block $break|2 - i32.const 0 - local.set $1 - loop $repeat|2 - local.get $1 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|2 - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 22 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/set/Set#delete - drop - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 24 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|2 - unreachable - end - unreachable - end - local.get $0 - call $~lib/set/Set#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 26 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - block $break|3 - i32.const 0 - local.set $1 - loop $repeat|3 - local.get $1 - i32.const 50 - i32.lt_s - i32.eqz - br_if $break|3 - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 30 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/set/Set#add - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 32 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - call $~lib/set/Set#delete - drop - local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 34 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|3 - unreachable - end - unreachable - end - local.get $0 - call $~lib/set/Set#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 36 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 40 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/purerc/__release - ) - (func $~lib/set/Set#clear (; 64 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - end - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/set/Set#constructor (; 65 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 22 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end - call $~lib/set/Set#clear - local.get $0 - ) - (func $~lib/set/Set#find (; 66 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - local.get $0 - i32.load - local.get $2 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i32.load - local.get $1 - i32.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=4 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 - end - end - end - i32.const 0 - ) - (func $~lib/set/Set#has (; 67 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.0 - end - call $~lib/set/Set#find - i32.const 0 - i32.ne - ) - (func $~lib/set/Set#rehash (; 68 ;) (type $FUNCSIG$vii) (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.get $1 - i32.const 1 - i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 - local.get $2 - f64.convert_i32_s - f64.const 2.6666666666666665 - f64.mul - i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $0 - i32.load offset=8 - local.set $6 - local.get $6 - local.get $0 - i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 8 - end - 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 - if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - i32.load - i32.store - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - i32.load - local.set $11 - local.get $11 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.2 - end - local.get $1 - i32.and - local.set $11 - local.get $3 - local.get $11 - i32.const 4 - i32.mul - i32.add - local.set $12 - local.get $10 - local.get $12 - i32.load - i32.store offset=4 - local.get $12 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 8 - end - i32.add - local.set $8 - end - local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 8 - end - i32.add - local.set $6 - br $continue|0 - end - end - end - local.get $0 - local.tee $9 - local.get $3 - local.get $9 - i32.load - call $~lib/rt/purerc/__retainRelease - i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $0 - local.tee $9 - local.get $5 - local.get $9 - i32.load offset=8 - call $~lib/rt/purerc/__retainRelease - i32.store offset=8 - local.get $0 - local.get $4 - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release - local.get $5 - call $~lib/rt/purerc/__release - ) - (func $~lib/set/Set#add (; 69 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.1 - end - local.set $3 - local.get $0 - local.get $1 - local.get $3 - call $~lib/set/Set#find - local.set $4 - local.get $4 - i32.eqz - if local.get $0 i32.load offset=16 - local.get $0 - i32.load offset=12 - i32.eq - if - local.get $0 - local.get $0 - i32.load offset=20 - local.get $0 - i32.load offset=12 - f64.convert_i32_s - f64.const 0.75 - f64.mul - i32.trunc_f64_s - i32.lt_s - if (result i32) - local.get $0 - i32.load offset=4 - else - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shl - i32.const 1 - i32.or - end - call $~lib/set/Set#rehash - end - local.get $0 - i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $2 - i32.const 1 - i32.add - i32.store offset=16 - local.get $2 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 8 - end - i32.mul + local.tee $4 + i32.const 1 i32.add - local.set $4 + i32.store offset=16 local.get $4 + i32.const 3 + i32.shl + local.get $2 + i32.add + local.tee $2 local.get $1 i32.store local.get $0 @@ -5756,53 +2962,38 @@ i32.const 1 i32.add i32.store offset=20 + local.get $2 local.get $0 i32.load - local.get $3 local.get $0 i32.load offset=4 + local.get $3 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add - local.set $2 - local.get $4 - local.get $2 + local.tee $0 i32.load i32.store offset=4 + local.get $0 local.get $2 - local.get $4 i32.store end ) - (func $~lib/set/Set#get:size (; 70 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 71 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 39 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.3 - end - call $~lib/set/Set#find - local.set $3 - local.get $3 + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find + local.tee $1 i32.eqz if - i32.const 0 return end - local.get $3 - local.get $3 + local.get $1 + local.get $1 i32.load offset=4 i32.const 1 i32.or @@ -5817,17 +3008,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 - local.get $4 + local.tee $2 i32.const 1 i32.add i32.const 4 - local.tee $2 local.get $0 i32.load offset=20 - local.tee $5 - local.get $2 - local.get $5 + local.tee $1 + i32.const 4 + local.get $1 i32.gt_u select i32.ge_u @@ -5846,316 +3035,549 @@ end if local.get $0 - local.get $4 - call $~lib/set/Set#rehash + local.get $2 + call $~lib/set/Set#rehash end - i32.const 1 ) - (func $std/set/testNumeric (; 72 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 40 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) - i32.const 0 - call $~lib/set/Set#constructor - local.set $0 - block $break|0 - i32.const 0 - local.set $1 - loop $repeat|0 + call $~lib/set/Set#constructor + local.set $1 + loop $repeat|0 + local.get $0 + i32.const 100 + i32.lt_s + if local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|0 local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz + call $~lib/set/Set#has if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#add local.get $0 + call $~lib/set/Set#add local.get $1 - call $~lib/set/Set#has - i32.eqz + local.get $0 + call $~lib/set/Set#has if + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - i32.const 50 - local.set $1 - loop $repeat|1 + i32.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + i32.const 100 + i32.lt_s + if local.get $1 - i32.const 100 - i32.lt_u - i32.eqz - br_if $break|1 local.get $0 - local.get $1 - call $~lib/set/Set#has + call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#add local.get $0 + call $~lib/set/Set#add local.get $1 - call $~lib/set/Set#has - i32.eqz + local.get $0 + call $~lib/set/Set#has if + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - i32.const 0 - local.set $1 - loop $repeat|2 + i32.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + i32.const 50 + i32.lt_s + if local.get $1 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|2 local.get $0 - local.get $1 - call $~lib/set/Set#has + call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#delete - drop local.get $0 + call $~lib/set/Set#delete local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz + local.get $0 + call $~lib/set/Set#has if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|2 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - i32.const 0 - local.set $1 - loop $repeat|3 + i32.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + i32.const 50 + i32.lt_s + if local.get $1 - i32.const 50 - i32.lt_u - i32.eqz - br_if $break|3 local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz + call $~lib/set/Set#has if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#add local.get $0 + call $~lib/set/Set#add local.get $1 - call $~lib/set/Set#has + local.get $0 + call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#delete - drop local.get $0 + call $~lib/set/Set#delete local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz + local.get $0 + call $~lib/set/Set#has if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|3 end - local.get $1 - i32.const 1 - i32.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/purerc/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 73 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + (func $~lib/set/Set#constructor (; 41 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 22 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + i32.const 0 i32.store offset=4 local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 64 - call $~lib/arraybuffer/ArrayBuffer#constructor + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + call $~lib/set/Set#clear + local.get $0 + ) + (func $std/set/testNumeric (; 42 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + call $~lib/set/Set#constructor + local.set $1 + loop $repeat|0 + local.get $0 + i32.const 100 + i32.lt_u + if + local.get $1 + local.get $0 + call $~lib/set/Set#has + if + i32.const 0 + i32.const 128 + i32.const 6 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/set/Set#add + local.get $1 + local.get $0 + call $~lib/set/Set#has + if + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + else + i32.const 0 + i32.const 128 + i32.const 8 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + unreachable + end end + local.get $1 + i32.load offset=20 + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 128 + i32.const 10 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + i32.const 100 + i32.lt_u + if + local.get $1 + local.get $0 + call $~lib/set/Set#has + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 14 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/set/Set#add + local.get $1 + local.get $0 + call $~lib/set/Set#has + if + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|1 + else + i32.const 0 + i32.const 128 + i32.const 16 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + unreachable + end + end + local.get $1 + i32.load offset=20 + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 128 + i32.const 18 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + i32.const 50 + i32.lt_u + if + local.get $1 + local.get $0 + call $~lib/set/Set#has + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 22 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/set/Set#delete + local.get $1 + local.get $0 + call $~lib/set/Set#has + if + i32.const 0 + i32.const 128 + i32.const 24 + i32.const 4 + call $~lib/builtins/abort + unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|2 + end + unreachable + end + end + local.get $1 + i32.load offset=20 + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 128 + i32.const 26 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + i32.const 50 + i32.lt_u + if + local.get $1 + local.get $0 + call $~lib/set/Set#has + if + i32.const 0 + i32.const 128 + i32.const 30 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/set/Set#add + local.get $1 + local.get $0 + call $~lib/set/Set#has + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 32 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/set/Set#delete + local.get $1 + local.get $0 + call $~lib/set/Set#has + if + i32.const 0 + i32.const 128 + i32.const 34 + i32.const 4 + call $~lib/builtins/abort + unreachable + else + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|3 + end + unreachable + end + end + local.get $1 + i32.load offset=20 + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 128 + i32.const 36 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 + if + i32.const 0 + i32.const 128 + i32.const 40 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/pure/__release + ) + (func $~lib/set/Set#clear (; 43 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.load + call $~lib/rt/pure/__release + local.get $0 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + i32.store + local.get $0 + i32.const 3 + i32.store offset=4 + local.get $0 + i32.load offset=8 + call $~lib/rt/pure/__release + local.get $0 + i32.const 64 + call $~lib/arraybuffer/ArrayBuffer#constructor i32.store offset=8 local.get $0 i32.const 4 @@ -6167,63 +3589,77 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 23 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end + (func $~lib/set/Set#constructor (; 44 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 23 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash64 (; 75 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/hash/hash64 (; 45 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) - (local $2 i32) - (local $3 i32) local.get $0 i32.wrap_i64 - local.set $1 + local.tee $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 8 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 16 + i32.shr_u + i32.const 255 + i32.and + i32.xor + i32.const 16777619 + i32.mul + local.get $1 + i32.const 24 + i32.shr_u + i32.xor + i32.const 16777619 + i32.mul local.get $0 i64.const 32 i64.shr_u i32.wrap_i64 - local.set $2 - i32.const -2128831035 - local.set $3 - local.get $3 - local.get $1 + local.tee $1 i32.const 255 i32.and i32.xor i32.const 16777619 i32.mul - local.set $3 - local.get $3 local.get $1 i32.const 8 i32.shr_u @@ -6232,8 +3668,6 @@ i32.xor i32.const 16777619 i32.mul - local.set $3 - local.get $3 local.get $1 i32.const 16 i32.shr_u @@ -6242,116 +3676,64 @@ i32.xor i32.const 16777619 i32.mul - local.set $3 - local.get $3 local.get $1 i32.const 24 i32.shr_u i32.xor i32.const 16777619 i32.mul - local.set $3 - local.get $3 - local.get $2 - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $2 - i32.const 8 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $2 - i32.const 16 - i32.shr_u - i32.const 255 - i32.and - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 - local.get $2 - i32.const 24 - i32.shr_u - i32.xor - i32.const 16777619 - i32.mul - local.set $3 - local.get $3 ) - (func $~lib/set/Set#find (; 76 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/set/Set#find (; 46 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) local.get $0 i32.load - local.get $2 local.get $0 i32.load offset=4 + local.get $2 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i64.load - local.get $1 - i64.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=8 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 + local.set $0 + loop $continue|0 + local.get $0 + if + local.get $0 + i32.load offset=8 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + i64.load + local.get $1 + i64.eq end + if + local.get $0 + return + end + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $continue|0 end end i32.const 0 ) - (func $~lib/set/Set#has (; 77 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) + (func $~lib/set/Set#has (; 47 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.0 - end + local.get $1 + call $~lib/util/hash/hash64 call $~lib/set/Set#find i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 78 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 48 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6359,158 +3741,115 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i64) - (local $12 i32) - (local $13 i32) local.get $1 i32.const 1 i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul + local.tee $2 + i32.const 2 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 + local.set $4 local.get $2 f64.convert_i32_s f64.const 2.6666666666666665 f64.mul i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 16 - end - i32.mul + local.tee $6 + i32.const 4 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 local.get $0 i32.load offset=8 - local.set $6 - local.get $6 + local.tee $2 local.get $0 i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 16 - end - i32.mul + i32.const 4 + i32.shl 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 + local.set $3 + loop $continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=8 - i32.const 1 + local.get $3 + local.get $2 + i64.load + i64.store + local.get $3 + local.get $2 + i64.load + call $~lib/util/hash/hash64 + local.get $1 i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - i64.load - i64.store - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - i64.load - local.set $11 - local.get $11 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.2 - end - local.get $1 - i32.and - local.set $12 - local.get $3 - local.get $12 - i32.const 4 - i32.mul - i32.add - local.set $13 - local.get $10 - local.get $13 - i32.load - i32.store offset=8 - local.get $13 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 16 - end - i32.add - local.set $8 - end - local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 16 - end + i32.const 2 + i32.shl + local.get $4 i32.add - local.set $6 - br $continue|0 + local.tee $8 + i32.load + i32.store offset=8 + local.get $8 + local.get $3 + i32.store + local.get $3 + i32.const 16 + i32.add + local.set $3 end + local.get $2 + i32.const 16 + i32.add + local.set $2 + br $continue|0 end end local.get $0 - local.tee $9 - local.get $3 - local.get $9 + local.get $4 + local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $9 local.get $5 - local.get $9 + local.get $0 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 - local.get $4 + local.get $6 i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 79 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64) - (local $2 i64) + (func $~lib/set/Set#add (; 49 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.1 - end - local.set $3 local.get $0 local.get $1 - local.get $3 + local.get $1 + call $~lib/util/hash/hash64 + local.tee $3 call $~lib/set/Set#find - local.set $4 - local.get $4 i32.eqz if local.get $0 @@ -6544,23 +3883,20 @@ end local.get $0 i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $5 - i32.const 1 - i32.add - i32.store offset=16 - local.get $5 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 16 - end - i32.mul + local.set $2 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 i32.add - local.set $4 + i32.store offset=16 local.get $4 + i32.const 4 + i32.shl + local.get $2 + i32.add + local.tee $2 local.get $1 i64.store local.get $0 @@ -6569,54 +3905,39 @@ i32.const 1 i32.add i32.store offset=20 + local.get $2 local.get $0 i32.load - local.get $3 local.get $0 i32.load offset=4 + local.get $3 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add - local.set $5 - local.get $4 - local.get $5 + local.tee $0 i32.load i32.store offset=8 - local.get $5 - local.get $4 + local.get $0 + local.get $2 i32.store end ) - (func $~lib/set/Set#get:size (; 80 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 81 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) + (func $~lib/set/Set#delete (; 50 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64) + (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.3 - end + local.get $1 + call $~lib/util/hash/hash64 call $~lib/set/Set#find - local.set $3 - local.get $3 + local.tee $2 i32.eqz if - i32.const 0 return end - local.get $3 - local.get $3 + local.get $2 + local.get $2 i32.load offset=8 i32.const 1 i32.or @@ -6631,17 +3952,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 - local.get $4 + local.tee $3 i32.const 1 i32.add i32.const 4 - local.tee $5 local.get $0 i32.load offset=20 - local.tee $6 - local.get $5 - local.get $6 + local.tee $2 + i32.const 4 + local.get $2 i32.gt_u select i32.ge_u @@ -6660,1045 +3979,549 @@ end if local.get $0 - local.get $4 + local.get $3 call $~lib/set/Set#rehash end - i32.const 1 ) - (func $std/set/testNumeric (; 82 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i64) - i32.const 0 + (func $std/set/testNumeric (; 51 ;) (type $FUNCSIG$v) + (local $0 i64) + (local $1 i32) call $~lib/set/Set#constructor - local.set $0 - block $break|0 - i64.const 0 - local.set $1 - loop $repeat|0 + local.set $1 + loop $repeat|0 + local.get $0 + i64.const 100 + i64.lt_s + if local.get $1 - i64.const 100 - i64.lt_s - i32.eqz - br_if $break|0 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - i64.const 50 - local.set $1 - loop $repeat|1 + i64.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + i64.const 100 + i64.lt_s + if local.get $1 - i64.const 100 - i64.lt_s - i32.eqz - br_if $break|1 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - i64.const 0 - local.set $1 - loop $repeat|2 + i64.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + i64.const 50 + i64.lt_s + if local.get $1 - i64.const 50 - i64.lt_s - i32.eqz - br_if $break|2 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $repeat|2 end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - i64.const 0 - local.set $1 - loop $repeat|3 + i64.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + i64.const 50 + i64.lt_s + if local.get $1 - i64.const 50 - i64.lt_s - i32.eqz - br_if $break|3 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $repeat|3 end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 + if + i32.const 0 + i32.const 128 + i32.const 40 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/rt/pure/__release + ) + (func $~lib/set/Set#constructor (; 52 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 24 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 local.get $0 call $~lib/set/Set#clear local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 232 - i32.const 40 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/purerc/__release ) - (func $~lib/set/Set#clear (; 83 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $std/set/testNumeric (; 53 ;) (type $FUNCSIG$v) + (local $0 i64) (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end - i32.store - local.get $0 - i32.const 4 - i32.const 1 - i32.sub - i32.store offset=4 - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 64 - call $~lib/arraybuffer/ArrayBuffer#constructor - end - i32.store offset=8 - local.get $0 - i32.const 4 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - ) - (func $~lib/set/Set#constructor (; 84 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 24 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end - call $~lib/set/Set#clear - local.get $0 - ) - (func $~lib/set/Set#find (; 85 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) - (local $3 i32) - local.get $0 - i32.load - local.get $2 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - i64.load - local.get $1 - i64.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=8 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 - end - end - end - i32.const 0 - ) - (func $~lib/set/Set#has (; 86 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.0 - end - call $~lib/set/Set#find - i32.const 0 - i32.ne - ) - (func $~lib/set/Set#rehash (; 87 ;) (type $FUNCSIG$vii) (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 i64) - (local $12 i32) - (local $13 i32) - local.get $1 - i32.const 1 - i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 - local.get $2 - f64.convert_i32_s - f64.const 2.6666666666666665 - f64.mul - i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 16 - end - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $5 - local.get $0 - i32.load offset=8 - local.set $6 - local.get $6 - local.get $0 - i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 16 - end - 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 - if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - i64.load - i64.store - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - i64.load - local.set $11 - local.get $11 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.2 - end - local.get $1 - i32.and - local.set $12 - local.get $3 - local.get $12 - i32.const 4 - i32.mul - i32.add - local.set $13 - local.get $10 - local.get $13 - i32.load - i32.store offset=8 - local.get $13 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 16 - end - i32.add - local.set $8 - end - local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 16 - end - i32.add - local.set $6 - br $continue|0 - end - end - end - local.get $0 - local.tee $9 - local.get $3 - local.get $9 - i32.load - call $~lib/rt/purerc/__retainRelease - i32.store - local.get $0 - local.get $1 - i32.store offset=4 - local.get $0 - local.tee $9 - local.get $5 - local.get $9 - i32.load offset=8 - call $~lib/rt/purerc/__retainRelease - i32.store offset=8 - local.get $0 - local.get $4 - i32.store offset=12 - local.get $0 - local.get $0 - i32.load offset=20 - i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release - local.get $5 - call $~lib/rt/purerc/__release - ) - (func $~lib/set/Set#add (; 88 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64) - (local $2 i64) - (local $3 i32) - (local $4 i32) - (local $5 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.1 - end - local.set $3 - local.get $0 - local.get $1 - local.get $3 - call $~lib/set/Set#find - local.set $4 - local.get $4 - i32.eqz - if - local.get $0 - i32.load offset=16 - local.get $0 - i32.load offset=12 - i32.eq - if - local.get $0 - local.get $0 - i32.load offset=20 - local.get $0 - i32.load offset=12 - f64.convert_i32_s - f64.const 0.75 - f64.mul - i32.trunc_f64_s - i32.lt_s - if (result i32) - local.get $0 - i32.load offset=4 - else - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shl - i32.const 1 - i32.or - end - call $~lib/set/Set#rehash - end - local.get $0 - i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $5 - i32.const 1 - i32.add - i32.store offset=16 - local.get $5 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 16 - end - i32.mul - i32.add - local.set $4 - local.get $4 - local.get $1 - i64.store - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.add - i32.store offset=20 - local.get $0 - i32.load - local.get $3 - local.get $0 - i32.load offset=4 - i32.and - i32.const 4 - i32.mul - i32.add - local.set $5 - local.get $4 - local.get $5 - i32.load - i32.store offset=8 - local.get $5 - local.get $4 - i32.store - end - ) - (func $~lib/set/Set#get:size (; 89 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 90 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.3 - end - call $~lib/set/Set#find - local.set $3 - local.get $3 - i32.eqz - if - i32.const 0 - return - end - local.get $3 - local.get $3 - i32.load offset=8 - i32.const 1 - i32.or - i32.store offset=8 - local.get $0 - local.get $0 - i32.load offset=20 - i32.const 1 - i32.sub - i32.store offset=20 - local.get $0 - i32.load offset=4 - i32.const 1 - i32.shr_u - local.set $4 - local.get $4 - i32.const 1 - i32.add - i32.const 4 - local.tee $5 - local.get $0 - i32.load offset=20 - local.tee $6 - local.get $5 - local.get $6 - i32.gt_u - select - i32.ge_u - if (result i32) - local.get $0 - i32.load offset=20 - local.get $0 - i32.load offset=12 - f64.convert_i32_s - f64.const 0.75 - f64.mul - i32.trunc_f64_s - i32.lt_s - else - i32.const 0 - end - if - local.get $0 - local.get $4 - call $~lib/set/Set#rehash - end - i32.const 1 - ) - (func $std/set/testNumeric (; 91 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i64) - i32.const 0 call $~lib/set/Set#constructor - local.set $0 - block $break|0 - i64.const 0 - local.set $1 - loop $repeat|0 + local.set $1 + loop $repeat|0 + local.get $0 + i64.const 100 + i64.lt_u + if local.get $1 - i64.const 100 - i64.lt_u - i32.eqz - br_if $break|0 local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz + call $~lib/set/Set#has if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#add local.get $0 + call $~lib/set/Set#add local.get $1 - call $~lib/set/Set#has - i32.eqz + local.get $0 + call $~lib/set/Set#has if + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - i64.const 50 - local.set $1 - loop $repeat|1 + i64.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + i64.const 100 + i64.lt_u + if local.get $1 - i64.const 100 - i64.lt_u - i32.eqz - br_if $break|1 local.get $0 - local.get $1 - call $~lib/set/Set#has + call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#add local.get $0 + call $~lib/set/Set#add local.get $1 - call $~lib/set/Set#has - i32.eqz + local.get $0 + call $~lib/set/Set#has if + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - i64.const 0 - local.set $1 - loop $repeat|2 + i64.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + i64.const 50 + i64.lt_u + if local.get $1 - i64.const 50 - i64.lt_u - i32.eqz - br_if $break|2 local.get $0 - local.get $1 - call $~lib/set/Set#has + call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#delete - drop local.get $0 + call $~lib/set/Set#delete local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz + local.get $0 + call $~lib/set/Set#has if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $repeat|2 end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - i64.const 0 - local.set $1 - loop $repeat|3 + i64.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + i64.const 50 + i64.lt_u + if local.get $1 - i64.const 50 - i64.lt_u - i32.eqz - br_if $break|3 local.get $0 - local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz + call $~lib/set/Set#has if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#add local.get $0 + call $~lib/set/Set#add local.get $1 - call $~lib/set/Set#has + local.get $0 + call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 - call $~lib/set/Set#delete - drop local.get $0 + call $~lib/set/Set#delete local.get $1 - call $~lib/set/Set#has - i32.eqz - i32.eqz + local.get $0 + call $~lib/set/Set#has if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + i64.const 1 + i64.add + local.set $0 + br $repeat|3 end - local.get $1 - i64.const 1 - i64.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/purerc/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 92 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + (func $~lib/set/Set#constructor (; 54 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 25 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + i32.const 0 i32.store offset=4 local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 32 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + i32.const 0 i32.store offset=8 local.get $0 - i32.const 4 + i32.const 0 i32.store offset=12 local.get $0 i32.const 0 @@ -7706,105 +4529,62 @@ local.get $0 i32.const 0 i32.store offset=20 - ) - (func $~lib/set/Set#constructor (; 93 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 25 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end - call $~lib/set/Set#clear + local.get $0 + call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 94 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/set/Set#find (; 55 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) local.get $0 i32.load - local.get $2 local.get $0 i32.load offset=4 + local.get $2 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=4 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - f32.load - local.get $1 - f32.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=4 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 + local.set $0 + loop $continue|0 + local.get $0 + if + local.get $0 + i32.load offset=4 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + f32.load + local.get $1 + f32.eq end + if + local.get $0 + return + end + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.set $0 + br $continue|0 end end i32.const 0 ) - (func $~lib/set/Set#has (; 95 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32) - (local $2 f32) + (func $~lib/set/Set#has (; 56 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.0 - end + local.get $1 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 call $~lib/set/Set#find i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 96 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 57 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7812,160 +4592,117 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 f32) - (local $12 i32) - (local $13 i32) local.get $1 i32.const 1 i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul + local.tee $2 + i32.const 2 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 + local.set $4 local.get $2 f64.convert_i32_s f64.const 2.6666666666666665 f64.mul i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 8 - end - i32.mul + local.tee $6 + i32.const 3 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 local.get $0 i32.load offset=8 - local.set $6 - local.get $6 + local.tee $2 local.get $0 i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 8 - end - i32.mul + i32.const 3 + i32.shl 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 + local.set $3 + loop $continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=4 + i32.const 1 + i32.and + i32.eqz if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=4 - i32.const 1 + local.get $3 + local.get $2 + f32.load + f32.store + local.get $3 + local.get $2 + f32.load + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + local.get $1 i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - f32.load - f32.store - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - f32.load - local.set $11 - local.get $11 - 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.get $3 - local.get $12 - i32.const 4 - i32.mul - i32.add - local.set $13 - local.get $10 - local.get $13 - i32.load - i32.store offset=4 - local.get $13 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 8 - end - i32.add - local.set $8 - end - local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 8 - end + i32.const 2 + i32.shl + local.get $4 i32.add - local.set $6 - br $continue|0 + local.tee $8 + i32.load + i32.store offset=4 + local.get $8 + local.get $3 + i32.store + local.get $3 + i32.const 8 + i32.add + local.set $3 end + local.get $2 + i32.const 8 + i32.add + local.set $2 + br $continue|0 end end local.get $0 - local.tee $9 - local.get $3 - local.get $9 + local.get $4 + local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $9 local.get $5 - local.get $9 + local.get $0 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 - local.get $4 + local.get $6 i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 97 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32) - (local $2 f32) + (func $~lib/set/Set#add (; 58 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.1 - end - local.set $3 local.get $0 local.get $1 - local.get $3 + local.get $1 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + local.tee $3 call $~lib/set/Set#find - local.set $4 - local.get $4 i32.eqz if local.get $0 @@ -7999,23 +4736,20 @@ end local.get $0 i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $5 - i32.const 1 - i32.add - i32.store offset=16 - local.get $5 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 8 - end - i32.mul + local.set $2 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 i32.add - local.set $4 + i32.store offset=16 local.get $4 + i32.const 3 + i32.shl + local.get $2 + i32.add + local.tee $2 local.get $1 f32.store local.get $0 @@ -8024,55 +4758,40 @@ i32.const 1 i32.add i32.store offset=20 + local.get $2 local.get $0 i32.load - local.get $3 local.get $0 i32.load offset=4 + local.get $3 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add - local.set $5 - local.get $4 - local.get $5 + local.tee $0 i32.load i32.store offset=4 - local.get $5 - local.get $4 + local.get $0 + local.get $2 i32.store end ) - (func $~lib/set/Set#get:size (; 98 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 99 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32) - (local $2 f32) + (func $~lib/set/Set#delete (; 59 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32) + (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - i32.reinterpret_f32 - call $~lib/util/hash/hash32 - br $~lib/util/hash/HASH|inlined.3 - end + local.get $1 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 call $~lib/set/Set#find - local.set $3 - local.get $3 + local.tee $2 i32.eqz if - i32.const 0 return end - local.get $3 - local.get $3 + local.get $2 + local.get $2 i32.load offset=4 i32.const 1 i32.or @@ -8087,17 +4806,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 - local.get $4 + local.tee $3 i32.const 1 i32.add i32.const 4 - local.tee $5 local.get $0 i32.load offset=20 - local.tee $6 - local.get $5 - local.get $6 + local.tee $2 + i32.const 4 + local.get $2 i32.gt_u select i32.ge_u @@ -8116,319 +4833,274 @@ end if local.get $0 - local.get $4 + local.get $3 call $~lib/set/Set#rehash end - i32.const 1 ) - (func $std/set/testNumeric (; 100 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 f32) - i32.const 0 + (func $std/set/testNumeric (; 60 ;) (type $FUNCSIG$v) + (local $0 f32) + (local $1 i32) call $~lib/set/Set#constructor - local.set $0 - block $break|0 - f32.const 0 - local.set $1 - loop $repeat|0 + local.set $1 + loop $repeat|0 + local.get $0 + f32.const 100 + f32.lt + if local.get $1 - f32.const 100 - f32.lt - i32.eqz - br_if $break|0 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - f32.const 1 - f32.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - f32.const 50 - local.set $1 - loop $repeat|1 + f32.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + f32.const 100 + f32.lt + if local.get $1 - f32.const 100 - f32.lt - i32.eqz - br_if $break|1 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - f32.const 1 - f32.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - f32.const 0 - local.set $1 - loop $repeat|2 + f32.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + f32.const 50 + f32.lt + if local.get $1 - f32.const 50 - f32.lt - i32.eqz - br_if $break|2 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $repeat|2 end - local.get $1 - f32.const 1 - f32.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - f32.const 0 - local.set $1 - loop $repeat|3 + f32.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + f32.const 50 + f32.lt + if local.get $1 - f32.const 50 - f32.lt - i32.eqz - br_if $break|3 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + f32.const 1 + f32.add + local.set $0 + br $repeat|3 end - local.get $1 - f32.const 1 - f32.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/purerc/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 101 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 16 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + (func $~lib/set/Set#constructor (; 61 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + i32.const 24 + i32.const 26 + call $~lib/rt/tlsf/__alloc + call $~lib/rt/pure/__retain + local.tee $0 + i32.const 0 i32.store local.get $0 - i32.const 4 - i32.const 1 - i32.sub + i32.const 0 i32.store offset=4 local.get $0 - local.tee $1 - block (result i32) - local.get $1 - i32.load offset=8 - call $~lib/rt/purerc/__release - i32.const 0 - i32.const 64 - call $~lib/arraybuffer/ArrayBuffer#constructor - end + i32.const 0 i32.store offset=8 local.get $0 - i32.const 4 + i32.const 0 i32.store offset=12 local.get $0 i32.const 0 @@ -8436,105 +5108,62 @@ local.get $0 i32.const 0 i32.store offset=20 - ) - (func $~lib/set/Set#constructor (; 102 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - block (result i32) - local.get $0 - i32.eqz - if - i32.const 24 - i32.const 26 - call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain - local.set $0 - end - local.get $0 - i32.const 0 - i32.store - local.get $0 - i32.const 0 - i32.store offset=4 - local.get $0 - i32.const 0 - i32.store offset=8 - local.get $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 0 - i32.store offset=16 - local.get $0 - i32.const 0 - i32.store offset=20 - local.get $0 - end - call $~lib/set/Set#clear + local.get $0 + call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 103 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) - (local $3 i32) + (func $~lib/set/Set#find (; 62 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) local.get $0 i32.load - local.get $2 local.get $0 i32.load offset=4 + local.get $2 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add i32.load - local.set $3 - block $break|0 - loop $continue|0 - local.get $3 - if - local.get $3 - i32.load offset=8 - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $3 - f64.load - local.get $1 - f64.eq - else - i32.const 0 - end - if - local.get $3 - return - end - local.get $3 - i32.load offset=8 - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $3 - br $continue|0 + local.set $0 + loop $continue|0 + local.get $0 + if + local.get $0 + i32.load offset=8 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $0 + f64.load + local.get $1 + f64.eq end + if + local.get $0 + return + end + local.get $0 + i32.load offset=8 + i32.const -2 + i32.and + local.set $0 + br $continue|0 end end i32.const 0 ) - (func $~lib/set/Set#has (; 104 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) - (local $2 f64) + (func $~lib/set/Set#has (; 63 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.0 (result i32) - local.get $1 - local.set $2 - local.get $2 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.0 - end + local.get $1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 call $~lib/set/Set#find i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 105 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 64 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8542,160 +5171,117 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 f64) - (local $12 i32) - (local $13 i32) local.get $1 i32.const 1 i32.add - local.set $2 - i32.const 0 - local.get $2 - i32.const 4 - i32.mul + local.tee $2 + i32.const 2 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $3 + local.set $4 local.get $2 f64.convert_i32_s f64.const 2.6666666666666665 f64.mul i32.trunc_f64_s - local.set $4 - i32.const 0 - local.get $4 - block $~lib/set/ENTRY_SIZE|inlined.1 (result i32) - i32.const 16 - end - i32.mul + local.tee $6 + i32.const 4 + i32.shl call $~lib/arraybuffer/ArrayBuffer#constructor local.set $5 local.get $0 i32.load offset=8 - local.set $6 - local.get $6 + local.tee $2 local.get $0 i32.load offset=16 - block $~lib/set/ENTRY_SIZE|inlined.2 (result i32) - i32.const 16 - end - i32.mul + i32.const 4 + i32.shl 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 + local.set $3 + loop $continue|0 + local.get $2 + local.get $7 + i32.ne + if + local.get $2 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz if - local.get $6 - local.set $9 - local.get $9 - i32.load offset=8 - i32.const 1 + local.get $3 + local.get $2 + f64.load + f64.store + local.get $3 + local.get $2 + f64.load + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + local.get $1 i32.and - i32.eqz - if - local.get $8 - local.set $10 - local.get $10 - local.get $9 - f64.load - f64.store - block $~lib/util/hash/HASH|inlined.2 (result i32) - local.get $9 - f64.load - local.set $11 - local.get $11 - 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.get $3 - local.get $12 - i32.const 4 - i32.mul - i32.add - local.set $13 - local.get $10 - local.get $13 - i32.load - i32.store offset=8 - local.get $13 - local.get $8 - i32.store - local.get $8 - block $~lib/set/ENTRY_SIZE|inlined.3 (result i32) - i32.const 16 - end - i32.add - local.set $8 - end - local.get $6 - block $~lib/set/ENTRY_SIZE|inlined.4 (result i32) - i32.const 16 - end + i32.const 2 + i32.shl + local.get $4 i32.add - local.set $6 - br $continue|0 + local.tee $8 + i32.load + i32.store offset=8 + local.get $8 + local.get $3 + i32.store + local.get $3 + i32.const 16 + i32.add + local.set $3 end + local.get $2 + i32.const 16 + i32.add + local.set $2 + br $continue|0 end end local.get $0 - local.tee $9 - local.get $3 - local.get $9 + local.get $4 + local.get $0 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 i32.store offset=4 local.get $0 - local.tee $9 local.get $5 - local.get $9 + local.get $0 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 - local.get $4 + local.get $6 i32.store offset=12 local.get $0 local.get $0 i32.load offset=20 i32.store offset=16 - local.get $3 - call $~lib/rt/purerc/__release + local.get $4 + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 106 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64) - (local $2 f64) + (func $~lib/set/Set#add (; 65 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - block $~lib/util/hash/HASH|inlined.1 (result i32) - local.get $1 - local.set $2 - local.get $2 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.1 - end - local.set $3 local.get $0 local.get $1 - local.get $3 + local.get $1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + local.tee $3 call $~lib/set/Set#find - local.set $4 - local.get $4 i32.eqz if local.get $0 @@ -8729,23 +5315,20 @@ end local.get $0 i32.load offset=8 - block (result i32) - local.get $0 - local.get $0 - i32.load offset=16 - local.tee $5 - i32.const 1 - i32.add - i32.store offset=16 - local.get $5 - end - block $~lib/set/ENTRY_SIZE|inlined.5 (result i32) - i32.const 16 - end - i32.mul + local.set $2 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 i32.add - local.set $4 + i32.store offset=16 local.get $4 + i32.const 4 + i32.shl + local.get $2 + i32.add + local.tee $2 local.get $1 f64.store local.get $0 @@ -8754,55 +5337,40 @@ i32.const 1 i32.add i32.store offset=20 + local.get $2 local.get $0 i32.load - local.get $3 local.get $0 i32.load offset=4 + local.get $3 i32.and - i32.const 4 - i32.mul + i32.const 2 + i32.shl i32.add - local.set $5 - local.get $4 - local.get $5 + local.tee $0 i32.load i32.store offset=8 - local.get $5 - local.get $4 + local.get $0 + local.get $2 i32.store end ) - (func $~lib/set/Set#get:size (; 107 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.load offset=20 - ) - (func $~lib/set/Set#delete (; 108 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) - (local $2 f64) + (func $~lib/set/Set#delete (; 66 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64) + (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|inlined.3 (result i32) - local.get $1 - local.set $2 - local.get $2 - i64.reinterpret_f64 - call $~lib/util/hash/hash64 - br $~lib/util/hash/HASH|inlined.3 - end + local.get $1 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 call $~lib/set/Set#find - local.set $3 - local.get $3 + local.tee $2 i32.eqz if - i32.const 0 return end - local.get $3 - local.get $3 + local.get $2 + local.get $2 i32.load offset=8 i32.const 1 i32.or @@ -8817,17 +5385,15 @@ i32.load offset=4 i32.const 1 i32.shr_u - local.set $4 - local.get $4 + local.tee $3 i32.const 1 i32.add i32.const 4 - local.tee $5 local.get $0 i32.load offset=20 - local.tee $6 - local.get $5 - local.get $6 + local.tee $2 + i32.const 4 + local.get $2 i32.gt_u select i32.ge_u @@ -8846,289 +5412,258 @@ end if local.get $0 - local.get $4 + local.get $3 call $~lib/set/Set#rehash end - i32.const 1 ) - (func $std/set/testNumeric (; 109 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 f64) - i32.const 0 + (func $std/set/testNumeric (; 67 ;) (type $FUNCSIG$v) + (local $0 f64) + (local $1 i32) call $~lib/set/Set#constructor - local.set $0 - block $break|0 - f64.const 0 - local.set $1 - loop $repeat|0 + local.set $1 + loop $repeat|0 + local.get $0 + f64.const 100 + f64.lt + if local.get $1 - f64.const 100 - f64.lt - i32.eqz - br_if $break|0 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|0 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - f64.const 1 - f64.add - local.set $1 - br $repeat|0 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|1 - f64.const 50 - local.set $1 - loop $repeat|1 + f64.const 50 + local.set $0 + loop $repeat|1 + local.get $0 + f64.const 100 + f64.lt + if local.get $1 - f64.const 100 - f64.lt - i32.eqz - br_if $break|1 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 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 $repeat|1 + else i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $1 - f64.const 1 - f64.add - local.set $1 - br $repeat|1 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 100 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|2 - f64.const 0 - local.set $1 - loop $repeat|2 + f64.const 0 + local.set $0 + loop $repeat|2 + local.get $0 + f64.const 50 + f64.lt + if local.get $1 - f64.const 50 - f64.lt - i32.eqz - br_if $break|2 local.get $0 - local.get $1 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $repeat|2 end - local.get $1 - f64.const 1 - f64.add - local.set $1 - br $repeat|2 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort unreachable end - block $break|3 - f64.const 0 - local.set $1 - loop $repeat|3 + f64.const 0 + local.set $0 + loop $repeat|3 + local.get $0 + f64.const 50 + f64.lt + if local.get $1 - f64.const 50 - f64.lt - i32.eqz - br_if $break|3 local.get $0 - local.get $1 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#add - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort unreachable end - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#delete - drop - local.get $0 local.get $1 + local.get $0 call $~lib/set/Set#has - i32.eqz - i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort unreachable + else + local.get $0 + f64.const 1 + f64.add + local.set $0 + br $repeat|3 end - local.get $1 - f64.const 1 - f64.add - local.set $1 - br $repeat|3 unreachable end - unreachable end - local.get $0 - call $~lib/set/Set#get:size + local.get $1 + i32.load offset=20 i32.const 50 - i32.eq - i32.eqz + i32.ne if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/set/Set#clear - local.get $0 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz + local.get $1 + call $~lib/set/Set#clear + local.get $1 + i32.load offset=20 if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/rt/purerc/__release + local.get $1 + call $~lib/rt/pure/__release ) - (func $start:std/set (; 110 ;) (type $FUNCSIG$v) + (func $start (; 68 ;) (type $FUNCSIG$v) call $std/set/testNumeric call $std/set/testNumeric call $std/set/testNumeric @@ -9140,28 +5675,1011 @@ call $std/set/testNumeric call $std/set/testNumeric ) - (func $start (; 111 ;) (type $FUNCSIG$v) - call $start:std/set + (func $~lib/rt/tlsf/removeBlock (; 69 ;) (type $FUNCSIG$vii) (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 168 + i32.const 275 + 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 168 + i32.const 277 + 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 168 + i32.const 290 + 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 $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.get $1 + i32.eq + if + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $4 + i32.store offset=96 + local.get $4 + i32.eqz + if + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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/purerc/increment (; 112 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/insertBlock (; 70 ;) (type $FUNCSIG$vii) (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 168 + i32.const 203 + 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 168 + i32.const 205 + 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 $3 + i32.const 3 + i32.and + local.get $2 + 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 168 + i32.const 226 + 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 (result i32) + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $3 + i32.store + local.get $2 + else + local.get $1 + end + local.set $1 + 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 168 + i32.const 241 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 168 + i32.const 242 + 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 168 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 (; 71 ;) (type $FUNCSIG$viii) (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 168 + i32.const 384 + 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 168 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 168 + i32.const 406 + 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/initializeRoot (; 72 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 624 + i32.const 0 + i32.store + i32.const 2192 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 624 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 624 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 624 + i32.const 2208 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 624 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 73 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 168 + i32.const 446 + 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 (; 74 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 168 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 168 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 75 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 76 ;) (type $FUNCSIG$viii) (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 168 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 (; 77 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 168 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 168 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 78 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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 (; 79 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor + local.tee $1 + i32.const -268435456 i32.and local.get $1 i32.const 1 i32.add - i32.const 268435455 - i32.const -1 - i32.xor + i32.const -268435456 i32.and - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 272 @@ -9176,13 +6694,11 @@ i32.add i32.store offset=4 local.get $0 - call $~lib/rt/purerc/onIncrement + call $~lib/rt/pure/onIncrement local.get $0 i32.load i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 i32.const 272 @@ -9192,31 +6708,28 @@ unreachable end ) - (func $~lib/rt/purerc/__retain (; 113 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 80 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 616 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/increment + call $~lib/rt/pure/increment end local.get $0 ) - (func $~lib/rt/tlsf/freeBlock (; 114 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (; 81 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) local.get $1 i32.load - local.set $2 - local.get $2 + local.tee $2 i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -9233,296 +6746,249 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 115 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 + (func $~lib/rt/__typeinfo (; 82 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - i32.eqz if (result i32) - i32.const 1 - else local.get $0 - local.get $1 + i32.const 400 i32.load i32.gt_u + else + i32.const 1 end if - i32.const 328 - i32.const 384 - i32.const 55 + i32.const 320 + i32.const 376 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable end - local.get $1 local.get $0 - i32.const 8 - i32.mul + i32.const 3 + i32.shl + i32.const 400 i32.add i32.load ) - (func $~lib/memory/memory.copy (; 116 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.copy (; 83 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - (local $6 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 + local.get $0 + local.get $1 i32.eq - if - br $~lib/util/memory/memmove|inlined.0 - end - local.get $5 - local.get $4 + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 + local.get $1 i32.lt_u if - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|0 - loop $continue|0 - local.get $5 - i32.const 7 - i32.and - 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 - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 - br $continue|0 - end - end - end - block $break|1 - loop $continue|1 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|1 - end - end - end - end - block $break|2 - loop $continue|2 - local.get $3 + loop $continue|0 + local.get $0 + i32.const 7 + i32.and if - block (result i32) - local.get $5 - local.tee $6 - i32.const 1 - i32.add - local.set $5 - local.get $6 - end - block (result i32) - local.get $4 - local.tee $6 - i32.const 1 - i32.add - local.set $4 - local.get $6 - end - i32.load8_u - i32.store8 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 local.get $3 i32.const 1 i32.sub local.set $3 - br $continue|2 + 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 $continue|0 + end + end + loop $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 $continue|1 end end end + loop $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 $continue|2 + end + end else - local.get $4 + local.get $1 i32.const 7 i32.and - local.get $5 + local.get $0 i32.const 7 i32.and i32.eq if - block $break|3 - loop $continue|3 - local.get $5 - local.get $3 - i32.add - i32.const 7 - i32.and - 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 $continue|3 - end - end - end - block $break|4 - loop $continue|4 - local.get $3 - i32.const 8 - i32.ge_u - 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 $continue|4 - end - end - end - end - block $break|5 - loop $continue|5 + loop $continue|3 + local.get $0 local.get $3 + i32.add + i32.const 7 + i32.and if - local.get $5 + local.get $3 + i32.eqz + br_if $~lib/util/memory/memmove|inlined.0 + local.get $0 local.get $3 i32.const 1 i32.sub local.tee $3 i32.add - local.get $4 + local.get $1 local.get $3 i32.add i32.load8_u i32.store8 - br $continue|5 + br $continue|3 end end + loop $continue|4 + local.get $3 + i32.const 8 + i32.ge_u + if + local.get $0 + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i64.load + i64.store + br $continue|4 + end + end + end + loop $continue|5 + local.get $3 + if + local.get $0 + local.get $3 + i32.const 1 + i32.sub + local.tee $3 + i32.add + local.get $1 + local.get $3 + i32.add + i32.load8_u + i32.store8 + br $continue|5 + end end end end ) - (func $~lib/rt/purerc/growRoots (; 117 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 84 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/CUR - local.get $0 - i32.sub - local.set $1 - local.get $1 - i32.const 2 - i32.mul + global.get $~lib/rt/pure/CUR + global.get $~lib/rt/pure/ROOTS local.tee $2 - i32.const 64 - i32.const 2 + i32.sub + local.tee $1 + i32.const 1 i32.shl - local.tee $3 - local.get $2 - local.get $3 + local.tee $0 + i32.const 256 + local.get $0 + i32.const 256 i32.gt_u select - local.set $4 - local.get $4 + local.tee $3 i32.const 0 call $~lib/rt/tlsf/__alloc - local.set $5 - local.get $5 - local.get $0 + local.tee $0 + local.get $2 local.get $1 call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 + global.set $~lib/rt/pure/CUR + local.get $0 + local.get $3 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 118 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 85 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/CUR + local.tee $1 + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -9531,26 +6997,23 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 119 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 86 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $2 i32.const 268435455 i32.and - local.set $2 + local.set $1 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 i32.and - i32.eqz - i32.eqz if i32.const 0 i32.const 272 @@ -9559,7 +7022,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 1 i32.eq if @@ -9567,29 +7030,23 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members - local.get $1 + call $~lib/rt/__visit_members + local.get $2 i32.const -2147483648 i32.and - i32.eqz 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 - 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 + local.get $1 i32.const 0 - i32.gt_u - i32.eqz + i32.le_u if i32.const 0 i32.const 272 @@ -9600,89 +7057,90 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and - i32.eqz if local.get $0 - i32.const -2147483648 - i32.const 805306368 - i32.or - local.get $2 + 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/purerc/appendRoot + 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/purerc/__retainRelease (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) + (func $~lib/rt/pure/__retainRelease (; 87 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 i32.ne if - global.get $~lib/builtins/HEAP_BASE - local.set $2 local.get $0 - local.get $2 + i32.const 616 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/increment + call $~lib/rt/pure/increment end local.get $1 - local.get $2 + i32.const 616 i32.gt_u if local.get $1 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end end local.get $0 ) - (func $~lib/rt/purerc/__release (; 121 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 88 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 616 i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $~lib/rt/purerc/markGray (; 122 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#__visit_impl (; 89 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/rt/pure/markGray (; 90 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -9690,9 +7148,7 @@ if local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 268435456 i32.or @@ -9701,32 +7157,27 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 123 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 91 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and - i32.const 0 - i32.or i32.store offset=4 local.get $0 i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 124 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 92 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 268435456 @@ -9739,13 +7190,11 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 - i32.const 1879048192 - i32.const -1 - i32.xor + i32.const -1879048193 i32.and i32.const 536870912 i32.or @@ -9754,16 +7203,15 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 125 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 93 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 - local.set $1 - local.get $1 + local.tee $1 i32.const 1879048192 i32.and i32.const 536870912 @@ -9781,17 +7229,15 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 126 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) + (func $~lib/rt/pure/__visit (; 94 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + i32.const 616 i32.lt_u if return @@ -9799,515 +7245,148 @@ local.get $0 i32.const 16 i32.sub - local.set $2 + local.set $0 block $break|0 block $case5|0 block $case4|0 block $case3|0 block $case2|0 block $case1|0 - block $case0|0 + local.get $1 + i32.const 1 + i32.ne + if 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 + block $tablify|0 + local.get $1 + i32.const 3 + i32.sub + br_table $case2|0 $case3|0 $case4|0 $tablify|0 + end br $case5|0 end - block - local.get $2 - call $~lib/rt/purerc/decrement - br $break|0 - unreachable - end - unreachable - end - block - 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 272 - i32.const 74 - 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/purerc/markGray + 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 272 + i32.const 74 + i32.const 17 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/scan + 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 - unreachable - end - unreachable - end - block - local.get $2 - i32.load offset=4 - local.set $3 - local.get $3 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $3 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 272 - i32.const 85 - 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/purerc/scanBlack 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 272 + i32.const 85 + i32.const 6 + call $~lib/builtins/abort unreachable end - unreachable - end - block - local.get $2 - call $~lib/rt/purerc/collectWhite + 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 - unreachable end - unreachable + local.get $0 + call $~lib/rt/pure/collectWhite + br $break|0 end i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 272 - i32.const 96 - i32.const 24 - call $~lib/builtins/abort - unreachable - end - end - ) - (func $~lib/set/Set#__visit_impl (; 127 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 128 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 129 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 130 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 131 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 132 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 133 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 134 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 135 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 136 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/builtins/__visit_members (; 137 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - block - end - block $switch$1$leave - block $switch$1$case$28 - block $switch$1$case$27 - block $switch$1$case$26 - block $switch$1$case$25 - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$16 - block $switch$1$case$3 - block $switch$1$default - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$26 $switch$1$case$27 $switch$1$case$28 $switch$1$default - end - block - block - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - return - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - end - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end - unreachable - end - block - block - block - local.get $0 - local.get $1 - call $~lib/set/Set#__visit_impl - return - unreachable - end - unreachable - unreachable - end - unreachable - unreachable - end + i32.const 272 + i32.const 96 + i32.const 24 + call $~lib/builtins/abort unreachable end ) - (func $null (; 138 ;) (type $FUNCSIG$v) + (func $~lib/rt/__visit_members (; 95 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + block $folding-inner0 + block $switch$1$case$28 + block + block $switch$1$case$16 + block $switch$1$case$3 + block $switch$1$default + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 1 + i32.sub + br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $switch$1$case$28 $switch$1$default + end + unreachable + 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 + unreachable + end + unreachable + end + local.get $0 + local.get $1 + call $~lib/set/Set#__visit_impl + return + end + local.get $0 + local.get $1 + call $~lib/set/Set#__visit_impl + ) + (func $null (; 96 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index 87ae76e2..df257431 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -4,9 +4,9 @@ (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iij (func (param i32 i64) (result i32))) (type $FUNCSIG$ij (func (param i64) (result i32))) (type $FUNCSIG$iiji (func (param i32 i64 i32) (result i32))) @@ -18,1373 +18,30 @@ (type $FUNCSIG$iidi (func (param i32 f64 i32) (result i32))) (type $FUNCSIG$vid (func (param i32 f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) (memory $0 1) (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") - (data (i32.const 112) "\1e\00\00\00\01\00\00\00\10\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 160) "(\00\00\00\01\00\00\00\10\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 216) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00") - (data (i32.const 256) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 312) "$\00\00\00\01\00\00\00\10\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 368) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 424) "\1a\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00") + (data (i32.const 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00") + (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\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 200) "(\00\00\00\01\00\00\00\10\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 256) "\1e\00\00\00\01\00\00\00\10\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 304) "$\00\00\00\01\00\00\00\10\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 360) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") + (data (i32.const 400) "\1a\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00") (table $0 1 funcref) (elem (i32.const 0) $null) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/END (mut i32) (i32.const 0)) - (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0)) - (global $~lib/builtins/RTTI_BASE i32 (i32.const 424)) - (global $~lib/builtins/HEAP_BASE i32 (i32.const 640)) + (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) + (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) + (global $~lib/rt/RTTI_BASE i32 (i32.const 400)) + (global $~lib/heap/HEAP_BASE i32 (i32.const 616)) (export "memory" (memory $0)) (start $start) - (func $~lib/rt/tlsf/removeBlock (; 4 ;) (type $FUNCSIG$vii) (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 128 - i32.const 275 - 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 128 - i32.const 277 - 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 128 - i32.const 290 - 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 - block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) - 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 - end - i32.eq - if - block $~lib/rt/tlsf/SETHEAD|inlined.1 - 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 - end - local.get $7 - i32.eqz - if - block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) - 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 - end - local.set $8 - block $~lib/rt/tlsf/SETSL|inlined.1 - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $8 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $8 - local.set $9 - local.get $11 - local.get $10 - i32.const 2 - i32.shl - i32.add - local.get $9 - i32.store offset=4 - end - local.get $8 - 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 (; 5 ;) (type $FUNCSIG$vii) (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 128 - i32.const 203 - 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 128 - i32.const 205 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) - 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 - end - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) - 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 - end - local.set $4 - local.get $4 - i32.load - local.set $5 - end - end - local.get $2 - i32.const 2 - i32.and - if - block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - end - local.set $3 - local.get $3 - i32.load - local.set $6 - local.get $6 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 226 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $6 - 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 $3 - call $~lib/rt/tlsf/removeBlock - local.get $3 - local.get $6 - i32.const 3 - i32.and - local.get $7 - i32.or - local.tee $2 - i32.store - local.get $3 - 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 128 - i32.const 241 - 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 128 - i32.const 242 - 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 128 - i32.const 258 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) - local.get $0 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.set $7 - local.get $3 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - 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 - block $~lib/rt/tlsf/SETHEAD|inlined.2 - local.get $0 - local.set $12 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $1 - local.set $7 - local.get $12 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - end - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $9 - i32.shl - i32.or - i32.store - block $~lib/rt/tlsf/SETSL|inlined.2 - local.get $0 - local.set $3 - local.get $9 - local.set $6 - block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - i32.const 1 - local.get $10 - i32.shl - i32.or - local.set $7 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=4 - end - ) - (func $~lib/rt/tlsf/addMemory (; 6 ;) (type $FUNCSIG$iiii) (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 128 - i32.const 384 - i32.const 4 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - end - 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 128 - i32.const 394 - 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 128 - i32.const 406 - 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 2 - i32.const 16 - i32.mul - 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 - block $~lib/rt/tlsf/SETTAIL|inlined.1 - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - end - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initializeRoot (; 7 ;) (type $FUNCSIG$v) - (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) - global.get $~lib/builtins/HEAP_BASE - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - current_memory - local.set $1 - local.get $0 - 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 $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - grow_memory - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - i32.store - block $~lib/rt/tlsf/SETTAIL|inlined.0 - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - end - block $break|0 - i32.const 0 - local.set $4 - loop $repeat|0 - local.get $4 - i32.const 23 - i32.lt_u - i32.eqz - br_if $break|0 - block $~lib/rt/tlsf/SETSL|inlined.0 - local.get $3 - local.set $7 - local.get $4 - local.set $6 - i32.const 0 - local.set $5 - local.get $7 - local.get $6 - i32.const 2 - i32.shl - i32.add - local.get $5 - i32.store offset=4 - end - block $break|1 - i32.const 0 - local.set $5 - loop $repeat|1 - local.get $5 - i32.const 16 - i32.lt_u - i32.eqz - br_if $break|1 - block $~lib/rt/tlsf/SETHEAD|inlined.0 - local.get $3 - local.set $9 - local.get $4 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $repeat|1 - unreachable - end - unreachable - end - local.get $4 - i32.const 1 - i32.add - local.set $4 - br $repeat|0 - unreachable - end - unreachable - end - local.get $3 - local.get $0 - i32.const 1572 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - current_memory - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/prepareSize (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - local.get $0 - i32.const 1073741808 - i32.ge_u - if - i32.const 176 - i32.const 128 - i32.const 446 - 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 (; 9 ;) (type $FUNCSIG$iii) (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 128 - i32.const 336 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) - 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 - end - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - 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 $4 - local.get $4 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $4 - i32.ctz - local.set $2 - block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $8 - local.get $5 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - end - local.set $6 - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 349 - i32.const 17 - call $~lib/builtins/abort - unreachable - end - block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $5 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $5 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - else - block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) - local.get $0 - local.set $8 - local.get $2 - local.set $5 - local.get $6 - i32.ctz - local.set $4 - local.get $8 - local.get $5 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - end - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - current_memory - local.set $2 - 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 $3 - local.get $2 - local.tee $4 - local.get $3 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - grow_memory - i32.const 0 - i32.lt_s - if - local.get $3 - grow_memory - i32.const 0 - i32.lt_s - if - unreachable - end - end - current_memory - 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 (; 11 ;) (type $FUNCSIG$viii) (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 128 - i32.const 363 - 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 - block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) - 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 - end - block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) - 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 - end - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - i32.store - end - ) - (func $~lib/rt/tlsf/allocateBlock (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - 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 - 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 128 - i32.const 476 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - end - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 128 - i32.const 478 - 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 - ) - (func $~lib/rt/tlsf/__alloc (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $2 - local.get $2 - i32.eqz - if - call $~lib/rt/tlsf/initializeRoot - global.get $~lib/rt/tlsf/ROOT - local.set $2 - end - local.get $2 - local.get $0 - call $~lib/rt/tlsf/allocateBlock - local.set $3 - local.get $3 - local.get $1 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.fill (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.fill (; 4 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1647,7 +304,7 @@ end end ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/arraybuffer/ArrayBuffer#constructor (; 5 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $1 i32.const 1073741808 @@ -1669,16 +326,16 @@ local.get $1 call $~lib/memory/memory.fill local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/set/Set#clear (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 6 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -1694,7 +351,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -1710,7 +367,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -1718,7 +375,7 @@ i32.const 24 i32.const 17 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -1744,14 +401,14 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash8 (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/hash/hash8 (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const -2128831035 local.get $0 i32.xor i32.const 16777619 i32.mul ) - (func $~lib/set/Set#find (; 19 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 9 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -1802,7 +459,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -1821,7 +478,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -1937,7 +594,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -1947,7 +604,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -1957,11 +614,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2060,11 +717,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2140,7 +797,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 25 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 15 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) i32.const 0 @@ -2162,7 +819,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -2177,7 +834,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -2199,7 +856,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -2220,7 +877,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -2235,7 +892,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -2257,7 +914,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -2278,7 +935,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -2295,7 +952,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -2317,7 +974,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -2339,7 +996,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -2354,7 +1011,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -2371,7 +1028,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -2393,7 +1050,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -2408,23 +1065,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 26 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 16 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -2440,7 +1097,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -2456,7 +1113,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -2464,7 +1121,7 @@ i32.const 24 i32.const 18 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -2490,7 +1147,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 18 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -2539,7 +1196,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -2556,7 +1213,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2672,7 +1329,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -2682,7 +1339,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -2692,11 +1349,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2793,11 +1450,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2871,7 +1528,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 34 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 24 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) i32.const 0 @@ -2893,7 +1550,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -2908,7 +1565,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -2930,7 +1587,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -2951,7 +1608,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -2966,7 +1623,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -2988,7 +1645,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -3009,7 +1666,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -3026,7 +1683,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -3048,7 +1705,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -3070,7 +1727,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -3085,7 +1742,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -3102,7 +1759,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -3124,7 +1781,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -3139,23 +1796,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 35 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 25 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -3171,7 +1828,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -3187,7 +1844,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -3195,7 +1852,7 @@ i32.const 24 i32.const 19 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -3221,7 +1878,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash16 (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/hash/hash16 (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) i32.const -2128831035 local.set $1 @@ -3243,7 +1900,7 @@ local.set $1 local.get $1 ) - (func $~lib/set/Set#find (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -3294,7 +1951,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -3313,7 +1970,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 40 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3429,7 +2086,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -3439,7 +2096,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -3449,11 +2106,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 41 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3552,11 +2209,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3632,7 +2289,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 44 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 34 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) i32.const 0 @@ -3654,7 +2311,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -3669,7 +2326,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -3691,7 +2348,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -3712,7 +2369,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -3727,7 +2384,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -3749,7 +2406,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -3770,7 +2427,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -3787,7 +2444,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -3809,7 +2466,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -3831,7 +2488,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -3846,7 +2503,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -3863,7 +2520,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -3885,7 +2542,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -3900,23 +2557,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 45 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 35 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -3932,7 +2589,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -3948,7 +2605,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -3956,7 +2613,7 @@ i32.const 24 i32.const 20 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -3982,7 +2639,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 37 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -4031,7 +2688,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -4048,7 +2705,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 49 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 39 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4164,7 +2821,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -4174,7 +2831,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -4184,11 +2841,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 50 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 40 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4285,11 +2942,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 52 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 42 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4363,7 +3020,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 53 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 43 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) i32.const 0 @@ -4385,7 +3042,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -4400,7 +3057,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -4422,7 +3079,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -4443,7 +3100,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -4458,7 +3115,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -4480,7 +3137,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -4501,7 +3158,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -4518,7 +3175,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -4540,7 +3197,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -4562,7 +3219,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -4577,7 +3234,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -4594,7 +3251,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -4616,7 +3273,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -4631,23 +3288,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 54 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 44 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -4663,7 +3320,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -4679,7 +3336,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 45 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -4687,7 +3344,7 @@ i32.const 24 i32.const 21 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -4713,7 +3370,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash32 (; 56 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/hash/hash32 (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) i32.const -2128831035 local.set $1 @@ -4755,7 +3412,7 @@ local.set $1 local.get $1 ) - (func $~lib/set/Set#find (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -4802,7 +3459,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -4817,7 +3474,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 59 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 49 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4933,7 +3590,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -4943,7 +3600,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -4953,11 +3610,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 60 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 50 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5052,11 +3709,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 61 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 52 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5128,7 +3785,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 63 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 53 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) i32.const 0 @@ -5150,7 +3807,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -5165,7 +3822,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -5187,7 +3844,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -5208,7 +3865,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -5223,7 +3880,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -5245,7 +3902,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -5266,7 +3923,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -5283,7 +3940,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -5305,7 +3962,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -5327,7 +3984,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -5342,7 +3999,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -5359,7 +4016,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -5381,7 +4038,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -5396,23 +4053,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 64 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 54 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -5428,7 +4085,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -5444,7 +4101,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 65 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -5452,7 +4109,7 @@ i32.const 24 i32.const 22 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -5478,7 +4135,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 66 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -5525,7 +4182,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 67 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#has (; 57 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -5540,7 +4197,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 68 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 58 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5656,7 +4313,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -5666,7 +4323,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -5676,11 +4333,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 69 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#add (; 59 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5775,11 +4432,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 70 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 60 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 71 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/set/Set#delete (; 61 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5851,7 +4508,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 72 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 62 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) i32.const 0 @@ -5873,7 +4530,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -5888,7 +4545,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -5910,7 +4567,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -5931,7 +4588,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -5946,7 +4603,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -5968,7 +4625,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -5989,7 +4646,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -6006,7 +4663,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -6028,7 +4685,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -6050,7 +4707,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -6065,7 +4722,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -6082,7 +4739,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -6104,7 +4761,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -6119,23 +4776,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 73 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 63 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -6151,7 +4808,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 64 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -6167,7 +4824,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 64 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -6175,7 +4832,7 @@ i32.const 24 i32.const 23 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -6201,7 +4858,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/util/hash/hash64 (; 75 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/hash/hash64 (; 65 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -6289,7 +4946,7 @@ local.set $3 local.get $3 ) - (func $~lib/set/Set#find (; 76 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 66 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -6336,7 +4993,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 77 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#has (; 67 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) (local $2 i64) local.get $0 local.get $1 @@ -6351,7 +5008,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 78 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 68 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6468,7 +5125,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -6478,7 +5135,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -6488,11 +5145,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 79 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64) + (func $~lib/set/Set#add (; 69 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64) (local $2 i64) (local $3 i32) (local $4 i32) @@ -6588,11 +5245,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 80 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 70 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 81 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#delete (; 71 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) (local $2 i64) (local $3 i32) (local $4 i32) @@ -6665,7 +5322,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 82 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 72 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i64) i32.const 0 @@ -6687,7 +5344,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -6702,7 +5359,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -6724,7 +5381,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -6745,7 +5402,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -6760,7 +5417,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -6782,7 +5439,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -6803,7 +5460,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -6820,7 +5477,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -6842,7 +5499,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -6864,7 +5521,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -6879,7 +5536,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -6896,7 +5553,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -6918,7 +5575,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -6933,23 +5590,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 83 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 73 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -6965,7 +5622,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 64 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -6981,7 +5638,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 84 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -6989,7 +5646,7 @@ i32.const 24 i32.const 24 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -7015,7 +5672,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 85 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 75 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -7062,7 +5719,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 86 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#has (; 76 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) (local $2 i64) local.get $0 local.get $1 @@ -7077,7 +5734,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 87 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 77 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7194,7 +5851,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -7204,7 +5861,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -7214,11 +5871,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 88 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64) + (func $~lib/set/Set#add (; 78 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64) (local $2 i64) (local $3 i32) (local $4 i32) @@ -7314,11 +5971,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 89 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 79 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 90 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) + (func $~lib/set/Set#delete (; 80 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32) (local $2 i64) (local $3 i32) (local $4 i32) @@ -7391,7 +6048,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 91 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 81 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i64) i32.const 0 @@ -7413,7 +6070,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -7428,7 +6085,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -7450,7 +6107,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -7471,7 +6128,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -7486,7 +6143,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -7508,7 +6165,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -7529,7 +6186,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -7546,7 +6203,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -7568,7 +6225,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -7590,7 +6247,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -7605,7 +6262,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -7622,7 +6279,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -7644,7 +6301,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -7659,23 +6316,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 92 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 82 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -7691,7 +6348,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 32 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -7707,7 +6364,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 93 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 83 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -7715,7 +6372,7 @@ i32.const 24 i32.const 25 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -7741,7 +6398,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 94 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 84 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -7788,7 +6445,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 95 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32) + (func $~lib/set/Set#has (; 85 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32) (local $2 f32) local.get $0 local.get $1 @@ -7804,7 +6461,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 96 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 86 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7922,7 +6579,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -7932,7 +6589,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -7942,11 +6599,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 97 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32) + (func $~lib/set/Set#add (; 87 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32) (local $2 f32) (local $3 i32) (local $4 i32) @@ -8043,11 +6700,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 98 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 88 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 99 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32) + (func $~lib/set/Set#delete (; 89 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32) (local $2 f32) (local $3 i32) (local $4 i32) @@ -8121,7 +6778,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 100 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 90 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 f32) i32.const 0 @@ -8143,7 +6800,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -8158,7 +6815,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -8180,7 +6837,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -8201,7 +6858,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -8216,7 +6873,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -8238,7 +6895,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -8259,7 +6916,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -8276,7 +6933,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -8298,7 +6955,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -8320,7 +6977,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -8335,7 +6992,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -8352,7 +7009,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -8374,7 +7031,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -8389,23 +7046,23 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#clear (; 101 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#clear (; 91 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 local.tee $1 block (result i32) local.get $1 i32.load - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 16 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -8421,7 +7078,7 @@ block (result i32) local.get $1 i32.load offset=8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 i32.const 64 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -8437,7 +7094,7 @@ i32.const 0 i32.store offset=20 ) - (func $~lib/set/Set#constructor (; 102 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#constructor (; 92 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) block (result i32) local.get $0 i32.eqz @@ -8445,7 +7102,7 @@ i32.const 24 i32.const 26 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 end local.get $0 @@ -8471,7 +7128,7 @@ call $~lib/set/Set#clear local.get $0 ) - (func $~lib/set/Set#find (; 103 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) + (func $~lib/set/Set#find (; 93 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.load @@ -8518,7 +7175,7 @@ end i32.const 0 ) - (func $~lib/set/Set#has (; 104 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/set/Set#has (; 94 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 f64) local.get $0 local.get $1 @@ -8534,7 +7191,7 @@ i32.const 0 i32.ne ) - (func $~lib/set/Set#rehash (; 105 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/set/Set#rehash (; 95 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8652,7 +7309,7 @@ local.get $3 local.get $9 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $1 @@ -8662,7 +7319,7 @@ local.get $5 local.get $9 i32.load offset=8 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store offset=8 local.get $0 local.get $4 @@ -8672,11 +7329,11 @@ i32.load offset=20 i32.store offset=16 local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/set/Set#add (; 106 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64) + (func $~lib/set/Set#add (; 96 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64) (local $2 f64) (local $3 i32) (local $4 i32) @@ -8773,11 +7430,11 @@ i32.store end ) - (func $~lib/set/Set#get:size (; 107 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/set/Set#get:size (; 97 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=20 ) - (func $~lib/set/Set#delete (; 108 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/set/Set#delete (; 98 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 f64) (local $3 i32) (local $4 i32) @@ -8851,7 +7508,7 @@ end i32.const 1 ) - (func $std/set/testNumeric (; 109 ;) (type $FUNCSIG$v) + (func $std/set/testNumeric (; 99 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 f64) i32.const 0 @@ -8873,7 +7530,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 6 i32.const 4 call $~lib/builtins/abort @@ -8888,7 +7545,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 8 i32.const 4 call $~lib/builtins/abort @@ -8910,7 +7567,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 10 i32.const 2 call $~lib/builtins/abort @@ -8931,7 +7588,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 14 i32.const 4 call $~lib/builtins/abort @@ -8946,7 +7603,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 16 i32.const 4 call $~lib/builtins/abort @@ -8968,7 +7625,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 18 i32.const 2 call $~lib/builtins/abort @@ -8989,7 +7646,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 22 i32.const 4 call $~lib/builtins/abort @@ -9006,7 +7663,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 24 i32.const 4 call $~lib/builtins/abort @@ -9028,7 +7685,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 26 i32.const 2 call $~lib/builtins/abort @@ -9050,7 +7707,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 30 i32.const 4 call $~lib/builtins/abort @@ -9065,7 +7722,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 32 i32.const 4 call $~lib/builtins/abort @@ -9082,7 +7739,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 34 i32.const 4 call $~lib/builtins/abort @@ -9104,7 +7761,7 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 36 i32.const 2 call $~lib/builtins/abort @@ -9119,16 +7776,16 @@ i32.eqz if i32.const 0 - i32.const 232 + i32.const 128 i32.const 40 i32.const 2 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $start:std/set (; 110 ;) (type $FUNCSIG$v) + (func $start:std/set (; 100 ;) (type $FUNCSIG$v) call $std/set/testNumeric call $std/set/testNumeric call $std/set/testNumeric @@ -9140,10 +7797,1353 @@ call $std/set/testNumeric call $std/set/testNumeric ) - (func $start (; 111 ;) (type $FUNCSIG$v) + (func $start (; 101 ;) (type $FUNCSIG$v) call $start:std/set ) - (func $~lib/rt/purerc/increment (; 112 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/removeBlock (; 102 ;) (type $FUNCSIG$vii) (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 168 + i32.const 275 + 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 168 + i32.const 277 + 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 168 + i32.const 290 + 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 + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + 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 + end + i32.eq + if + block $~lib/rt/tlsf/SETHEAD|inlined.1 + 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 + end + local.get $7 + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + 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 + end + local.set $8 + block $~lib/rt/tlsf/SETSL|inlined.1 + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $8 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $8 + local.set $9 + local.get $11 + local.get $10 + i32.const 2 + i32.shl + i32.add + local.get $9 + i32.store offset=4 + end + local.get $8 + 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 (; 103 ;) (type $FUNCSIG$vii) (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 168 + i32.const 203 + 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 168 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + 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 + end + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + 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 + end + local.set $4 + local.get $4 + i32.load + local.set $5 + end + end + local.get $2 + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 4 + i32.sub + i32.load + end + local.set $3 + local.get $3 + i32.load + local.set $6 + local.get $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 168 + i32.const 226 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $6 + 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 $3 + call $~lib/rt/tlsf/removeBlock + local.get $3 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $2 + i32.store + local.get $3 + 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 168 + i32.const 241 + 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 168 + i32.const 242 + 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 168 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $0 + local.set $3 + local.get $9 + local.set $6 + local.get $10 + local.set $7 + local.get $3 + local.get $6 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + 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 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $0 + local.set $12 + local.get $9 + local.set $3 + local.get $10 + local.set $6 + local.get $1 + local.set $7 + local.get $12 + local.get $3 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=96 + end + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $9 + i32.shl + i32.or + i32.store + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $0 + local.set $3 + local.get $9 + local.set $6 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $0 + local.set $13 + local.get $9 + local.set $12 + local.get $13 + local.get $12 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + i32.const 1 + local.get $10 + i32.shl + i32.or + local.set $7 + local.get $3 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=4 + end + ) + (func $~lib/rt/tlsf/addMemory (; 104 ;) (type $FUNCSIG$iiii) (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 168 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 168 + i32.const 394 + 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 168 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 105 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.0 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.0 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 106 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 216 + i32.const 168 + i32.const 446 + 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 (; 107 ;) (type $FUNCSIG$iii) (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 168 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 168 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 108 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 109 ;) (type $FUNCSIG$viii) (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 168 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 110 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 168 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 168 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 111 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) + (func $~lib/rt/pure/increment (; 112 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -9176,7 +9176,7 @@ i32.add i32.store offset=4 local.get $0 - call $~lib/rt/purerc/onIncrement + call $~lib/rt/pure/onIncrement local.get $0 i32.load i32.const 1 @@ -9192,15 +9192,15 @@ unreachable end ) - (func $~lib/rt/purerc/__retain (; 113 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/pure/__retain (; 113 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/increment + call $~lib/rt/pure/increment end local.get $0 ) @@ -9216,7 +9216,7 @@ i32.eqz if i32.const 0 - i32.const 128 + i32.const 168 i32.const 530 i32.const 2 call $~lib/builtins/abort @@ -9233,9 +9233,9 @@ local.get $1 call $~lib/rt/tlsf/onFree ) - (func $~lib/rt/common/__typeinfo (; 115 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__typeinfo (; 115 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) - global.get $~lib/builtins/RTTI_BASE + global.get $~lib/rt/RTTI_BASE local.set $1 local.get $0 i32.eqz @@ -9248,9 +9248,9 @@ i32.gt_u end if - i32.const 328 - i32.const 384 - i32.const 55 + i32.const 320 + i32.const 376 + i32.const 23 i32.const 34 call $~lib/builtins/abort unreachable @@ -9468,16 +9468,16 @@ end end ) - (func $~lib/rt/purerc/growRoots (; 117 ;) (type $FUNCSIG$v) + (func $~lib/rt/pure/growRoots (; 117 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/purerc/ROOTS + global.get $~lib/rt/pure/ROOTS local.set $0 - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.get $0 i32.sub local.set $1 @@ -9503,26 +9503,26 @@ local.get $1 call $~lib/memory/memory.copy local.get $5 - global.set $~lib/rt/purerc/ROOTS + global.set $~lib/rt/pure/ROOTS local.get $5 local.get $1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR local.get $5 local.get $4 i32.add - global.set $~lib/rt/purerc/END + global.set $~lib/rt/pure/END ) - (func $~lib/rt/purerc/appendRoot (; 118 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/appendRoot (; 118 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) - global.get $~lib/rt/purerc/CUR + global.get $~lib/rt/pure/CUR local.set $1 local.get $1 - global.get $~lib/rt/purerc/END + global.get $~lib/rt/pure/END i32.ge_u if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR + call $~lib/rt/pure/growRoots + global.get $~lib/rt/pure/CUR local.set $1 end local.get $1 @@ -9531,9 +9531,9 @@ local.get $1 i32.const 1 i32.add - global.set $~lib/rt/purerc/CUR + global.set $~lib/rt/pure/CUR ) - (func $~lib/rt/purerc/decrement (; 119 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/decrement (; 119 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 @@ -9544,7 +9544,7 @@ i32.and local.set $2 local.get $0 - call $~lib/rt/purerc/onDecrement + call $~lib/rt/pure/onDecrement local.get $0 i32.load i32.const 1 @@ -9567,7 +9567,7 @@ i32.const 16 i32.add i32.const 1 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members local.get $1 i32.const -2147483648 i32.and @@ -9600,7 +9600,7 @@ end local.get $0 i32.load offset=8 - call $~lib/rt/common/__typeinfo + call $~lib/rt/__typeinfo i32.const 8 i32.and i32.eqz @@ -9620,7 +9620,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/appendRoot + call $~lib/rt/pure/appendRoot end else local.get $0 @@ -9637,13 +9637,13 @@ end end ) - (func $~lib/rt/purerc/__retainRelease (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/pure/__retainRelease (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 i32.ne if - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE local.set $2 local.get $0 local.get $2 @@ -9652,7 +9652,7 @@ local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/increment + call $~lib/rt/pure/increment end local.get $1 local.get $2 @@ -9661,23 +9661,153 @@ local.get $1 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end end local.get $0 ) - (func $~lib/rt/purerc/__release (; 121 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/__release (; 121 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.gt_u if local.get $0 i32.const 16 i32.sub - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement end ) - (func $~lib/rt/purerc/markGray (; 122 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/set/Set#__visit_impl (; 122 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 123 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 124 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 125 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 126 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 127 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 128 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 129 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 130 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/set/Set#__visit_impl (; 131 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.get $1 + call $~lib/rt/pure/__visit + local.get $0 + i32.load offset=8 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + ) + (func $~lib/rt/pure/markGray (; 132 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -9701,10 +9831,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 123 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 133 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -9719,9 +9849,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 124 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 134 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -9739,7 +9869,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -9754,11 +9884,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 125 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 135 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -9781,17 +9911,17 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 126 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 136 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -9833,7 +9963,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -9862,7 +9992,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -9870,7 +10000,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -9914,7 +10044,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -9923,7 +10053,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -9941,137 +10071,7 @@ end end ) - (func $~lib/set/Set#__visit_impl (; 127 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 128 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 129 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 130 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 131 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 132 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 133 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 134 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 135 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/set/Set#__visit_impl (; 136 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - i32.load - local.get $1 - call $~lib/rt/purerc/__visit - local.get $0 - i32.load offset=8 - local.set $2 - local.get $2 - local.get $1 - call $~lib/rt/purerc/__visit - ) - (func $~lib/builtins/__visit_members (; 137 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 137 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block end @@ -10124,7 +10124,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 82aea92d..d20b7737 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -2,200 +2,200 @@ (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$v (func)) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$di (func (param i32) (result f64))) - (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$ij (func (param i64) (result i32))) (type $FUNCSIG$viji (func (param i32 i64 i32))) (type $FUNCSIG$id (func (param f64) (result i32))) (type $FUNCSIG$iid (func (param i32 f64) (result i32))) (type $FUNCSIG$iijijiji (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (memory $0 1) (data (i32.const 8) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g") (data (i32.const 56) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") (data (i32.const 108) "\01\00\00\00\10") (data (i32.const 120) "\02\00\00\00\01\00\00\00\10\00\00\00\02") (data (i32.const 144) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a") - (data (i32.const 168) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") - (data (i32.const 216) "(\00\00\00\01\00\00\00\10\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 272) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\006") - (data (i32.const 296) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 344) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\004\d8\06\df") - (data (i32.const 368) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00h\00i") - (data (i32.const 392) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l") - (data (i32.const 416) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00s\00t\00r\00i\00n\00g") - (data (i32.const 448) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00I\00\'\00m") - (data (i32.const 472) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00 ") - (data (i32.const 496) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00 \00 \00 ") - (data (i32.const 520) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c") - (data (i32.const 544) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00 \00 \00a\00b\00c") - (data (i32.const 576) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\002\003") - (data (i32.const 600) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\00a\00b\00c") - (data (i32.const 632) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\002\003\001\002\00a\00b\00c") - (data (i32.const 664) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00b\00c\00 \00 ") - (data (i32.const 696) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00b\00c\00a\00b\00c") - (data (i32.const 728) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00c\00a\00b\00c\00a\00b") - (data (i32.const 760) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,") - (data (i32.const 784) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00x") - (data (i32.const 808) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00,\00 \00I") - (data (i32.const 832) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00g") - (data (i32.const 856) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00i") - (data (i32.const 880) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000") - (data (i32.const 904) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001") - (data (i32.const 928) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00b\001\000\001") - (data (i32.const 960) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00o\007\000\007") - (data (i32.const 992) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00f\000\00f") - (data (i32.const 1024) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00F\000\00F") - (data (i32.const 1056) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\001\001") - (data (i32.const 1080) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\000\00x\001\00g") - (data (i32.const 1104) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\001") - (data (i32.const 1128) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00.\002\005") - (data (i32.const 1152) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00.\001\00f\00o\00o\00b\00a\00r") - (data (i32.const 1184) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b") - (data (i32.const 1208) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b") - (data (i32.const 1232) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\001") - (data (i32.const 1256) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\002") - (data (i32.const 1280) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\001") - (data (i32.const 1304) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\002") - (data (i32.const 1328) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\002") - (data (i32.const 1360) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\001") - (data (i32.const 1392) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a40\ed0\cf0\cb0\db0\d80\c80") - (data (i32.const 1424) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a60\f00\ce0\aa0\af0\e40\de0") - (data (i32.const 1456) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00D\00\19 f\00h\00u\00a\00s\00c\00a\00i\00l") - (data (i32.const 1496) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00D\00\19 \1f\1eu\00a\00s\00c\00a\00i\00l") - (data (i32.const 1536) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a") - (data (i32.const 1560) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00a") - (data (i32.const 1584) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 1632) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00a\00a") - (data (i32.const 1656) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00a\00b\00a\00b\00a\00b") - (data (i32.const 1688) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00a\00a\00a\00a") - (data (i32.const 1720) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00a\00a\00a\00a\00a") - (data (i32.const 1752) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00a\00a\00a\00a\00a\00a\00a") - (data (i32.const 1784) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n") - (data (i32.const 1832) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00n") - (data (i32.const 1856) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00j\00k\00l\00m\00n") - (data (i32.const 1888) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00c\00d\00e\00f\00g") - (data (i32.const 1920) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00e\00f\00g\00h") - (data (i32.const 1952) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m") - (data (i32.const 2000) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s") - (data (i32.const 2056) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 2104) "$\00\00\00\01\00\00\00\10\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 2160) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s") - (data (i32.const 2216) "^\00\00\00\01\00\00\00\10\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") - (data (i32.const 2328) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00,\00b\00,\00c") - (data (i32.const 2360) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00.") - (data (i32.const 2384) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00c") - (data (i32.const 2408) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009") - (data (i32.const 2824) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00x\t\00\00x\t\00\00\90\01\00\00d") - (data (i32.const 2856) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\008") - (data (i32.const 2880) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\000\000\000") - (data (i32.const 2912) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\002\003\004") - (data (i32.const 2936) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\003\004\005") - (data (i32.const 2968) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\004\005\006") - (data (i32.const 3000) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\001\001\001\001\001\001") - (data (i32.const 3032) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\002\003\004\005\006\007") - (data (i32.const 3064) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\006") - (data (i32.const 3104) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\007") - (data (i32.const 3144) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\002\001\004\007\004\008\003\006\004\008") - (data (i32.const 3184) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00-\001") - (data (i32.const 3208) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\000\000\000") - (data (i32.const 3232) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\008") - (data (i32.const 3272) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\005") - (data (i32.const 3312) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\009\009\009\009\009\009\009\009") - (data (i32.const 3344) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\000\000") - (data (i32.const 3384) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3424) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3464) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3512) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3560) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3616) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005") - (data (i32.const 3672) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\002\003\004") - (data (i32.const 3704) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\004\002\009\004\009\006\007\002\009\005") - (data (i32.const 3744) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00-\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3784) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3832) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3880) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005") - (data (i32.const 3936) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007") - (data (i32.const 3992) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008") - (data (i32.const 4048) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000") - (data (i32.const 4072) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N") - (data (i32.const 4096) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 4136) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y") - (data (i32.const 4168) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8 (; 27 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) + (func $~lib/util/string/parse (; 17 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2119,7 +1127,7 @@ (local $5 f64) (local $6 f64) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner0 local.get $0 @@ -2163,7 +1171,7 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release f64.const nan:0x8000000000000 return end @@ -2335,29 +1343,29 @@ end end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 local.get $5 f64.mul return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release f64.const nan:0x8000000000000 ) - (func $~lib/string/parseInt (; 28 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) + (func $~lib/string/parseInt (; 18 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) (local $1 f64) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 call $~lib/util/string/parse local.set $1 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/string/parseFloat (; 29 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) + (func $~lib/string/parseFloat (; 19 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2365,7 +1373,7 @@ (local $5 f64) (local $6 f64) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner0 local.get $0 @@ -2462,7 +1470,7 @@ end if i32.const 0 - i32.const 312 + i32.const 208 i32.const 572 i32.const 10 call $~lib/builtins/abort @@ -2519,30 +1527,30 @@ end end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 local.get $4 f64.mul return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release f64.const nan:0x8000000000000 ) - (func $~lib/string/String#concat (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#concat (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block (result i32) local.get $1 i32.eqz if - i32.const 408 + i32.const 304 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 end local.get $1 @@ -2569,17 +1577,17 @@ end if i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end local.get $2 i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $2 local.get $0 local.get $3 @@ -2591,37 +1599,37 @@ local.get $4 call $~lib/memory/memory.copy local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__concat (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__concat (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 - i32.const 408 + i32.const 304 local.get $0 select local.get $1 call $~lib/string/String#concat local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__ne (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__ne (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -2629,19 +1637,19 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__gt (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gt (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner0 i32.const 1 @@ -2676,9 +1684,9 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 return end @@ -2696,26 +1704,26 @@ i32.gt_s local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 ) - (func $~lib/string/String.__lt (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lt (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop block $folding-inner0 i32.const 1 @@ -2750,9 +1758,9 @@ i32.eqz if local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 1 return end @@ -2770,25 +1778,25 @@ i32.lt_s local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 ) - (func $~lib/string/String.__gte (; 35 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gte (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -2796,18 +1804,18 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__lte (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/string/String.__lte (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop i32.const 120 local.get $0 @@ -2815,19 +1823,19 @@ i32.eqz local.set $1 i32.const 120 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/string/String#repeat (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#repeat (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 i32.eqz if i32.const 0 - i32.const 312 + i32.const 208 i32.const 330 i32.const 4 call $~lib/builtins/abort @@ -2855,8 +1863,8 @@ i64.gt_u end if - i32.const 1600 - i32.const 312 + i32.const 1496 + i32.const 208 i32.const 335 i32.const 6 call $~lib/builtins/abort @@ -2869,7 +1877,7 @@ select if i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $1 @@ -2877,7 +1885,7 @@ i32.eq if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $1 @@ -2895,9 +1903,9 @@ local.get $1 call $~lib/memory/memory.repeat local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/string/String#slice (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#slice (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 i32.const 16 @@ -2956,7 +1964,7 @@ i32.le_s if i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $2 @@ -2974,62 +1982,9 @@ local.get $2 call $~lib/memory/memory.copy local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/rt/purerc/increment (; 39 ;) (type $FUNCSIG$vi) (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 2016 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 2016 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - i32.const 7144 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/common/__allocArray (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/rt/__allocArray (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3044,7 +1999,7 @@ i32.const 15 call $~lib/rt/tlsf/__alloc local.tee $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $1 local.get $3 @@ -3057,159 +2012,7 @@ i32.store offset=12 local.get $1 ) - (func $~lib/rt/tlsf/reallocateBlock (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - local.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.tee $4 - i32.const 1 - i32.and - if - i32.const 0 - i32.const 184 - i32.const 491 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - local.get $1 - i32.const 16 - i32.add - local.get $1 - i32.load - i32.const -4 - i32.and - i32.add - local.tee $6 - i32.load - local.tee $5 - i32.const 1 - i32.and - if - local.get $4 - i32.const -4 - i32.and - i32.const 16 - i32.add - local.get $5 - i32.const -4 - i32.and - i32.add - local.tee $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 - i32.load offset=4 - i32.store offset=4 - local.get $3 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $3 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $1 - call $~lib/rt/tlsf/onFree - local.get $3 - ) - (func $~lib/rt/tlsf/__realloc (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 184 - i32.const 552 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 184 - i32.const 553 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.fill (; 44 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/memory/memory.fill (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block $~lib/util/memory/memset|inlined.0 local.get $1 @@ -3420,7 +2223,7 @@ end end ) - (func $~lib/array/ensureSize (; 45 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/ensureSize (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3436,8 +2239,8 @@ i32.const 268435452 i32.gt_u if - i32.const 1600 - i32.const 2072 + i32.const 1496 + i32.const 1912 i32.const 14 i32.const 47 call $~lib/builtins/abort @@ -3464,7 +2267,7 @@ if local.get $0 local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $0 local.get $1 @@ -3475,233 +2278,11 @@ i32.store offset=8 end ) - (func $~lib/rt/tlsf/freeBlock (; 46 ;) (type $FUNCSIG$vii) (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 184 - i32.const 530 - 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/tlsf/onFree - ) - (func $~lib/rt/common/__typeinfo (; 47 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - if (result i32) - local.get $0 - i32.const 6968 - i32.load - i32.gt_u - else - i32.const 1 - end - if - i32.const 2120 - i32.const 2176 - i32.const 55 - i32.const 34 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 3 - i32.shl - i32.const 6968 - i32.add - i32.load - ) - (func $~lib/rt/purerc/growRoots (; 48 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - global.get $~lib/rt/purerc/CUR - global.get $~lib/rt/purerc/ROOTS - local.tee $2 - i32.sub - local.tee $1 - 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 - local.get $2 - local.get $1 - call $~lib/memory/memory.copy - local.get $0 - global.set $~lib/rt/purerc/ROOTS - local.get $0 - local.get $1 - i32.add - global.set $~lib/rt/purerc/CUR - local.get $0 - local.get $3 - i32.add - global.set $~lib/rt/purerc/END - ) - (func $~lib/rt/purerc/appendRoot (; 49 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.tee $1 - global.get $~lib/rt/purerc/END - i32.ge_u - if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 1 - i32.add - global.set $~lib/rt/purerc/CUR - ) - (func $~lib/rt/purerc/decrement (; 50 ;) (type $FUNCSIG$vi) (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/purerc/onDecrement - local.get $0 - i32.load - i32.const 1 - i32.and - if - i32.const 0 - i32.const 2016 - i32.const 114 - 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/builtins/__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 2016 - i32.const 123 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/common/__typeinfo - i32.const 8 - 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/purerc/appendRoot - end - end - end - ) - (func $~lib/rt/purerc/__retainRelease (; 51 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - local.get $0 - local.get $1 - i32.ne - if - local.get $0 - i32.const 7144 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $1 - i32.const 7144 - i32.gt_u - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - end - local.get $0 - ) - (func $~lib/array/Array<~lib/string/String>#push (; 52 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/string/String>#push (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $0 @@ -3721,15 +2302,15 @@ local.get $1 local.get $2 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $3 i32.store offset=12 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $~lib/string/String#split (; 53 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#split (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3739,13 +2320,13 @@ (local $8 i32) (local $9 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.eqz if i32.const 0 - i32.const 312 + i32.const 208 i32.const 357 i32.const 4 call $~lib/builtins/abort @@ -3757,14 +2338,14 @@ i32.eqz if i32.const 1 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.tee $2 i32.load offset=4 local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain br $folding-inner1 end local.get $0 @@ -3789,13 +2370,13 @@ i32.eqz if i32.const 1 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.tee $0 i32.load offset=4 i32.const 120 i32.store local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain br $folding-inner1 end else @@ -3809,7 +2390,7 @@ i32.lt_s select local.tee $3 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.tee $5 i32.load offset=4 local.set $6 @@ -3837,7 +2418,7 @@ local.get $4 i32.store local.get $4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $2 i32.const 1 @@ -3847,12 +2428,12 @@ end end local.get $5 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain br $folding-inner1 end i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $2 loop $continue|1 local.get $0 @@ -3946,27 +2527,27 @@ br $folding-inner2 end i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain end local.set $0 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 return end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/array/Array<~lib/string/String>#__get (; 54 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__get (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if - i32.const 2232 - i32.const 2072 + i32.const 1960 + i32.const 1912 i32.const 97 i32.const 45 call $~lib/builtins/abort @@ -3979,8 +2560,8 @@ i32.shr_u i32.ge_u if - i32.const 2120 i32.const 2072 + i32.const 1912 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -3993,9 +2574,9 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/decimalCount32 (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/decimalCount32 (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 100000 i32.lt_u @@ -4049,10 +2630,10 @@ end end ) - (func $~lib/util/number/utoa32_lut (; 56 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/number/utoa32_lut (; 36 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) - i32.const 2844 + i32.const 2628 i32.load local.set $3 loop $continue|0 @@ -4159,15 +2740,15 @@ i32.store16 end ) - (func $~lib/util/number/itoa32 (; 57 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa32 (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) local.get $0 i32.eqz if - i32.const 896 - call $~lib/rt/purerc/__retain + i32.const 792 + call $~lib/rt/pure/__retain return end local.get $0 @@ -4200,16 +2781,16 @@ i32.store16 end local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/utoa32 (; 58 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/utoa32 (; 38 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 i32.eqz if - i32.const 896 - call $~lib/rt/purerc/__retain + i32.const 792 + call $~lib/rt/pure/__retain return end local.get $0 @@ -4224,9 +2805,9 @@ local.get $1 call $~lib/util/number/utoa32_lut local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/decimalCount64 (; 59 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/decimalCount64 (; 39 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) local.get $0 i64.const 1000000000000000 i64.lt_u @@ -4280,12 +2861,12 @@ end end ) - (func $~lib/util/number/utoa64_lut (; 60 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/util/number/utoa64_lut (; 40 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - i32.const 2844 + i32.const 2628 i32.load local.set $3 loop $continue|0 @@ -4377,15 +2958,15 @@ local.get $2 call $~lib/util/number/utoa32_lut ) - (func $~lib/util/number/utoa64 (; 61 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/utoa64 (; 41 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) local.get $0 i64.eqz if - i32.const 896 - call $~lib/rt/purerc/__retain + i32.const 792 + call $~lib/rt/pure/__retain return end local.get $0 @@ -4419,9 +3000,9 @@ call $~lib/util/number/utoa64_lut end local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa64 (; 62 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa64 (; 42 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4429,8 +3010,8 @@ local.get $0 i64.eqz if - i32.const 896 - call $~lib/rt/purerc/__retain + i32.const 792 + call $~lib/rt/pure/__retain return end block (result i32) @@ -4486,9 +3067,9 @@ i32.store16 end local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/genDigits (; 63 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/util/number/genDigits (; 43 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) (local $7 i32) (local $8 i32) (local $9 i64) @@ -4523,7 +3104,7 @@ local.tee $7 call $~lib/util/number/decimalCount32 local.set $4 - i32.const 5212 + i32.const 4996 i32.load local.set $13 loop $continue|0 @@ -4893,7 +3474,7 @@ local.get $6 end ) - (func $~lib/util/number/prettify (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/prettify (; 44 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $2 i32.eqz @@ -5144,7 +3725,7 @@ end end ) - (func $~lib/util/number/dtoa_core (; 65 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/util/number/dtoa_core (; 45 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i32) (local $4 i64) @@ -5260,7 +3841,7 @@ i32.shl i32.sub global.set $~lib/util/number/_K - i32.const 4900 + i32.const 4684 i32.load local.get $3 i32.const 3 @@ -5268,7 +3849,7 @@ i32.add i64.load global.set $~lib/util/number/_frc_pow - i32.const 5124 + i32.const 4908 i32.load local.get $3 i32.const 1 @@ -5432,14 +4013,14 @@ local.get $10 i32.add ) - (func $~lib/string/String#substring (; 66 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#substring (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 i32.eqz if i32.const 0 - i32.const 312 + i32.const 208 i32.const 196 i32.const 4 call $~lib/builtins/abort @@ -5492,7 +4073,7 @@ i32.eqz if i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $3 @@ -5512,7 +4093,7 @@ end if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $2 @@ -5525,50 +4106,17 @@ local.get $2 call $~lib/memory/memory.copy local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/rt/tlsf/__free (; 67 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 184 - i32.const 560 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 184 - i32.const 561 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/util/number/dtoa (; 68 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/util/number/dtoa (; 47 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) (local $1 i32) (local $2 i32) local.get $0 f64.const 0 f64.eq if - i32.const 4064 - call $~lib/rt/purerc/__retain + i32.const 3848 + call $~lib/rt/pure/__retain return end local.get $0 @@ -5581,17 +4129,17 @@ local.get $0 f64.ne if - i32.const 4088 - call $~lib/rt/purerc/__retain + i32.const 3872 + call $~lib/rt/pure/__retain return end - i32.const 4112 - i32.const 4152 + i32.const 3896 + i32.const 3936 local.get $0 f64.const 0 f64.lt select - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end i32.const 56 @@ -5605,7 +4153,7 @@ i32.eq if local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $1 @@ -5616,18 +4164,7 @@ call $~lib/rt/tlsf/__free local.get $2 ) - (func $~lib/rt/purerc/__release (; 69 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - i32.const 7144 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - ) - (func $start:std/string (; 70 ;) (type $FUNCSIG$v) + (func $start:std/string (; 48 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -5864,7 +4401,7 @@ i32.const 54 call $~lib/string/String.fromCharCode local.tee $7 - i32.const 288 + i32.const 184 call $~lib/string/String.__eq i32.eqz if @@ -5878,7 +4415,7 @@ i32.const 65590 call $~lib/string/String.fromCharCode local.tee $8 - i32.const 288 + i32.const 184 call $~lib/string/String.__eq i32.eqz if @@ -5906,7 +4443,7 @@ i32.const 54 call $~lib/string/String.fromCodePoint local.tee $10 - i32.const 288 + i32.const 184 call $~lib/string/String.__eq i32.eqz if @@ -5922,7 +4459,7 @@ local.tee $11 i32.eqz if - i32.const 360 + i32.const 256 i32.const 72 i32.const 23 i32.const 0 @@ -5952,8 +4489,8 @@ unreachable end global.get $std/string/str - i32.const 464 - call $~lib/rt/purerc/__retain + i32.const 360 + call $~lib/rt/pure/__retain local.tee $0 i32.const 0 call $~lib/string/String#indexOf @@ -5961,7 +4498,7 @@ i32.ne local.set $1 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 i32.eqz if @@ -5974,7 +4511,7 @@ end global.get $std/string/str i32.const 0 - i32.const 488 + i32.const 384 call $~lib/string/String#padStart local.tee $12 global.get $std/string/str @@ -5990,7 +4527,7 @@ end global.get $std/string/str i32.const 15 - i32.const 488 + i32.const 384 call $~lib/string/String#padStart local.tee $13 global.get $std/string/str @@ -6006,10 +4543,10 @@ end i32.const 120 i32.const 3 - i32.const 488 + i32.const 384 call $~lib/string/String#padStart local.tee $14 - i32.const 512 + i32.const 408 call $~lib/string/String.__eq i32.eqz if @@ -6052,12 +4589,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 5 - i32.const 488 + i32.const 384 call $~lib/string/String#padStart local.tee $17 - i32.const 560 + i32.const 456 call $~lib/string/String.__eq i32.eqz if @@ -6068,12 +4605,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 6 - i32.const 592 + i32.const 488 call $~lib/string/String#padStart local.tee $18 - i32.const 616 + i32.const 512 call $~lib/string/String.__eq i32.eqz if @@ -6084,12 +4621,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 8 - i32.const 592 + i32.const 488 call $~lib/string/String#padStart local.tee $19 - i32.const 648 + i32.const 544 call $~lib/string/String.__eq i32.eqz if @@ -6102,7 +4639,7 @@ end global.get $std/string/str i32.const 0 - i32.const 488 + i32.const 384 call $~lib/string/String#padEnd local.tee $20 global.get $std/string/str @@ -6118,7 +4655,7 @@ end global.get $std/string/str i32.const 15 - i32.const 488 + i32.const 384 call $~lib/string/String#padEnd local.tee $21 global.get $std/string/str @@ -6134,10 +4671,10 @@ end i32.const 120 i32.const 3 - i32.const 488 + i32.const 384 call $~lib/string/String#padEnd local.tee $22 - i32.const 512 + i32.const 408 call $~lib/string/String.__eq i32.eqz if @@ -6180,12 +4717,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 5 - i32.const 488 + i32.const 384 call $~lib/string/String#padEnd local.tee $25 - i32.const 680 + i32.const 576 call $~lib/string/String.__eq i32.eqz if @@ -6196,12 +4733,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 6 - i32.const 536 + i32.const 432 call $~lib/string/String#padEnd local.tee $26 - i32.const 712 + i32.const 608 call $~lib/string/String.__eq i32.eqz if @@ -6212,12 +4749,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 8 - i32.const 536 + i32.const 432 call $~lib/string/String#padEnd local.tee $27 - i32.const 744 + i32.const 640 call $~lib/string/String.__eq i32.eqz if @@ -6241,7 +4778,7 @@ unreachable end i32.const 120 - i32.const 384 + i32.const 280 i32.const 0 call $~lib/string/String#indexOf i32.const -1 @@ -6292,7 +4829,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 0 call $~lib/string/String#indexOf i32.const 2 @@ -6306,7 +4843,7 @@ unreachable end global.get $std/string/str - i32.const 800 + i32.const 696 i32.const 0 call $~lib/string/String#indexOf i32.const -1 @@ -6320,7 +4857,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 2 call $~lib/string/String#indexOf i32.const 2 @@ -6334,7 +4871,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 3 call $~lib/string/String#indexOf i32.const -1 @@ -6348,7 +4885,7 @@ unreachable end global.get $std/string/str - i32.const 824 + i32.const 720 i32.const -1 call $~lib/string/String#indexOf i32.const 2 @@ -6374,7 +4911,7 @@ unreachable end i32.const 120 - i32.const 384 + i32.const 280 i32.const 2147483647 call $~lib/string/String#lastIndexOf i32.const -1 @@ -6407,7 +4944,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 2147483647 call $~lib/string/String#lastIndexOf i32.const 2 @@ -6421,7 +4958,7 @@ unreachable end global.get $std/string/str - i32.const 800 + i32.const 696 i32.const 2147483647 call $~lib/string/String#lastIndexOf i32.const -1 @@ -6435,7 +4972,7 @@ unreachable end global.get $std/string/str - i32.const 848 + i32.const 744 i32.const 2147483647 call $~lib/string/String#lastIndexOf i32.const 15 @@ -6449,7 +4986,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 2 call $~lib/string/String#lastIndexOf i32.const 2 @@ -6463,7 +5000,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 3 call $~lib/string/String#lastIndexOf i32.const 2 @@ -6477,7 +5014,7 @@ unreachable end global.get $std/string/str - i32.const 824 + i32.const 720 i32.const -1 call $~lib/string/String#lastIndexOf i32.const -1 @@ -6491,7 +5028,7 @@ unreachable end global.get $std/string/str - i32.const 872 + i32.const 768 i32.const 0 call $~lib/string/String#lastIndexOf i32.const -1 @@ -6505,7 +5042,7 @@ unreachable end global.get $std/string/str - i32.const 384 + i32.const 280 i32.const 0 call $~lib/string/String#lastIndexOf if @@ -6516,7 +5053,7 @@ call $~lib/builtins/abort unreachable end - i32.const 896 + i32.const 792 call $~lib/string/parseInt f64.const 0 f64.ne @@ -6528,7 +5065,7 @@ call $~lib/builtins/abort unreachable end - i32.const 920 + i32.const 816 call $~lib/string/parseInt f64.const 1 f64.ne @@ -6540,7 +5077,7 @@ call $~lib/builtins/abort unreachable end - i32.const 944 + i32.const 840 call $~lib/string/parseInt f64.const 5 f64.ne @@ -6552,7 +5089,7 @@ call $~lib/builtins/abort unreachable end - i32.const 976 + i32.const 872 call $~lib/string/parseInt f64.const 455 f64.ne @@ -6564,7 +5101,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1008 + i32.const 904 call $~lib/string/parseInt f64.const 3855 f64.ne @@ -6576,7 +5113,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1040 + i32.const 936 call $~lib/string/parseInt f64.const 3855 f64.ne @@ -6588,7 +5125,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1072 + i32.const 968 call $~lib/string/parseInt f64.const 11 f64.ne @@ -6600,7 +5137,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1096 + i32.const 992 call $~lib/string/parseInt f64.const 1 f64.ne @@ -6612,7 +5149,7 @@ call $~lib/builtins/abort unreachable end - i32.const 896 + i32.const 792 call $~lib/string/parseFloat f64.const 0 f64.ne @@ -6624,7 +5161,7 @@ call $~lib/builtins/abort unreachable end - i32.const 920 + i32.const 816 call $~lib/string/parseFloat f64.const 1 f64.ne @@ -6636,7 +5173,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1120 + i32.const 1016 call $~lib/string/parseFloat f64.const 0.1 f64.ne @@ -6648,7 +5185,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1144 + i32.const 1040 call $~lib/string/parseFloat f64.const 0.25 f64.ne @@ -6660,7 +5197,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1168 + i32.const 1064 call $~lib/string/parseFloat f64.const 0.1 f64.ne @@ -6673,12 +5210,12 @@ unreachable end i32.const 160 - i32.const 1200 + i32.const 1096 call $~lib/string/String.__concat local.tee $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $0 - i32.const 1224 + i32.const 1120 call $~lib/string/String.__eq i32.eqz if @@ -6702,9 +5239,9 @@ unreachable end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 120 i32.const 120 call $~lib/string/String.__eq @@ -6742,7 +5279,7 @@ unreachable end i32.const 160 - i32.const 1200 + i32.const 1096 call $~lib/string/String.__ne i32.eqz if @@ -6765,8 +5302,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1248 - i32.const 1272 + i32.const 1144 + i32.const 1168 call $~lib/string/String.__ne i32.eqz if @@ -6777,8 +5314,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1248 - i32.const 1248 + i32.const 1144 + i32.const 1144 call $~lib/string/String.__eq i32.eqz if @@ -6789,8 +5326,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1296 - i32.const 1320 + i32.const 1192 + i32.const 1216 call $~lib/string/String.__ne i32.eqz if @@ -6801,8 +5338,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1344 - i32.const 1376 + i32.const 1240 + i32.const 1272 call $~lib/string/String.__ne i32.eqz if @@ -6813,8 +5350,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1408 - i32.const 1408 + i32.const 1304 + i32.const 1304 call $~lib/string/String.__eq i32.eqz if @@ -6825,8 +5362,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1408 - i32.const 1440 + i32.const 1304 + i32.const 1336 call $~lib/string/String.__ne i32.eqz if @@ -6837,8 +5374,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1472 - i32.const 1512 + i32.const 1368 + i32.const 1408 call $~lib/string/String.__ne i32.eqz if @@ -6849,7 +5386,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1200 + i32.const 1096 i32.const 160 call $~lib/string/String.__gt i32.eqz @@ -6861,7 +5398,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1552 + i32.const 1448 i32.const 160 call $~lib/string/String.__gt i32.eqz @@ -6873,8 +5410,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1552 - i32.const 1576 + i32.const 1448 + i32.const 1472 call $~lib/string/String.__gte i32.eqz if @@ -6885,8 +5422,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1552 - i32.const 1224 + i32.const 1448 + i32.const 1120 call $~lib/string/String.__gt i32.eqz if @@ -6897,8 +5434,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1552 - i32.const 1224 + i32.const 1448 + i32.const 1120 call $~lib/string/String.__lt if i32.const 0 @@ -6908,7 +5445,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1200 + i32.const 1096 global.get $std/string/nullStr call $~lib/string/String.__lt if @@ -6920,7 +5457,7 @@ unreachable end global.get $std/string/nullStr - i32.const 1200 + i32.const 1096 call $~lib/string/String.__lt if i32.const 0 @@ -6930,7 +5467,7 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 120 call $~lib/string/String.__gt i32.eqz @@ -6943,7 +5480,7 @@ unreachable end i32.const 120 - i32.const 536 + i32.const 432 call $~lib/string/String.__lt i32.eqz if @@ -6954,7 +5491,7 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 120 call $~lib/string/String.__gte i32.eqz @@ -6966,7 +5503,7 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 call $~lib/string/String.__lte i32.eqz if @@ -6977,7 +5514,7 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 120 call $~lib/string/String.__lt if @@ -6989,7 +5526,7 @@ unreachable end i32.const 120 - i32.const 536 + i32.const 432 call $~lib/string/String.__gt if i32.const 0 @@ -7055,7 +5592,7 @@ local.tee $3 call $~lib/string/String.__concat local.tee $4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.tee $5 call $~lib/string/String.__gt i32.eqz @@ -7068,16 +5605,16 @@ unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release - i32.const 588 + call $~lib/rt/pure/__release + i32.const 484 i32.load i32.const 1 i32.shr_u @@ -7140,7 +5677,7 @@ i32.const 2 call $~lib/string/String#repeat local.tee $28 - i32.const 1576 + i32.const 1472 call $~lib/string/String.__eq i32.eqz if @@ -7155,7 +5692,7 @@ i32.const 3 call $~lib/string/String#repeat local.tee $29 - i32.const 1648 + i32.const 1544 call $~lib/string/String.__eq i32.eqz if @@ -7166,11 +5703,11 @@ call $~lib/builtins/abort unreachable end - i32.const 1224 + i32.const 1120 i32.const 4 call $~lib/string/String#repeat local.tee $30 - i32.const 1672 + i32.const 1568 call $~lib/string/String.__eq i32.eqz if @@ -7185,7 +5722,7 @@ i32.const 5 call $~lib/string/String#repeat local.tee $31 - i32.const 1704 + i32.const 1600 call $~lib/string/String.__eq i32.eqz if @@ -7200,7 +5737,7 @@ i32.const 6 call $~lib/string/String#repeat local.tee $32 - i32.const 1736 + i32.const 1632 call $~lib/string/String.__eq i32.eqz if @@ -7215,7 +5752,7 @@ i32.const 7 call $~lib/string/String#repeat local.tee $33 - i32.const 1768 + i32.const 1664 call $~lib/string/String.__eq i32.eqz if @@ -7226,16 +5763,16 @@ call $~lib/builtins/abort unreachable end - i32.const 1800 + i32.const 1696 global.get $std/string/str - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease global.set $std/string/str global.get $std/string/str i32.const 0 i32.const 2147483647 call $~lib/string/String#slice local.tee $34 - i32.const 1800 + i32.const 1696 call $~lib/string/String.__eq i32.eqz if @@ -7251,7 +5788,7 @@ i32.const 2147483647 call $~lib/string/String#slice local.tee $35 - i32.const 1848 + i32.const 1744 call $~lib/string/String.__eq i32.eqz if @@ -7267,7 +5804,7 @@ i32.const 2147483647 call $~lib/string/String#slice local.tee $36 - i32.const 1872 + i32.const 1768 call $~lib/string/String.__eq i32.eqz if @@ -7283,7 +5820,7 @@ i32.const 7 call $~lib/string/String#slice local.tee $37 - i32.const 1904 + i32.const 1800 call $~lib/string/String.__eq i32.eqz if @@ -7299,7 +5836,7 @@ i32.const -6 call $~lib/string/String#slice local.tee $38 - i32.const 1936 + i32.const 1832 call $~lib/string/String.__eq i32.eqz if @@ -7331,7 +5868,7 @@ i32.const -1 call $~lib/string/String#slice local.tee $40 - i32.const 1968 + i32.const 1864 call $~lib/string/String.__eq i32.eqz if @@ -7343,7 +5880,7 @@ unreachable end i32.const 0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 120 i32.const 0 call $~lib/string/String#split @@ -7360,7 +5897,7 @@ call $~lib/string/String.__eq local.set $0 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release else i32.const 0 local.set $0 @@ -7376,7 +5913,7 @@ unreachable end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 120 i32.const 120 call $~lib/string/String#split @@ -7391,9 +5928,9 @@ unreachable end local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 120 - i32.const 776 + i32.const 672 call $~lib/string/String#split local.tee $1 i32.load offset=12 @@ -7408,7 +5945,7 @@ call $~lib/string/String.__eq local.set $0 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release else i32.const 0 local.set $0 @@ -7424,9 +5961,9 @@ unreachable end local.get $1 - call $~lib/rt/purerc/__release - i32.const 2344 - i32.const 2376 + call $~lib/rt/pure/__release + i32.const 2128 + i32.const 2160 call $~lib/string/String#split local.tee $1 i32.load offset=12 @@ -7437,11 +5974,11 @@ i32.const 0 call $~lib/array/Array<~lib/string/String>#__get local.tee $2 - i32.const 2344 + i32.const 2128 call $~lib/string/String.__eq local.set $0 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release else i32.const 0 local.set $0 @@ -7457,9 +5994,9 @@ unreachable end local.get $1 - call $~lib/rt/purerc/__release - i32.const 2344 - i32.const 776 + call $~lib/rt/pure/__release + i32.const 2128 + i32.const 672 call $~lib/string/String#split local.tee $1 i32.load offset=12 @@ -7474,7 +6011,7 @@ call $~lib/string/String.__eq local.set $0 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release else i32.const 0 local.set $0 @@ -7485,11 +6022,11 @@ i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.tee $2 - i32.const 1200 + i32.const 1096 call $~lib/string/String.__eq local.set $0 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release else i32.const 0 local.set $0 @@ -7500,11 +6037,11 @@ i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.tee $2 - i32.const 2400 + i32.const 2184 call $~lib/string/String.__eq local.set $0 local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release else i32.const 0 local.set $0 @@ -7520,11 +6057,11 @@ unreachable end local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 0 call $~lib/util/number/itoa32 local.tee $0 - i32.const 896 + i32.const 792 call $~lib/string/String.__eq i32.eqz if @@ -7538,7 +6075,7 @@ i32.const 1 call $~lib/util/number/itoa32 local.tee $1 - i32.const 920 + i32.const 816 call $~lib/string/String.__eq i32.eqz if @@ -7552,7 +6089,7 @@ i32.const 8 call $~lib/util/number/itoa32 local.tee $2 - i32.const 2872 + i32.const 2656 call $~lib/string/String.__eq i32.eqz if @@ -7566,7 +6103,7 @@ i32.const 123 call $~lib/util/number/itoa32 local.tee $41 - i32.const 592 + i32.const 488 call $~lib/string/String.__eq i32.eqz if @@ -7580,7 +6117,7 @@ i32.const -1000 call $~lib/util/number/itoa32 local.tee $42 - i32.const 2896 + i32.const 2680 call $~lib/string/String.__eq i32.eqz if @@ -7594,7 +6131,7 @@ i32.const 1234 call $~lib/util/number/itoa32 local.tee $43 - i32.const 2928 + i32.const 2712 call $~lib/string/String.__eq i32.eqz if @@ -7608,7 +6145,7 @@ i32.const 12345 call $~lib/util/number/itoa32 local.tee $44 - i32.const 2952 + i32.const 2736 call $~lib/string/String.__eq i32.eqz if @@ -7622,7 +6159,7 @@ i32.const 123456 call $~lib/util/number/itoa32 local.tee $45 - i32.const 2984 + i32.const 2768 call $~lib/string/String.__eq i32.eqz if @@ -7636,7 +6173,7 @@ i32.const 1111111 call $~lib/util/number/itoa32 local.tee $46 - i32.const 3016 + i32.const 2800 call $~lib/string/String.__eq i32.eqz if @@ -7650,7 +6187,7 @@ i32.const 1234567 call $~lib/util/number/itoa32 local.tee $47 - i32.const 3048 + i32.const 2832 call $~lib/string/String.__eq i32.eqz if @@ -7664,7 +6201,7 @@ i32.const 2147483646 call $~lib/util/number/itoa32 local.tee $48 - i32.const 3080 + i32.const 2864 call $~lib/string/String.__eq i32.eqz if @@ -7678,7 +6215,7 @@ i32.const 2147483647 call $~lib/util/number/itoa32 local.tee $49 - i32.const 3120 + i32.const 2904 call $~lib/string/String.__eq i32.eqz if @@ -7692,7 +6229,7 @@ i32.const -2147483648 call $~lib/util/number/itoa32 local.tee $50 - i32.const 3160 + i32.const 2944 call $~lib/string/String.__eq i32.eqz if @@ -7706,7 +6243,7 @@ i32.const -1 call $~lib/util/number/itoa32 local.tee $51 - i32.const 3200 + i32.const 2984 call $~lib/string/String.__eq i32.eqz if @@ -7720,7 +6257,7 @@ i32.const 0 call $~lib/util/number/utoa32 local.tee $52 - i32.const 896 + i32.const 792 call $~lib/string/String.__eq i32.eqz if @@ -7734,7 +6271,7 @@ i32.const 1000 call $~lib/util/number/utoa32 local.tee $53 - i32.const 3224 + i32.const 3008 call $~lib/string/String.__eq i32.eqz if @@ -7748,7 +6285,7 @@ i32.const 2147483647 call $~lib/util/number/utoa32 local.tee $54 - i32.const 3120 + i32.const 2904 call $~lib/string/String.__eq i32.eqz if @@ -7762,7 +6299,7 @@ i32.const -2147483648 call $~lib/util/number/utoa32 local.tee $55 - i32.const 3248 + i32.const 3032 call $~lib/string/String.__eq i32.eqz if @@ -7776,7 +6313,7 @@ i32.const -1 call $~lib/util/number/utoa32 local.tee $56 - i32.const 3288 + i32.const 3072 call $~lib/string/String.__eq i32.eqz if @@ -7790,7 +6327,7 @@ i64.const 0 call $~lib/util/number/utoa64 local.tee $57 - i32.const 896 + i32.const 792 call $~lib/string/String.__eq i32.eqz if @@ -7804,7 +6341,7 @@ i64.const 1234 call $~lib/util/number/utoa64 local.tee $58 - i32.const 2928 + i32.const 2712 call $~lib/string/String.__eq i32.eqz if @@ -7818,7 +6355,7 @@ i64.const 99999999 call $~lib/util/number/utoa64 local.tee $59 - i32.const 3328 + i32.const 3112 call $~lib/string/String.__eq i32.eqz if @@ -7832,7 +6369,7 @@ i64.const 100000000 call $~lib/util/number/utoa64 local.tee $60 - i32.const 3360 + i32.const 3144 call $~lib/string/String.__eq i32.eqz if @@ -7846,7 +6383,7 @@ i64.const 4294967295 call $~lib/util/number/utoa64 local.tee $61 - i32.const 3288 + i32.const 3072 call $~lib/string/String.__eq i32.eqz if @@ -7860,7 +6397,7 @@ i64.const 68719476735 call $~lib/util/number/utoa64 local.tee $62 - i32.const 3400 + i32.const 3184 call $~lib/string/String.__eq i32.eqz if @@ -7874,7 +6411,7 @@ i64.const 868719476735 call $~lib/util/number/utoa64 local.tee $63 - i32.const 3440 + i32.const 3224 call $~lib/string/String.__eq i32.eqz if @@ -7888,7 +6425,7 @@ i64.const 999868719476735 call $~lib/util/number/utoa64 local.tee $64 - i32.const 3480 + i32.const 3264 call $~lib/string/String.__eq i32.eqz if @@ -7902,7 +6439,7 @@ i64.const 9999868719476735 call $~lib/util/number/utoa64 local.tee $65 - i32.const 3528 + i32.const 3312 call $~lib/string/String.__eq i32.eqz if @@ -7916,7 +6453,7 @@ i64.const 19999868719476735 call $~lib/util/number/utoa64 local.tee $66 - i32.const 3576 + i32.const 3360 call $~lib/string/String.__eq i32.eqz if @@ -7930,7 +6467,7 @@ i64.const -1 call $~lib/util/number/utoa64 local.tee $67 - i32.const 3632 + i32.const 3416 call $~lib/string/String.__eq i32.eqz if @@ -7944,7 +6481,7 @@ i64.const 0 call $~lib/util/number/itoa64 local.tee $68 - i32.const 896 + i32.const 792 call $~lib/string/String.__eq i32.eqz if @@ -7958,7 +6495,7 @@ i64.const -1234 call $~lib/util/number/itoa64 local.tee $69 - i32.const 3688 + i32.const 3472 call $~lib/string/String.__eq i32.eqz if @@ -7972,7 +6509,7 @@ i64.const 4294967295 call $~lib/util/number/itoa64 local.tee $70 - i32.const 3288 + i32.const 3072 call $~lib/string/String.__eq i32.eqz if @@ -7986,7 +6523,7 @@ i64.const -4294967295 call $~lib/util/number/itoa64 local.tee $71 - i32.const 3720 + i32.const 3504 call $~lib/string/String.__eq i32.eqz if @@ -8000,7 +6537,7 @@ i64.const 68719476735 call $~lib/util/number/itoa64 local.tee $72 - i32.const 3400 + i32.const 3184 call $~lib/string/String.__eq i32.eqz if @@ -8014,7 +6551,7 @@ i64.const -68719476735 call $~lib/util/number/itoa64 local.tee $73 - i32.const 3760 + i32.const 3544 call $~lib/string/String.__eq i32.eqz if @@ -8028,7 +6565,7 @@ i64.const -868719476735 call $~lib/util/number/itoa64 local.tee $74 - i32.const 3800 + i32.const 3584 call $~lib/string/String.__eq i32.eqz if @@ -8042,7 +6579,7 @@ i64.const -999868719476735 call $~lib/util/number/itoa64 local.tee $75 - i32.const 3848 + i32.const 3632 call $~lib/string/String.__eq i32.eqz if @@ -8056,7 +6593,7 @@ i64.const -19999868719476735 call $~lib/util/number/itoa64 local.tee $76 - i32.const 3896 + i32.const 3680 call $~lib/string/String.__eq i32.eqz if @@ -8070,7 +6607,7 @@ i64.const 9223372036854775807 call $~lib/util/number/itoa64 local.tee $77 - i32.const 3952 + i32.const 3736 call $~lib/string/String.__eq i32.eqz if @@ -8084,7 +6621,7 @@ i64.const -9223372036854775808 call $~lib/util/number/itoa64 local.tee $78 - i32.const 4008 + i32.const 3792 call $~lib/string/String.__eq i32.eqz if @@ -8098,7 +6635,7 @@ f64.const 0 call $~lib/util/number/dtoa local.tee $79 - i32.const 4064 + i32.const 3848 call $~lib/string/String.__eq i32.eqz if @@ -8112,7 +6649,7 @@ f64.const -0 call $~lib/util/number/dtoa local.tee $80 - i32.const 4064 + i32.const 3848 call $~lib/string/String.__eq i32.eqz if @@ -8126,7 +6663,7 @@ f64.const nan:0x8000000000000 call $~lib/util/number/dtoa local.tee $81 - i32.const 4088 + i32.const 3872 call $~lib/string/String.__eq i32.eqz if @@ -8140,7 +6677,7 @@ f64.const inf call $~lib/util/number/dtoa local.tee $82 - i32.const 4152 + i32.const 3936 call $~lib/string/String.__eq i32.eqz if @@ -8154,7 +6691,7 @@ f64.const -inf call $~lib/util/number/dtoa local.tee $83 - i32.const 4112 + i32.const 3896 call $~lib/string/String.__eq i32.eqz if @@ -8168,7 +6705,7 @@ f64.const 2.220446049250313e-16 call $~lib/util/number/dtoa local.tee $84 - i32.const 5240 + i32.const 5024 call $~lib/string/String.__eq i32.eqz if @@ -8182,7 +6719,7 @@ f64.const -2.220446049250313e-16 call $~lib/util/number/dtoa local.tee $85 - i32.const 5304 + i32.const 5088 call $~lib/string/String.__eq i32.eqz if @@ -8196,7 +6733,7 @@ f64.const 1797693134862315708145274e284 call $~lib/util/number/dtoa local.tee $86 - i32.const 5368 + i32.const 5152 call $~lib/string/String.__eq i32.eqz if @@ -8210,7 +6747,7 @@ f64.const -1797693134862315708145274e284 call $~lib/util/number/dtoa local.tee $87 - i32.const 5432 + i32.const 5216 call $~lib/string/String.__eq i32.eqz if @@ -8224,7 +6761,7 @@ f64.const 4185580496821356722454785e274 call $~lib/util/number/dtoa local.tee $88 - i32.const 5496 + i32.const 5280 call $~lib/string/String.__eq i32.eqz if @@ -8238,7 +6775,7 @@ f64.const 2.2250738585072014e-308 call $~lib/util/number/dtoa local.tee $89 - i32.const 5560 + i32.const 5344 call $~lib/string/String.__eq i32.eqz if @@ -8252,7 +6789,7 @@ f64.const 4.940656e-318 call $~lib/util/number/dtoa local.tee $90 - i32.const 5624 + i32.const 5408 call $~lib/string/String.__eq i32.eqz if @@ -8266,7 +6803,7 @@ f64.const 9060801153433600 call $~lib/util/number/dtoa local.tee $91 - i32.const 5672 + i32.const 5456 call $~lib/string/String.__eq i32.eqz if @@ -8280,7 +6817,7 @@ f64.const 4708356024711512064 call $~lib/util/number/dtoa local.tee $92 - i32.const 5728 + i32.const 5512 call $~lib/string/String.__eq i32.eqz if @@ -8294,7 +6831,7 @@ f64.const 9409340012568248320 call $~lib/util/number/dtoa local.tee $93 - i32.const 5792 + i32.const 5576 call $~lib/string/String.__eq i32.eqz if @@ -8308,7 +6845,7 @@ f64.const 5e-324 call $~lib/util/number/dtoa local.tee $94 - i32.const 5856 + i32.const 5640 call $~lib/string/String.__eq i32.eqz if @@ -8322,7 +6859,7 @@ f64.const 1 call $~lib/util/number/dtoa local.tee $95 - i32.const 5888 + i32.const 5672 call $~lib/string/String.__eq i32.eqz if @@ -8336,7 +6873,7 @@ f64.const 0.1 call $~lib/util/number/dtoa local.tee $96 - i32.const 1120 + i32.const 1016 call $~lib/string/String.__eq i32.eqz if @@ -8350,7 +6887,7 @@ f64.const -1 call $~lib/util/number/dtoa local.tee $97 - i32.const 5912 + i32.const 5696 call $~lib/string/String.__eq i32.eqz if @@ -8364,7 +6901,7 @@ f64.const -0.1 call $~lib/util/number/dtoa local.tee $98 - i32.const 5936 + i32.const 5720 call $~lib/string/String.__eq i32.eqz if @@ -8378,7 +6915,7 @@ f64.const 1e6 call $~lib/util/number/dtoa local.tee $99 - i32.const 5960 + i32.const 5744 call $~lib/string/String.__eq i32.eqz if @@ -8392,7 +6929,7 @@ f64.const 1e-06 call $~lib/util/number/dtoa local.tee $100 - i32.const 6000 + i32.const 5784 call $~lib/string/String.__eq i32.eqz if @@ -8406,7 +6943,7 @@ f64.const -1e6 call $~lib/util/number/dtoa local.tee $101 - i32.const 6032 + i32.const 5816 call $~lib/string/String.__eq i32.eqz if @@ -8420,7 +6957,7 @@ f64.const -1e-06 call $~lib/util/number/dtoa local.tee $102 - i32.const 6072 + i32.const 5856 call $~lib/string/String.__eq i32.eqz if @@ -8434,7 +6971,7 @@ f64.const 1e7 call $~lib/util/number/dtoa local.tee $103 - i32.const 6112 + i32.const 5896 call $~lib/string/String.__eq i32.eqz if @@ -8448,7 +6985,7 @@ f64.const 1e-07 call $~lib/util/number/dtoa local.tee $104 - i32.const 6152 + i32.const 5936 call $~lib/string/String.__eq i32.eqz if @@ -8462,7 +6999,7 @@ f64.const 1.e+308 call $~lib/util/number/dtoa local.tee $105 - i32.const 6176 + i32.const 5960 call $~lib/string/String.__eq i32.eqz if @@ -8476,7 +7013,7 @@ f64.const -1.e+308 call $~lib/util/number/dtoa local.tee $106 - i32.const 6208 + i32.const 5992 call $~lib/string/String.__eq i32.eqz if @@ -8490,7 +7027,7 @@ f64.const inf call $~lib/util/number/dtoa local.tee $107 - i32.const 4152 + i32.const 3936 call $~lib/string/String.__eq i32.eqz if @@ -8504,7 +7041,7 @@ f64.const -inf call $~lib/util/number/dtoa local.tee $108 - i32.const 4112 + i32.const 3896 call $~lib/string/String.__eq i32.eqz if @@ -8518,7 +7055,7 @@ f64.const 1e-308 call $~lib/util/number/dtoa local.tee $109 - i32.const 6240 + i32.const 6024 call $~lib/string/String.__eq i32.eqz if @@ -8532,7 +7069,7 @@ f64.const -1e-308 call $~lib/util/number/dtoa local.tee $110 - i32.const 6272 + i32.const 6056 call $~lib/string/String.__eq i32.eqz if @@ -8546,7 +7083,7 @@ f64.const 1e-323 call $~lib/util/number/dtoa local.tee $111 - i32.const 6304 + i32.const 6088 call $~lib/string/String.__eq i32.eqz if @@ -8560,7 +7097,7 @@ f64.const -1e-323 call $~lib/util/number/dtoa local.tee $112 - i32.const 6336 + i32.const 6120 call $~lib/string/String.__eq i32.eqz if @@ -8574,7 +7111,7 @@ f64.const 0 call $~lib/util/number/dtoa local.tee $113 - i32.const 4064 + i32.const 3848 call $~lib/string/String.__eq i32.eqz if @@ -8588,7 +7125,7 @@ f64.const 4294967272 call $~lib/util/number/dtoa local.tee $114 - i32.const 6368 + i32.const 6152 call $~lib/string/String.__eq i32.eqz if @@ -8602,7 +7139,7 @@ f64.const 1.2312145673456234e-08 call $~lib/util/number/dtoa local.tee $115 - i32.const 6408 + i32.const 6192 call $~lib/string/String.__eq i32.eqz if @@ -8616,7 +7153,7 @@ f64.const 555555555.5555556 call $~lib/util/number/dtoa local.tee $116 - i32.const 6472 + i32.const 6256 call $~lib/string/String.__eq i32.eqz if @@ -8630,7 +7167,7 @@ f64.const 0.9999999999999999 call $~lib/util/number/dtoa local.tee $117 - i32.const 6528 + i32.const 6312 call $~lib/string/String.__eq i32.eqz if @@ -8644,7 +7181,7 @@ f64.const 1 call $~lib/util/number/dtoa local.tee $118 - i32.const 5888 + i32.const 5672 call $~lib/string/String.__eq i32.eqz if @@ -8658,7 +7195,7 @@ f64.const 12.34 call $~lib/util/number/dtoa local.tee $119 - i32.const 6584 + i32.const 6368 call $~lib/string/String.__eq i32.eqz if @@ -8672,7 +7209,7 @@ f64.const 0.3333333333333333 call $~lib/util/number/dtoa local.tee $120 - i32.const 6616 + i32.const 6400 call $~lib/string/String.__eq i32.eqz if @@ -8686,7 +7223,7 @@ f64.const 1234e17 call $~lib/util/number/dtoa local.tee $121 - i32.const 6672 + i32.const 6456 call $~lib/string/String.__eq i32.eqz if @@ -8700,7 +7237,7 @@ f64.const 1234e18 call $~lib/util/number/dtoa local.tee $122 - i32.const 6736 + i32.const 6520 call $~lib/string/String.__eq i32.eqz if @@ -8714,7 +7251,7 @@ f64.const 2.71828 call $~lib/util/number/dtoa local.tee $123 - i32.const 6776 + i32.const 6560 call $~lib/string/String.__eq i32.eqz if @@ -8728,7 +7265,7 @@ f64.const 0.0271828 call $~lib/util/number/dtoa local.tee $124 - i32.const 6808 + i32.const 6592 call $~lib/string/String.__eq i32.eqz if @@ -8742,7 +7279,7 @@ f64.const 271.828 call $~lib/util/number/dtoa local.tee $125 - i32.const 6848 + i32.const 6632 call $~lib/string/String.__eq i32.eqz if @@ -8756,7 +7293,7 @@ f64.const 1.1e+128 call $~lib/util/number/dtoa local.tee $126 - i32.const 6880 + i32.const 6664 call $~lib/string/String.__eq i32.eqz if @@ -8770,7 +7307,7 @@ f64.const 1.1e-64 call $~lib/util/number/dtoa local.tee $127 - i32.const 6912 + i32.const 6696 call $~lib/string/String.__eq i32.eqz if @@ -8784,7 +7321,7 @@ f64.const 0.000035689 call $~lib/util/number/dtoa local.tee $128 - i32.const 6944 + i32.const 6728 call $~lib/string/String.__eq i32.eqz if @@ -8796,274 +7333,1768 @@ unreachable end global.get $std/string/str - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $18 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $19 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $21 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $28 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $29 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $30 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $31 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $32 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $33 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $34 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $35 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $37 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $41 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $42 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $43 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $44 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $45 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $46 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $47 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $48 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $49 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $50 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $51 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $52 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $53 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $54 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $55 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $56 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $57 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $58 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $59 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $60 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $61 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $62 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $63 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $64 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $65 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $66 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $67 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $68 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $69 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $70 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $71 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $72 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $73 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $74 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $75 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $76 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $77 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $78 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $79 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $80 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $81 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $82 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $83 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $84 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $85 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $86 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $87 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $88 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $89 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $90 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $91 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $92 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $93 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $94 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $95 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $96 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $97 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $98 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $99 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $100 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $101 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $102 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $103 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $104 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $105 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $106 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $107 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $108 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $109 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $110 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $111 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $112 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $113 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $114 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $115 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $116 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $117 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $118 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $119 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $120 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $121 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $122 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $123 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $124 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $125 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $126 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $127 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $128 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/string/getString (; 71 ;) (type $FUNCSIG$i) (result i32) + (func $std/string/getString (; 49 ;) (type $FUNCSIG$i) (result i32) global.get $std/string/str - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $start (; 72 ;) (type $FUNCSIG$v) + (func $start (; 50 ;) (type $FUNCSIG$v) call $start:std/string ) - (func $~lib/rt/purerc/markGray (; 73 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/removeBlock (; 51 ;) (type $FUNCSIG$vii) (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 6768 + i32.const 275 + 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 6768 + i32.const 277 + 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 6768 + i32.const 290 + 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 $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + local.get $1 + i32.eq + if + local.get $3 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $4 + i32.store offset=96 + local.get $4 + i32.eqz + if + local.get $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 (; 52 ;) (type $FUNCSIG$vii) (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 6768 + i32.const 203 + 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 6768 + i32.const 205 + 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 $3 + i32.const 3 + i32.and + local.get $2 + 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 6768 + i32.const 226 + 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 (result i32) + local.get $0 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $3 + i32.store + local.get $2 + else + local.get $1 + end + local.set $1 + 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 6768 + i32.const 241 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 16 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 6768 + i32.const 242 + 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 6768 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $3 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $3 + i32.const 2 + i32.shl + local.get $0 + i32.add + local.get $3 + i32.const 2 + i32.shl + local.get $0 + 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 (; 53 ;) (type $FUNCSIG$viii) (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 6768 + i32.const 384 + 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 6768 + i32.const 394 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $3 + 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 6768 + i32.const 406 + 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/initializeRoot (; 54 ;) (type $FUNCSIG$v) + (local $0 i32) + (local $1 i32) + i32.const 1 + current_memory + local.tee $0 + i32.gt_s + if (result i32) + i32.const 1 + local.get $0 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 7120 + i32.const 0 + i32.store + i32.const 8688 + i32.const 0 + i32.store + i32.const 0 + local.set $0 + loop $repeat|0 + block $break|0 + local.get $0 + i32.const 23 + i32.ge_u + br_if $break|0 + local.get $0 + i32.const 2 + i32.shl + i32.const 7120 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $repeat|1 + block $break|1 + local.get $1 + i32.const 16 + i32.ge_u + br_if $break|1 + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 7120 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $repeat|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $repeat|0 + end + end + i32.const 7120 + i32.const 8704 + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + i32.const 7120 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 6816 + i32.const 6768 + i32.const 446 + 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 (; 56 ;) (type $FUNCSIG$iii) (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 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + local.get $1 + 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 6768 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + 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 $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + local.get $0 + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/growMemory (; 57 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + current_memory + local.tee $2 + local.get $1 + 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 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $1 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $2 + i32.const 16 + i32.shl + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + ) + (func $~lib/rt/tlsf/prepareBlock (; 58 ;) (type $FUNCSIG$viii) (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 6768 + i32.const 363 + 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 $3 + i32.const 2 + i32.and + local.get $2 + i32.or + i32.store + local.get $1 + i32.const 16 + i32.add + local.get $2 + 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 (; 59 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 6768 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.load + i32.const -4 + i32.and + local.get $3 + i32.lt_u + if + i32.const 0 + i32.const 6768 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 60 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + local.tee $2 + if (result i32) + local.get $2 + else + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + end + 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/tlsf/reallocateBlock (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $2 + call $~lib/rt/tlsf/prepareSize + local.set $3 + local.get $1 + i32.load + local.tee $4 + i32.const 1 + i32.and + if + i32.const 0 + i32.const 6768 + i32.const 491 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32.const -4 + i32.and + i32.le_u + if + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + local.get $2 + i32.store offset=12 + local.get $1 + return + end + local.get $1 + i32.const 16 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $6 + i32.load + local.tee $5 + i32.const 1 + i32.and + if + local.get $4 + i32.const -4 + i32.and + i32.const 16 + i32.add + local.get $5 + i32.const -4 + i32.and + i32.add + local.tee $5 + local.get $3 + i32.ge_u + if + local.get $0 + local.get $6 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $4 + i32.const 3 + i32.and + local.get $5 + i32.or + i32.store + local.get $1 + local.get $2 + i32.store offset=12 + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + return + end + end + local.get $0 + local.get $2 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + local.get $1 + i32.load offset=4 + i32.store offset=4 + local.get $3 + local.get $1 + i32.load offset=8 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + local.get $4 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/tlsf/onFree + local.get $3 + ) + (func $~lib/rt/tlsf/__realloc (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 552 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + 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 6768 + i32.const 553 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + local.get $1 + call $~lib/rt/tlsf/reallocateBlock + i32.const 16 + i32.add + ) + (func $~lib/rt/tlsf/freeBlock (; 63 ;) (type $FUNCSIG$vii) (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 6768 + i32.const 530 + 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/tlsf/onFree + ) + (func $~lib/rt/tlsf/__free (; 64 ;) (type $FUNCSIG$vi) (param $0 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 560 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + 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 6768 + i32.const 561 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/increment (; 65 ;) (type $FUNCSIG$vi) (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 6872 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 6872 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 66 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + i32.const 7120 + 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 (; 67 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + local.get $0 + if (result i32) + local.get $0 + i32.const 6944 + i32.load + i32.gt_u + else + i32.const 1 + end + if + i32.const 2072 + i32.const 6920 + i32.const 23 + i32.const 34 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3 + i32.shl + i32.const 6944 + i32.add + i32.load + ) + (func $~lib/rt/pure/growRoots (; 68 ;) (type $FUNCSIG$v) + (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 $2 + i32.sub + local.tee $1 + 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 + local.get $2 + local.get $1 + call $~lib/memory/memory.copy + local.get $0 + global.set $~lib/rt/pure/ROOTS + local.get $0 + local.get $1 + 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 (; 69 ;) (type $FUNCSIG$vi) (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 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 70 ;) (type $FUNCSIG$vi) (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/pure/onDecrement + local.get $0 + i32.load + i32.const 1 + i32.and + if + i32.const 0 + i32.const 6872 + i32.const 114 + 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 6872 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + 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/__retainRelease (; 71 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.const 7120 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $1 + i32.const 7120 + i32.gt_u + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + end + local.get $0 + ) + (func $~lib/rt/pure/__release (; 72 ;) (type $FUNCSIG$vi) (param $0 i32) + local.get $0 + i32.const 7120 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + ) + (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 73 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $0 + loop $continue|0 + local.get $2 + local.get $0 + i32.lt_u + if + local.get $2 + i32.load + local.tee $3 + if + local.get $3 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + ) + (func $~lib/rt/pure/markGray (; 74 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -9084,10 +9115,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 74 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 75 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -9098,9 +9129,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 75 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 76 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -9117,7 +9148,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -9130,11 +9161,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 76 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 77 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -9156,15 +9187,15 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 77 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 78 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) local.get $0 - i32.const 7144 + i32.const 7120 i32.lt_u if return @@ -9196,7 +9227,7 @@ br $case5|0 end local.get $0 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 end local.get $0 @@ -9207,7 +9238,7 @@ i32.le_u if i32.const 0 - i32.const 2016 + i32.const 6872 i32.const 74 i32.const 17 call $~lib/builtins/abort @@ -9220,11 +9251,11 @@ i32.sub i32.store offset=4 local.get $0 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 end local.get $0 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 end local.get $0 @@ -9240,7 +9271,7 @@ i32.ne if i32.const 0 - i32.const 2016 + i32.const 6872 i32.const 85 i32.const 6 call $~lib/builtins/abort @@ -9256,54 +9287,23 @@ i32.and if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 end local.get $0 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 end i32.const 0 - i32.const 2016 + i32.const 6872 i32.const 96 i32.const 24 call $~lib/builtins/abort unreachable end ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 78 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - i32.load offset=4 - local.tee $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $0 - loop $continue|0 - local.get $2 - local.get $0 - i32.lt_u - if - local.get $2 - i32.load - local.tee $3 - if - local.get $3 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - ) - (func $~lib/builtins/__visit_members (; 79 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 79 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) block $block$16$break block $switch$1$case$19 block $switch$1$case$3 @@ -9330,7 +9330,7 @@ if local.get $0 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end ) (func $null (; 80 ;) (type $FUNCSIG$v) diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index 98b53ceb..3429f118 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -2,194 +2,190 @@ (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$iii (func (param i32 i32) (result i32))) - (type $FUNCSIG$v (func)) - (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) - (type $FUNCSIG$vii (func (param i32 i32))) - (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$dii (func (param i32 i32) (result f64))) (type $FUNCSIG$di (func (param i32) (result f64))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) - (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$ij (func (param i64) (result i32))) (type $FUNCSIG$viji (func (param i32 i64 i32))) (type $FUNCSIG$id (func (param f64) (result i32))) (type $FUNCSIG$iid (func (param i32 f64) (result i32))) (type $FUNCSIG$jii (func (param i32 i32) (result i64))) (type $FUNCSIG$iijijiji (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) + (type $FUNCSIG$v (func)) (type $FUNCSIG$i (func (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$vi (func (param i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32))) (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32))) - (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32))) + (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32))) + (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32))) (memory $0 1) (data (i32.const 8) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g\00") (data (i32.const 56) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") (data (i32.const 104) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00") (data (i32.const 120) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00\00\00") (data (i32.const 144) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a\00") - (data (i32.const 168) "\1e\00\00\00\01\00\00\00\10\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 216) "(\00\00\00\01\00\00\00\10\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 272) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\006\00") - (data (i32.const 296) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 344) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\004\d8\06\df") - (data (i32.const 368) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00h\00i\00") - (data (i32.const 392) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l\00") - (data (i32.const 416) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00s\00t\00r\00i\00n\00g\00") - (data (i32.const 448) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00I\00\'\00m\00") - (data (i32.const 472) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00 \00") - (data (i32.const 496) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00 \00 \00 \00") - (data (i32.const 520) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c\00") - (data (i32.const 544) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00 \00 \00a\00b\00c\00") - (data (i32.const 576) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\002\003\00") - (data (i32.const 600) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\00a\00b\00c\00") - (data (i32.const 632) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\002\003\001\002\00a\00b\00c\00") - (data (i32.const 664) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00b\00c\00 \00 \00") - (data (i32.const 696) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00b\00c\00a\00b\00c\00") - (data (i32.const 728) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00c\00a\00b\00c\00a\00b\00") - (data (i32.const 760) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,\00") - (data (i32.const 784) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00x\00") - (data (i32.const 808) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00,\00 \00I\00") - (data (i32.const 832) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00g\00") - (data (i32.const 856) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00i\00") - (data (i32.const 880) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000\00") - (data (i32.const 904) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001\00") - (data (i32.const 928) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00b\001\000\001\00") - (data (i32.const 960) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00o\007\000\007\00") - (data (i32.const 992) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00f\000\00f\00") - (data (i32.const 1024) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00F\000\00F\00") - (data (i32.const 1056) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\001\001\00") - (data (i32.const 1080) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\000\00x\001\00g\00") - (data (i32.const 1104) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\001\00") - (data (i32.const 1128) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00.\002\005\00") - (data (i32.const 1152) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00.\001\00f\00o\00o\00b\00a\00r\00") - (data (i32.const 1184) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b\00") - (data (i32.const 1208) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b\00") - (data (i32.const 1232) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\001\00") - (data (i32.const 1256) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\002\00") - (data (i32.const 1280) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\001\00") - (data (i32.const 1304) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\002\00") - (data (i32.const 1328) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\002\00") - (data (i32.const 1360) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\001\00") - (data (i32.const 1392) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a40\ed0\cf0\cb0\db0\d80\c80") - (data (i32.const 1424) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a60\f00\ce0\aa0\af0\e40\de0") - (data (i32.const 1456) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00D\00\19 f\00h\00u\00a\00s\00c\00a\00i\00l\00") - (data (i32.const 1496) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00D\00\19 \1f\1eu\00a\00s\00c\00a\00i\00l\00") - (data (i32.const 1536) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a\00") - (data (i32.const 1560) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00a\00") - (data (i32.const 1584) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 1632) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00a\00a\00") - (data (i32.const 1656) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00a\00b\00a\00b\00a\00b\00") - (data (i32.const 1688) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00a\00a\00a\00a\00") - (data (i32.const 1720) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00a\00a\00a\00a\00a\00") - (data (i32.const 1752) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00a\00a\00a\00a\00a\00a\00a\00") - (data (i32.const 1784) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00") - (data (i32.const 1832) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00n\00") - (data (i32.const 1856) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00j\00k\00l\00m\00n\00") - (data (i32.const 1888) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00c\00d\00e\00f\00g\00") - (data (i32.const 1920) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00e\00f\00g\00h\00") - (data (i32.const 1952) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00") - (data (i32.const 2000) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00") - (data (i32.const 2056) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 2104) "$\00\00\00\01\00\00\00\10\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 2160) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00") - (data (i32.const 2216) "^\00\00\00\01\00\00\00\10\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") - (data (i32.const 2328) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00,\00b\00,\00c\00") - (data (i32.const 2360) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00.\00") - (data (i32.const 2384) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00c\00") - (data (i32.const 2408) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 2824) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00x\t\00\00x\t\00\00\90\01\00\00d\00\00\00") - (data (i32.const 2856) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\008\00") - (data (i32.const 2880) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\000\000\000\00") - (data (i32.const 2912) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\002\003\004\00") - (data (i32.const 2936) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\003\004\005\00") - (data (i32.const 2968) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\004\005\006\00") - (data (i32.const 3000) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\001\001\001\001\001\001\00") - (data (i32.const 3032) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\002\003\004\005\006\007\00") - (data (i32.const 3064) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\006\00") - (data (i32.const 3104) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\007\00") - (data (i32.const 3144) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\002\001\004\007\004\008\003\006\004\008\00") - (data (i32.const 3184) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00-\001\00") - (data (i32.const 3208) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\000\000\000\00") - (data (i32.const 3232) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\008\00") - (data (i32.const 3272) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\005\00") - (data (i32.const 3312) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\009\009\009\009\009\009\009\009\00") - (data (i32.const 3344) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\000\000\00") - (data (i32.const 3384) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3424) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3464) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3512) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3560) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3616) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00") - (data (i32.const 3672) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\002\003\004\00") - (data (i32.const 3704) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\004\002\009\004\009\006\007\002\009\005\00") - (data (i32.const 3744) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00-\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3784) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3832) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3880) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00") - (data (i32.const 3936) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00") - (data (i32.const 3992) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008\00") - (data (i32.const 4048) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000\00") - (data (i32.const 4072) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N\00") - (data (i32.const 4096) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 4136) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00") - (data (i32.const 4168) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8 (; 29 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/util/string/parse (; 19 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local $3 f64) (local $4 i32) @@ -2667,7 +1324,7 @@ (local $7 i32) (local $8 f64) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 call $~lib/string/String#get:length @@ -2678,7 +1335,7 @@ f64.const nan:0x8000000000000 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -2700,7 +1357,7 @@ f64.const nan:0x8000000000000 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -2726,7 +1383,7 @@ f64.const nan:0x8000000000000 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -2869,7 +1526,7 @@ f64.const nan:0x8000000000000 local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -2973,23 +1630,23 @@ f64.mul local.set $3 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/string/parseInt (; 30 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/string/parseInt (; 20 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) (local $2 f64) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 call $~lib/util/string/parse local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/parseFloat (; 31 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) + (func $~lib/string/parseFloat (; 21 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) (local $1 i32) (local $2 f64) (local $3 i32) @@ -2998,7 +1655,7 @@ (local $6 f64) (local $7 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 call $~lib/string/String#get:length @@ -3009,7 +1666,7 @@ f64.const nan:0x8000000000000 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3031,7 +1688,7 @@ f64.const nan:0x8000000000000 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3057,7 +1714,7 @@ f64.const nan:0x8000000000000 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3129,7 +1786,7 @@ i32.eqz if i32.const 0 - i32.const 312 + i32.const 208 i32.const 572 i32.const 10 call $~lib/builtins/abort @@ -3197,25 +1854,25 @@ f64.mul local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String#concat (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#concat (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 i32.const 0 i32.eq if - i32.const 408 + i32.const 304 local.get $1 - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease local.set $1 end local.get $0 @@ -3237,17 +1894,17 @@ i32.eq if i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $5 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 return end local.get $4 i32.const 16 call $~lib/rt/tlsf/__alloc - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $6 local.get $6 local.get $0 @@ -3262,19 +1919,19 @@ local.get $6 local.set $5 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 ) - (func $~lib/string/String.__concat (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__concat (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 - i32.const 408 + i32.const 304 local.get $0 i32.const 0 i32.ne @@ -3283,18 +1940,18 @@ call $~lib/string/String#concat local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__ne (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__ne (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -3302,21 +1959,21 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__gt (; 35 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gt (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -3339,9 +1996,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3357,9 +2014,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3369,9 +2026,9 @@ i32.const 1 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3392,21 +2049,21 @@ i32.gt_s local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__lt (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lt (; 26 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -3429,9 +2086,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3447,9 +2104,9 @@ i32.const 0 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3459,9 +2116,9 @@ i32.const 1 local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 return end @@ -3482,18 +2139,18 @@ i32.lt_s local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__gte (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gte (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -3501,18 +2158,18 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String.__lte (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lte (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 local.get $1 @@ -3520,12 +2177,12 @@ i32.eqz local.set $2 local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 ) - (func $~lib/string/String#repeat (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#repeat (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -3534,7 +2191,7 @@ i32.eqz if i32.const 0 - i32.const 312 + i32.const 208 i32.const 330 i32.const 4 call $~lib/builtins/abort @@ -3558,8 +2215,8 @@ i64.gt_u end if - i32.const 1600 - i32.const 312 + i32.const 1496 + i32.const 208 i32.const 335 i32.const 6 call $~lib/builtins/abort @@ -3576,7 +2233,7 @@ end if i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $1 @@ -3584,7 +2241,7 @@ i32.eq if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $2 @@ -3603,9 +2260,9 @@ local.get $1 call $~lib/memory/memory.repeat local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/string/String#slice (; 40 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#slice (; 30 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3674,7 +2331,7 @@ i32.le_s if i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $3 @@ -3694,70 +2351,9 @@ i32.shl call $~lib/memory/memory.copy local.get $8 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/rt/purerc/increment (; 41 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - local.get $0 - i32.load offset=4 - local.set $1 - local.get $1 - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - local.get $1 - i32.const 1 - i32.add - i32.const 268435455 - i32.const -1 - i32.xor - i32.and - i32.eq - i32.eqz - if - i32.const 0 - i32.const 2016 - i32.const 103 - 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/purerc/onIncrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 2016 - i32.const 106 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/rt/purerc/__retain (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $0 - ) - (func $~lib/rt/common/__allocArray (; 43 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $~lib/rt/__allocArray (; 31 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -3775,7 +2371,7 @@ local.set $6 local.get $4 local.get $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $4 local.get $6 @@ -3795,182 +2391,7 @@ end local.get $4 ) - (func $~lib/rt/tlsf/reallocateBlock (; 44 ;) (type $FUNCSIG$iiii) (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.get $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 - local.get $1 - i32.load - local.set $4 - local.get $4 - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 184 - i32.const 491 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32.const -4 - i32.and - i32.le_u - if - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - local.get $2 - i32.store offset=12 - local.get $1 - return - end - block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32) - 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 - end - local.set $6 - local.get $6 - i32.load - local.set $7 - local.get $7 - i32.const 1 - i32.and - if - local.get $4 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.add - local.get $7 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $5 - local.get $5 - local.get $3 - i32.ge_u - if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 - i32.const 3 - i32.and - local.get $5 - i32.or - i32.store - local.get $1 - local.get $2 - i32.store offset=12 - local.get $0 - local.get $1 - local.get $3 - call $~lib/rt/tlsf/prepareBlock - local.get $1 - return - end - end - local.get $0 - local.get $2 - call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 - i32.load offset=4 - i32.store offset=4 - local.get $8 - local.get $1 - i32.load offset=8 - i32.store offset=8 - local.get $8 - i32.const 16 - i32.add - local.get $1 - i32.const 16 - i32.add - local.get $2 - call $~lib/memory/memory.copy - local.get $1 - local.get $4 - i32.const 1 - i32.or - i32.store - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - local.get $1 - call $~lib/rt/tlsf/onFree - local.get $8 - ) - (func $~lib/rt/tlsf/__realloc (; 45 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 184 - i32.const 552 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 184 - i32.const 553 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - local.get $1 - call $~lib/rt/tlsf/reallocateBlock - i32.const 16 - i32.add - ) - (func $~lib/memory/memory.fill (; 46 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/memory.fill (; 32 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4233,7 +2654,7 @@ end end ) - (func $~lib/array/ensureSize (; 47 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/ensureSize (; 33 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4253,8 +2674,8 @@ i32.shr_u i32.gt_u if - i32.const 1600 - i32.const 2072 + i32.const 1496 + i32.const 1912 i32.const 14 i32.const 47 call $~lib/builtins/abort @@ -4285,7 +2706,7 @@ if local.get $0 local.get $6 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $0 local.get $6 @@ -4296,268 +2717,12 @@ i32.store offset=8 end ) - (func $~lib/rt/tlsf/freeBlock (; 48 ;) (type $FUNCSIG$vii) (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 184 - i32.const 530 - 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/tlsf/onFree - ) - (func $~lib/rt/common/__typeinfo (; 49 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/builtins/RTTI_BASE - local.set $1 - local.get $0 - i32.eqz - if (result i32) - i32.const 1 - else - local.get $0 - local.get $1 - i32.load - i32.gt_u - end - if - i32.const 2120 - i32.const 2176 - i32.const 55 - i32.const 34 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.get $0 - i32.const 8 - i32.mul - i32.add - i32.load - ) - (func $~lib/rt/purerc/growRoots (; 50 ;) (type $FUNCSIG$v) - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - global.get $~lib/rt/purerc/ROOTS - local.set $0 - global.get $~lib/rt/purerc/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 - local.get $0 - local.get $1 - call $~lib/memory/memory.copy - local.get $5 - global.set $~lib/rt/purerc/ROOTS - local.get $5 - local.get $1 - i32.add - global.set $~lib/rt/purerc/CUR - local.get $5 - local.get $4 - i32.add - global.set $~lib/rt/purerc/END - ) - (func $~lib/rt/purerc/appendRoot (; 51 ;) (type $FUNCSIG$vi) (param $0 i32) - (local $1 i32) - global.get $~lib/rt/purerc/CUR - local.set $1 - local.get $1 - global.get $~lib/rt/purerc/END - i32.ge_u - if - call $~lib/rt/purerc/growRoots - global.get $~lib/rt/purerc/CUR - local.set $1 - end - local.get $1 - local.get $0 - i32.store - local.get $1 - i32.const 1 - i32.add - global.set $~lib/rt/purerc/CUR - ) - (func $~lib/rt/purerc/decrement (; 52 ;) (type $FUNCSIG$vi) (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/purerc/onDecrement - local.get $0 - i32.load - i32.const 1 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 2016 - i32.const 114 - 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/builtins/__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 2016 - i32.const 123 - i32.const 15 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - call $~lib/rt/common/__typeinfo - i32.const 8 - 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/purerc/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/purerc/__retainRelease (; 53 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - local.get $1 - i32.ne - if - global.get $~lib/builtins/HEAP_BASE - local.set $2 - local.get $0 - local.get $2 - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/increment - end - local.get $1 - local.get $2 - i32.gt_u - if - local.get $1 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - end - local.get $0 - ) - (func $~lib/array/Array<~lib/string/String>#push (; 54 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#push (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.load offset=12 @@ -4581,7 +2746,7 @@ local.get $1 local.get $4 i32.load - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease i32.store local.get $0 local.get $3 @@ -4589,10 +2754,10 @@ local.get $3 local.set $4 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 ) - (func $~lib/string/String#split (; 55 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#split (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4605,7 +2770,7 @@ (local $12 i32) (local $13 i32) local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $0 i32.const 0 @@ -4613,7 +2778,7 @@ i32.eqz if i32.const 0 - i32.const 312 + i32.const 208 i32.const 357 i32.const 4 call $~lib/builtins/abort @@ -4626,11 +2791,11 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -4643,21 +2808,21 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.set $3 local.get $3 i32.load offset=4 local.set $4 local.get $4 local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain i32.store local.get $3 end - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -4684,11 +2849,11 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $4 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -4705,7 +2870,7 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.set $4 local.get $4 i32.load offset=4 @@ -4739,7 +2904,7 @@ local.get $8 i32.store local.get $8 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain drop local.get $7 i32.const 1 @@ -4751,10 +2916,10 @@ unreachable end local.get $4 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $8 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 return else @@ -4765,17 +2930,17 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray + call $~lib/rt/__allocArray local.set $3 local.get $3 i32.load offset=4 i32.const 120 i32.store local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $4 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -4784,8 +2949,8 @@ i32.const 2 i32.const 17 i32.const 0 - call $~lib/rt/common/__allocArray - call $~lib/rt/purerc/__retain + call $~lib/rt/__allocArray + call $~lib/rt/pure/__retain local.set $9 i32.const 0 local.set $10 @@ -4847,7 +3012,7 @@ local.get $9 local.set $4 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 return end @@ -4869,7 +3034,7 @@ local.get $9 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 return end @@ -4910,14 +3075,14 @@ local.get $9 local.set $3 local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/array/Array<~lib/string/String>#get:length (; 56 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#get:length (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 57 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -4925,16 +3090,16 @@ i32.shl i32.add i32.load - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/array/Array<~lib/string/String>#__get (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__get (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $1 local.get $0 i32.load offset=12 i32.ge_u if - i32.const 2232 - i32.const 2072 + i32.const 1960 + i32.const 1912 i32.const 97 i32.const 45 call $~lib/builtins/abort @@ -4947,8 +3112,8 @@ i32.shr_u i32.ge_u if - i32.const 2120 i32.const 2072 + i32.const 1912 i32.const 100 i32.const 61 call $~lib/builtins/abort @@ -4958,7 +3123,7 @@ local.get $1 call $~lib/array/Array<~lib/string/String>#__unchecked_get ) - (func $~lib/util/number/decimalCount32 (; 59 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/decimalCount32 (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 100000 @@ -5027,7 +3192,7 @@ unreachable unreachable ) - (func $~lib/util/number/utoa32_lut (; 60 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/number/utoa32_lut (; 40 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -5035,7 +3200,7 @@ (local $7 i32) (local $8 i64) (local $9 i64) - i32.const 2840 + i32.const 2624 i32.load offset=4 local.set $3 block $break|0 @@ -5168,7 +3333,7 @@ i32.store16 end ) - (func $~lib/util/number/itoa32 (; 61 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa32 (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5178,8 +3343,8 @@ local.get $0 i32.eqz if - i32.const 896 - call $~lib/rt/purerc/__retain + i32.const 792 + call $~lib/rt/pure/__retain return end local.get $0 @@ -5223,9 +3388,9 @@ i32.store16 end local.get $3 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/utoa32 (; 62 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/utoa32 (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5234,8 +3399,8 @@ local.get $0 i32.eqz if - i32.const 896 - call $~lib/rt/purerc/__retain + i32.const 792 + call $~lib/rt/pure/__retain return end local.get $0 @@ -5260,9 +3425,9 @@ call $~lib/util/number/utoa32_lut end local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/decimalCount64 (; 63 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/decimalCount64 (; 43 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) local.get $0 i64.const 1000000000000000 @@ -5331,7 +3496,7 @@ unreachable unreachable ) - (func $~lib/util/number/utoa64_lut (; 64 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/util/number/utoa64_lut (; 44 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i64) (local $5 i32) @@ -5343,7 +3508,7 @@ (local $11 i32) (local $12 i64) (local $13 i64) - i32.const 2840 + i32.const 2624 i32.load offset=4 local.set $3 block $break|0 @@ -5457,7 +3622,7 @@ local.get $2 call $~lib/util/number/utoa32_lut ) - (func $~lib/util/number/utoa64 (; 65 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/utoa64 (; 45 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5468,8 +3633,8 @@ local.get $0 i64.eqz if - i32.const 896 - call $~lib/rt/purerc/__retain + i32.const 792 + call $~lib/rt/pure/__retain return end local.get $0 @@ -5524,9 +3689,9 @@ end end local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa64 (; 66 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa64 (; 46 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5538,8 +3703,8 @@ local.get $0 i64.eqz if - i32.const 896 - call $~lib/rt/purerc/__retain + i32.const 792 + call $~lib/rt/pure/__retain return end local.get $0 @@ -5615,21 +3780,21 @@ i32.store16 end local.get $2 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/builtins/isFinite (; 67 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/builtins/isFinite (; 47 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) local.get $0 local.get $0 f64.sub f64.const 0 f64.eq ) - (func $~lib/builtins/isNaN (; 68 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/builtins/isNaN (; 48 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) local.get $0 local.get $0 f64.ne ) - (func $~lib/array/Array#__unchecked_get (; 69 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) + (func $~lib/array/Array#__unchecked_get (; 49 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64) local.get $0 i32.load offset=4 local.get $1 @@ -5638,7 +3803,7 @@ i32.add i64.load ) - (func $~lib/array/Array#__unchecked_get (; 70 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__unchecked_get (; 50 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load offset=4 local.get $1 @@ -5647,7 +3812,7 @@ i32.add i32.load16_s ) - (func $~lib/util/number/genDigits (; 71 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/util/number/genDigits (; 51 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) (local $7 i32) (local $8 i64) (local $9 i64) @@ -5702,7 +3867,7 @@ local.set $14 local.get $6 local.set $15 - i32.const 5208 + i32.const 4992 i32.load offset=4 local.set $16 block $break|0 @@ -6203,7 +4368,7 @@ end local.get $15 ) - (func $~lib/util/number/prettify (; 72 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/prettify (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6533,7 +4698,7 @@ unreachable unreachable ) - (func $~lib/util/number/dtoa_core (; 73 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/util/number/dtoa_core (; 53 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 i32) (local $3 f64) (local $4 i32) @@ -6702,11 +4867,11 @@ i32.shl i32.sub global.set $~lib/util/number/_K - i32.const 4896 + i32.const 4680 local.get $13 call $~lib/array/Array#__unchecked_get global.set $~lib/util/number/_frc_pow - i32.const 5120 + i32.const 4904 local.get $13 call $~lib/array/Array#__unchecked_get global.set $~lib/util/number/_exp_pow @@ -6971,7 +5136,7 @@ local.get $2 i32.add ) - (func $~lib/string/String#substring (; 74 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#substring (; 54 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6986,7 +5151,7 @@ i32.eqz if i32.const 0 - i32.const 312 + i32.const 208 i32.const 196 i32.const 4 call $~lib/builtins/abort @@ -7057,7 +5222,7 @@ i32.eqz if i32.const 120 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $8 @@ -7074,7 +5239,7 @@ end if local.get $0 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $3 @@ -7088,46 +5253,9 @@ local.get $3 call $~lib/memory/memory.copy local.get $10 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $~lib/rt/tlsf/__free (; 75 ;) (type $FUNCSIG$vi) (param $0 i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - i32.const 0 - i32.const 184 - i32.const 560 - i32.const 13 - call $~lib/builtins/abort - unreachable - end - 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 184 - i32.const 561 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/tlsf/freeBlock - ) - (func $~lib/util/number/dtoa (; 76 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/util/number/dtoa (; 55 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -7135,8 +5263,8 @@ f64.const 0 f64.eq if - i32.const 4064 - call $~lib/rt/purerc/__retain + i32.const 3848 + call $~lib/rt/pure/__retain return end local.get $0 @@ -7146,17 +5274,17 @@ local.get $0 call $~lib/builtins/isNaN if - i32.const 4088 - call $~lib/rt/purerc/__retain + i32.const 3872 + call $~lib/rt/pure/__retain return end - i32.const 4112 - i32.const 4152 + i32.const 3896 + i32.const 3936 local.get $0 f64.const 0 f64.lt select - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end i32.const 28 @@ -7174,7 +5302,7 @@ i32.eq if local.get $1 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain return end local.get $1 @@ -7186,18 +5314,7 @@ call $~lib/rt/tlsf/__free local.get $3 ) - (func $~lib/rt/purerc/__release (; 77 ;) (type $FUNCSIG$vi) (param $0 i32) - local.get $0 - global.get $~lib/builtins/HEAP_BASE - i32.gt_u - if - local.get $0 - i32.const 16 - i32.sub - call $~lib/rt/purerc/decrement - end - ) - (func $start:std/string (; 78 ;) (type $FUNCSIG$v) + (func $start:std/string (; 56 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -7425,7 +5542,7 @@ i32.const 54 call $~lib/string/String.fromCharCode local.tee $1 - i32.const 288 + i32.const 184 call $~lib/string/String.__eq i32.eqz if @@ -7441,7 +5558,7 @@ i32.add call $~lib/string/String.fromCharCode local.tee $2 - i32.const 288 + i32.const 184 call $~lib/string/String.__eq i32.eqz if @@ -7469,7 +5586,7 @@ i32.const 54 call $~lib/string/String.fromCodePoint local.tee $4 - i32.const 288 + i32.const 184 call $~lib/string/String.__eq i32.eqz if @@ -7485,7 +5602,7 @@ local.tee $5 i32.eqz if - i32.const 360 + i32.const 256 i32.const 72 i32.const 23 i32.const 0 @@ -7493,7 +5610,7 @@ unreachable end global.get $std/string/str - i32.const 384 + i32.const 280 i32.const 0 call $~lib/string/String#startsWith i32.eqz @@ -7506,7 +5623,7 @@ unreachable end global.get $std/string/str - i32.const 432 + i32.const 328 global.get $~lib/string/String.MAX_LENGTH call $~lib/string/String#endsWith i32.eqz @@ -7521,8 +5638,8 @@ block $~lib/string/String#includes|inlined.0 (result i32) global.get $std/string/str local.set $8 - i32.const 464 - call $~lib/rt/purerc/__retain + i32.const 360 + call $~lib/rt/pure/__retain local.set $7 i32.const 0 local.set $6 @@ -7534,7 +5651,7 @@ i32.ne local.set $9 local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 end i32.const 0 @@ -7550,7 +5667,7 @@ end global.get $std/string/str i32.const 0 - i32.const 488 + i32.const 384 call $~lib/string/String#padStart local.tee $6 global.get $std/string/str @@ -7566,7 +5683,7 @@ end global.get $std/string/str i32.const 15 - i32.const 488 + i32.const 384 call $~lib/string/String#padStart local.tee $7 global.get $std/string/str @@ -7582,10 +5699,10 @@ end i32.const 120 i32.const 3 - i32.const 488 + i32.const 384 call $~lib/string/String#padStart local.tee $8 - i32.const 512 + i32.const 408 call $~lib/string/String.__eq i32.eqz if @@ -7628,12 +5745,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 5 - i32.const 488 + i32.const 384 call $~lib/string/String#padStart local.tee $11 - i32.const 560 + i32.const 456 call $~lib/string/String.__eq i32.eqz if @@ -7644,12 +5761,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 6 - i32.const 592 + i32.const 488 call $~lib/string/String#padStart local.tee $12 - i32.const 616 + i32.const 512 call $~lib/string/String.__eq i32.eqz if @@ -7660,12 +5777,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 8 - i32.const 592 + i32.const 488 call $~lib/string/String#padStart local.tee $13 - i32.const 648 + i32.const 544 call $~lib/string/String.__eq i32.eqz if @@ -7678,7 +5795,7 @@ end global.get $std/string/str i32.const 0 - i32.const 488 + i32.const 384 call $~lib/string/String#padEnd local.tee $14 global.get $std/string/str @@ -7694,7 +5811,7 @@ end global.get $std/string/str i32.const 15 - i32.const 488 + i32.const 384 call $~lib/string/String#padEnd local.tee $15 global.get $std/string/str @@ -7710,10 +5827,10 @@ end i32.const 120 i32.const 3 - i32.const 488 + i32.const 384 call $~lib/string/String#padEnd local.tee $16 - i32.const 512 + i32.const 408 call $~lib/string/String.__eq i32.eqz if @@ -7756,12 +5873,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 5 - i32.const 488 + i32.const 384 call $~lib/string/String#padEnd local.tee $19 - i32.const 680 + i32.const 576 call $~lib/string/String.__eq i32.eqz if @@ -7772,12 +5889,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 6 - i32.const 536 + i32.const 432 call $~lib/string/String#padEnd local.tee $20 - i32.const 712 + i32.const 608 call $~lib/string/String.__eq i32.eqz if @@ -7788,12 +5905,12 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 8 - i32.const 536 + i32.const 432 call $~lib/string/String#padEnd local.tee $21 - i32.const 744 + i32.const 640 call $~lib/string/String.__eq i32.eqz if @@ -7820,7 +5937,7 @@ unreachable end i32.const 120 - i32.const 384 + i32.const 280 i32.const 0 call $~lib/string/String#indexOf i32.const -1 @@ -7880,7 +5997,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 0 call $~lib/string/String#indexOf i32.const 2 @@ -7895,7 +6012,7 @@ unreachable end global.get $std/string/str - i32.const 800 + i32.const 696 i32.const 0 call $~lib/string/String#indexOf i32.const -1 @@ -7910,7 +6027,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 2 call $~lib/string/String#indexOf i32.const 2 @@ -7925,7 +6042,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 3 call $~lib/string/String#indexOf i32.const -1 @@ -7940,7 +6057,7 @@ unreachable end global.get $std/string/str - i32.const 824 + i32.const 720 i32.const -1 call $~lib/string/String#indexOf i32.const 2 @@ -7970,7 +6087,7 @@ unreachable end i32.const 120 - i32.const 384 + i32.const 280 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#lastIndexOf i32.const -1 @@ -8001,7 +6118,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#lastIndexOf i32.const 2 @@ -8016,7 +6133,7 @@ unreachable end global.get $std/string/str - i32.const 800 + i32.const 696 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#lastIndexOf i32.const -1 @@ -8031,7 +6148,7 @@ unreachable end global.get $std/string/str - i32.const 848 + i32.const 744 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#lastIndexOf i32.const 15 @@ -8046,7 +6163,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 2 call $~lib/string/String#lastIndexOf i32.const 2 @@ -8061,7 +6178,7 @@ unreachable end global.get $std/string/str - i32.const 776 + i32.const 672 i32.const 3 call $~lib/string/String#lastIndexOf i32.const 2 @@ -8076,7 +6193,7 @@ unreachable end global.get $std/string/str - i32.const 824 + i32.const 720 i32.const -1 call $~lib/string/String#lastIndexOf i32.const -1 @@ -8091,7 +6208,7 @@ unreachable end global.get $std/string/str - i32.const 872 + i32.const 768 i32.const 0 call $~lib/string/String#lastIndexOf i32.const -1 @@ -8106,7 +6223,7 @@ unreachable end global.get $std/string/str - i32.const 384 + i32.const 280 i32.const 0 call $~lib/string/String#lastIndexOf i32.const 0 @@ -8120,7 +6237,7 @@ call $~lib/builtins/abort unreachable end - i32.const 896 + i32.const 792 i32.const 0 call $~lib/string/parseInt f64.const 0 @@ -8134,7 +6251,7 @@ call $~lib/builtins/abort unreachable end - i32.const 920 + i32.const 816 i32.const 0 call $~lib/string/parseInt f64.const 1 @@ -8148,7 +6265,7 @@ call $~lib/builtins/abort unreachable end - i32.const 944 + i32.const 840 i32.const 0 call $~lib/string/parseInt f64.const 5 @@ -8162,7 +6279,7 @@ call $~lib/builtins/abort unreachable end - i32.const 976 + i32.const 872 i32.const 0 call $~lib/string/parseInt f64.const 455 @@ -8176,7 +6293,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1008 + i32.const 904 i32.const 0 call $~lib/string/parseInt f64.const 3855 @@ -8190,7 +6307,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1040 + i32.const 936 i32.const 0 call $~lib/string/parseInt f64.const 3855 @@ -8204,7 +6321,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1072 + i32.const 968 i32.const 0 call $~lib/string/parseInt f64.const 11 @@ -8218,7 +6335,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1096 + i32.const 992 i32.const 0 call $~lib/string/parseInt f64.const 1 @@ -8232,7 +6349,7 @@ call $~lib/builtins/abort unreachable end - i32.const 896 + i32.const 792 call $~lib/string/parseFloat f64.const 0 f64.eq @@ -8245,7 +6362,7 @@ call $~lib/builtins/abort unreachable end - i32.const 920 + i32.const 816 call $~lib/string/parseFloat f64.const 1 f64.eq @@ -8258,7 +6375,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1120 + i32.const 1016 call $~lib/string/parseFloat f64.const 0.1 f64.eq @@ -8271,7 +6388,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1144 + i32.const 1040 call $~lib/string/parseFloat f64.const 0.25 f64.eq @@ -8284,7 +6401,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1168 + i32.const 1064 call $~lib/string/parseFloat f64.const 0.1 f64.eq @@ -8299,13 +6416,13 @@ end block i32.const 160 - i32.const 1200 + i32.const 1096 call $~lib/string/String.__concat local.tee $22 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $23 local.get $23 - i32.const 1224 + i32.const 1120 call $~lib/string/String.__eq i32.eqz if @@ -8329,9 +6446,9 @@ unreachable end local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end i32.const 120 i32.const 120 @@ -8370,7 +6487,7 @@ unreachable end i32.const 160 - i32.const 1200 + i32.const 1096 call $~lib/string/String.__ne i32.eqz if @@ -8393,8 +6510,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1248 - i32.const 1272 + i32.const 1144 + i32.const 1168 call $~lib/string/String.__ne i32.eqz if @@ -8405,8 +6522,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1248 - i32.const 1248 + i32.const 1144 + i32.const 1144 call $~lib/string/String.__eq i32.eqz if @@ -8417,8 +6534,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1296 - i32.const 1320 + i32.const 1192 + i32.const 1216 call $~lib/string/String.__ne i32.eqz if @@ -8429,8 +6546,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1344 - i32.const 1376 + i32.const 1240 + i32.const 1272 call $~lib/string/String.__ne i32.eqz if @@ -8441,8 +6558,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1408 - i32.const 1408 + i32.const 1304 + i32.const 1304 call $~lib/string/String.__eq i32.eqz if @@ -8453,8 +6570,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1408 - i32.const 1440 + i32.const 1304 + i32.const 1336 call $~lib/string/String.__ne i32.eqz if @@ -8465,8 +6582,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1472 - i32.const 1512 + i32.const 1368 + i32.const 1408 call $~lib/string/String.__ne i32.eqz if @@ -8477,7 +6594,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1200 + i32.const 1096 i32.const 160 call $~lib/string/String.__gt i32.eqz @@ -8489,7 +6606,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1552 + i32.const 1448 i32.const 160 call $~lib/string/String.__gt i32.eqz @@ -8501,8 +6618,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1552 - i32.const 1576 + i32.const 1448 + i32.const 1472 call $~lib/string/String.__gte i32.eqz if @@ -8513,8 +6630,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1552 - i32.const 1224 + i32.const 1448 + i32.const 1120 call $~lib/string/String.__gt i32.eqz if @@ -8525,8 +6642,8 @@ call $~lib/builtins/abort unreachable end - i32.const 1552 - i32.const 1224 + i32.const 1448 + i32.const 1120 call $~lib/string/String.__lt i32.eqz i32.eqz @@ -8538,7 +6655,7 @@ call $~lib/builtins/abort unreachable end - i32.const 1200 + i32.const 1096 global.get $std/string/nullStr call $~lib/string/String.__lt i32.eqz @@ -8552,7 +6669,7 @@ unreachable end global.get $std/string/nullStr - i32.const 1200 + i32.const 1096 call $~lib/string/String.__lt i32.eqz i32.eqz @@ -8564,7 +6681,7 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 120 call $~lib/string/String.__gt i32.eqz @@ -8577,7 +6694,7 @@ unreachable end i32.const 120 - i32.const 536 + i32.const 432 call $~lib/string/String.__lt i32.eqz if @@ -8588,7 +6705,7 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 120 call $~lib/string/String.__gte i32.eqz @@ -8601,7 +6718,7 @@ unreachable end i32.const 120 - i32.const 536 + i32.const 432 call $~lib/string/String.__lte i32.eqz if @@ -8612,7 +6729,7 @@ call $~lib/builtins/abort unreachable end - i32.const 536 + i32.const 432 i32.const 120 call $~lib/string/String.__lt i32.eqz @@ -8626,7 +6743,7 @@ unreachable end i32.const 120 - i32.const 536 + i32.const 432 call $~lib/string/String.__gt i32.eqz i32.eqz @@ -8700,7 +6817,7 @@ local.tee $24 call $~lib/string/String.__concat local.tee $25 - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain local.set $26 local.get $23 local.get $26 @@ -8715,17 +6832,17 @@ unreachable end local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end - i32.const 592 + i32.const 488 call $~lib/string/String#get:length i32.const 3 i32.eq @@ -8787,7 +6904,7 @@ i32.const 2 call $~lib/string/String#repeat local.tee $22 - i32.const 1576 + i32.const 1472 call $~lib/string/String.__eq i32.eqz if @@ -8802,7 +6919,7 @@ i32.const 3 call $~lib/string/String#repeat local.tee $23 - i32.const 1648 + i32.const 1544 call $~lib/string/String.__eq i32.eqz if @@ -8813,11 +6930,11 @@ call $~lib/builtins/abort unreachable end - i32.const 1224 + i32.const 1120 i32.const 4 call $~lib/string/String#repeat local.tee $27 - i32.const 1672 + i32.const 1568 call $~lib/string/String.__eq i32.eqz if @@ -8832,7 +6949,7 @@ i32.const 5 call $~lib/string/String#repeat local.tee $28 - i32.const 1704 + i32.const 1600 call $~lib/string/String.__eq i32.eqz if @@ -8847,7 +6964,7 @@ i32.const 6 call $~lib/string/String#repeat local.tee $29 - i32.const 1736 + i32.const 1632 call $~lib/string/String.__eq i32.eqz if @@ -8862,7 +6979,7 @@ i32.const 7 call $~lib/string/String#repeat local.tee $30 - i32.const 1768 + i32.const 1664 call $~lib/string/String.__eq i32.eqz if @@ -8873,16 +6990,16 @@ call $~lib/builtins/abort unreachable end - i32.const 1800 + i32.const 1696 global.get $std/string/str - call $~lib/rt/purerc/__retainRelease + call $~lib/rt/pure/__retainRelease global.set $std/string/str global.get $std/string/str i32.const 0 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#slice local.tee $31 - i32.const 1800 + i32.const 1696 call $~lib/string/String.__eq i32.eqz if @@ -8898,7 +7015,7 @@ global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#slice local.tee $32 - i32.const 1848 + i32.const 1744 call $~lib/string/String.__eq i32.eqz if @@ -8914,7 +7031,7 @@ global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#slice local.tee $33 - i32.const 1872 + i32.const 1768 call $~lib/string/String.__eq i32.eqz if @@ -8930,7 +7047,7 @@ i32.const 7 call $~lib/string/String#slice local.tee $34 - i32.const 1904 + i32.const 1800 call $~lib/string/String.__eq i32.eqz if @@ -8946,7 +7063,7 @@ i32.const -6 call $~lib/string/String#slice local.tee $35 - i32.const 1936 + i32.const 1832 call $~lib/string/String.__eq i32.eqz if @@ -8978,7 +7095,7 @@ i32.const -1 call $~lib/string/String#slice local.tee $37 - i32.const 1968 + i32.const 1864 call $~lib/string/String.__eq i32.eqz if @@ -8994,7 +7111,7 @@ local.set $38 block (result i32) local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 120 i32.const 0 global.get $~lib/builtins/i32.MAX_VALUE @@ -9014,7 +7131,7 @@ call $~lib/string/String.__eq local.set $40 local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 else i32.const 0 @@ -9032,7 +7149,7 @@ end block (result i32) local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 120 i32.const 120 global.get $~lib/builtins/i32.MAX_VALUE @@ -9054,9 +7171,9 @@ end block (result i32) local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release i32.const 120 - i32.const 776 + i32.const 672 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split end @@ -9074,7 +7191,7 @@ call $~lib/string/String.__eq local.set $40 local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 else i32.const 0 @@ -9092,9 +7209,9 @@ end block (result i32) local.get $38 - call $~lib/rt/purerc/__release - i32.const 2344 - i32.const 2376 + call $~lib/rt/pure/__release + i32.const 2128 + i32.const 2160 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split end @@ -9108,11 +7225,11 @@ i32.const 0 call $~lib/array/Array<~lib/string/String>#__get local.tee $39 - i32.const 2344 + i32.const 2128 call $~lib/string/String.__eq local.set $40 local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 else i32.const 0 @@ -9130,9 +7247,9 @@ end block (result i32) local.get $38 - call $~lib/rt/purerc/__release - i32.const 2344 - i32.const 776 + call $~lib/rt/pure/__release + i32.const 2128 + i32.const 672 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split end @@ -9150,7 +7267,7 @@ call $~lib/string/String.__eq local.set $40 local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 else i32.const 0 @@ -9162,11 +7279,11 @@ i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.tee $39 - i32.const 1200 + i32.const 1096 call $~lib/string/String.__eq local.set $40 local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 else i32.const 0 @@ -9178,11 +7295,11 @@ i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.tee $39 - i32.const 2400 + i32.const 2184 call $~lib/string/String.__eq local.set $40 local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 else i32.const 0 @@ -9199,12 +7316,12 @@ unreachable end local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release end i32.const 0 call $~lib/util/number/itoa32 local.tee $38 - i32.const 896 + i32.const 792 call $~lib/string/String.__eq i32.eqz if @@ -9218,7 +7335,7 @@ i32.const 1 call $~lib/util/number/itoa32 local.tee $39 - i32.const 920 + i32.const 816 call $~lib/string/String.__eq i32.eqz if @@ -9232,7 +7349,7 @@ i32.const 8 call $~lib/util/number/itoa32 local.tee $40 - i32.const 2872 + i32.const 2656 call $~lib/string/String.__eq i32.eqz if @@ -9246,7 +7363,7 @@ i32.const 123 call $~lib/util/number/itoa32 local.tee $41 - i32.const 592 + i32.const 488 call $~lib/string/String.__eq i32.eqz if @@ -9260,7 +7377,7 @@ i32.const -1000 call $~lib/util/number/itoa32 local.tee $42 - i32.const 2896 + i32.const 2680 call $~lib/string/String.__eq i32.eqz if @@ -9274,7 +7391,7 @@ i32.const 1234 call $~lib/util/number/itoa32 local.tee $43 - i32.const 2928 + i32.const 2712 call $~lib/string/String.__eq i32.eqz if @@ -9288,7 +7405,7 @@ i32.const 12345 call $~lib/util/number/itoa32 local.tee $44 - i32.const 2952 + i32.const 2736 call $~lib/string/String.__eq i32.eqz if @@ -9302,7 +7419,7 @@ i32.const 123456 call $~lib/util/number/itoa32 local.tee $45 - i32.const 2984 + i32.const 2768 call $~lib/string/String.__eq i32.eqz if @@ -9316,7 +7433,7 @@ i32.const 1111111 call $~lib/util/number/itoa32 local.tee $46 - i32.const 3016 + i32.const 2800 call $~lib/string/String.__eq i32.eqz if @@ -9330,7 +7447,7 @@ i32.const 1234567 call $~lib/util/number/itoa32 local.tee $47 - i32.const 3048 + i32.const 2832 call $~lib/string/String.__eq i32.eqz if @@ -9344,7 +7461,7 @@ i32.const 2147483646 call $~lib/util/number/itoa32 local.tee $48 - i32.const 3080 + i32.const 2864 call $~lib/string/String.__eq i32.eqz if @@ -9358,7 +7475,7 @@ i32.const 2147483647 call $~lib/util/number/itoa32 local.tee $49 - i32.const 3120 + i32.const 2904 call $~lib/string/String.__eq i32.eqz if @@ -9372,7 +7489,7 @@ i32.const -2147483648 call $~lib/util/number/itoa32 local.tee $50 - i32.const 3160 + i32.const 2944 call $~lib/string/String.__eq i32.eqz if @@ -9386,7 +7503,7 @@ i32.const -1 call $~lib/util/number/itoa32 local.tee $51 - i32.const 3200 + i32.const 2984 call $~lib/string/String.__eq i32.eqz if @@ -9400,7 +7517,7 @@ i32.const 0 call $~lib/util/number/utoa32 local.tee $52 - i32.const 896 + i32.const 792 call $~lib/string/String.__eq i32.eqz if @@ -9414,7 +7531,7 @@ i32.const 1000 call $~lib/util/number/utoa32 local.tee $53 - i32.const 3224 + i32.const 3008 call $~lib/string/String.__eq i32.eqz if @@ -9428,7 +7545,7 @@ i32.const 2147483647 call $~lib/util/number/utoa32 local.tee $54 - i32.const 3120 + i32.const 2904 call $~lib/string/String.__eq i32.eqz if @@ -9442,7 +7559,7 @@ i32.const -2147483648 call $~lib/util/number/utoa32 local.tee $55 - i32.const 3248 + i32.const 3032 call $~lib/string/String.__eq i32.eqz if @@ -9456,7 +7573,7 @@ global.get $~lib/builtins/u32.MAX_VALUE call $~lib/util/number/utoa32 local.tee $56 - i32.const 3288 + i32.const 3072 call $~lib/string/String.__eq i32.eqz if @@ -9470,7 +7587,7 @@ i64.const 0 call $~lib/util/number/utoa64 local.tee $57 - i32.const 896 + i32.const 792 call $~lib/string/String.__eq i32.eqz if @@ -9484,7 +7601,7 @@ i64.const 1234 call $~lib/util/number/utoa64 local.tee $58 - i32.const 2928 + i32.const 2712 call $~lib/string/String.__eq i32.eqz if @@ -9498,7 +7615,7 @@ i64.const 99999999 call $~lib/util/number/utoa64 local.tee $59 - i32.const 3328 + i32.const 3112 call $~lib/string/String.__eq i32.eqz if @@ -9512,7 +7629,7 @@ i64.const 100000000 call $~lib/util/number/utoa64 local.tee $60 - i32.const 3360 + i32.const 3144 call $~lib/string/String.__eq i32.eqz if @@ -9526,7 +7643,7 @@ i64.const 4294967295 call $~lib/util/number/utoa64 local.tee $61 - i32.const 3288 + i32.const 3072 call $~lib/string/String.__eq i32.eqz if @@ -9540,7 +7657,7 @@ i64.const 68719476735 call $~lib/util/number/utoa64 local.tee $62 - i32.const 3400 + i32.const 3184 call $~lib/string/String.__eq i32.eqz if @@ -9554,7 +7671,7 @@ i64.const 868719476735 call $~lib/util/number/utoa64 local.tee $63 - i32.const 3440 + i32.const 3224 call $~lib/string/String.__eq i32.eqz if @@ -9568,7 +7685,7 @@ i64.const 999868719476735 call $~lib/util/number/utoa64 local.tee $64 - i32.const 3480 + i32.const 3264 call $~lib/string/String.__eq i32.eqz if @@ -9582,7 +7699,7 @@ i64.const 9999868719476735 call $~lib/util/number/utoa64 local.tee $65 - i32.const 3528 + i32.const 3312 call $~lib/string/String.__eq i32.eqz if @@ -9596,7 +7713,7 @@ i64.const 19999868719476735 call $~lib/util/number/utoa64 local.tee $66 - i32.const 3576 + i32.const 3360 call $~lib/string/String.__eq i32.eqz if @@ -9610,7 +7727,7 @@ global.get $~lib/builtins/u64.MAX_VALUE call $~lib/util/number/utoa64 local.tee $67 - i32.const 3632 + i32.const 3416 call $~lib/string/String.__eq i32.eqz if @@ -9624,7 +7741,7 @@ i64.const 0 call $~lib/util/number/itoa64 local.tee $68 - i32.const 896 + i32.const 792 call $~lib/string/String.__eq i32.eqz if @@ -9638,7 +7755,7 @@ i64.const -1234 call $~lib/util/number/itoa64 local.tee $69 - i32.const 3688 + i32.const 3472 call $~lib/string/String.__eq i32.eqz if @@ -9652,7 +7769,7 @@ i64.const 4294967295 call $~lib/util/number/itoa64 local.tee $70 - i32.const 3288 + i32.const 3072 call $~lib/string/String.__eq i32.eqz if @@ -9666,7 +7783,7 @@ i64.const -4294967295 call $~lib/util/number/itoa64 local.tee $71 - i32.const 3720 + i32.const 3504 call $~lib/string/String.__eq i32.eqz if @@ -9680,7 +7797,7 @@ i64.const 68719476735 call $~lib/util/number/itoa64 local.tee $72 - i32.const 3400 + i32.const 3184 call $~lib/string/String.__eq i32.eqz if @@ -9694,7 +7811,7 @@ i64.const -68719476735 call $~lib/util/number/itoa64 local.tee $73 - i32.const 3760 + i32.const 3544 call $~lib/string/String.__eq i32.eqz if @@ -9708,7 +7825,7 @@ i64.const -868719476735 call $~lib/util/number/itoa64 local.tee $74 - i32.const 3800 + i32.const 3584 call $~lib/string/String.__eq i32.eqz if @@ -9722,7 +7839,7 @@ i64.const -999868719476735 call $~lib/util/number/itoa64 local.tee $75 - i32.const 3848 + i32.const 3632 call $~lib/string/String.__eq i32.eqz if @@ -9736,7 +7853,7 @@ i64.const -19999868719476735 call $~lib/util/number/itoa64 local.tee $76 - i32.const 3896 + i32.const 3680 call $~lib/string/String.__eq i32.eqz if @@ -9750,7 +7867,7 @@ global.get $~lib/builtins/i64.MAX_VALUE call $~lib/util/number/itoa64 local.tee $77 - i32.const 3952 + i32.const 3736 call $~lib/string/String.__eq i32.eqz if @@ -9764,7 +7881,7 @@ global.get $~lib/builtins/i64.MIN_VALUE call $~lib/util/number/itoa64 local.tee $78 - i32.const 4008 + i32.const 3792 call $~lib/string/String.__eq i32.eqz if @@ -9778,7 +7895,7 @@ f64.const 0 call $~lib/util/number/dtoa local.tee $79 - i32.const 4064 + i32.const 3848 call $~lib/string/String.__eq i32.eqz if @@ -9792,7 +7909,7 @@ f64.const -0 call $~lib/util/number/dtoa local.tee $80 - i32.const 4064 + i32.const 3848 call $~lib/string/String.__eq i32.eqz if @@ -9806,7 +7923,7 @@ f64.const nan:0x8000000000000 call $~lib/util/number/dtoa local.tee $81 - i32.const 4088 + i32.const 3872 call $~lib/string/String.__eq i32.eqz if @@ -9820,7 +7937,7 @@ f64.const inf call $~lib/util/number/dtoa local.tee $82 - i32.const 4152 + i32.const 3936 call $~lib/string/String.__eq i32.eqz if @@ -9835,7 +7952,7 @@ f64.neg call $~lib/util/number/dtoa local.tee $83 - i32.const 4112 + i32.const 3896 call $~lib/string/String.__eq i32.eqz if @@ -9849,7 +7966,7 @@ global.get $~lib/builtins/f64.EPSILON call $~lib/util/number/dtoa local.tee $84 - i32.const 5240 + i32.const 5024 call $~lib/string/String.__eq i32.eqz if @@ -9864,7 +7981,7 @@ f64.neg call $~lib/util/number/dtoa local.tee $85 - i32.const 5304 + i32.const 5088 call $~lib/string/String.__eq i32.eqz if @@ -9878,7 +7995,7 @@ global.get $~lib/builtins/f64.MAX_VALUE call $~lib/util/number/dtoa local.tee $86 - i32.const 5368 + i32.const 5152 call $~lib/string/String.__eq i32.eqz if @@ -9893,7 +8010,7 @@ f64.neg call $~lib/util/number/dtoa local.tee $87 - i32.const 5432 + i32.const 5216 call $~lib/string/String.__eq i32.eqz if @@ -9907,7 +8024,7 @@ f64.const 4185580496821356722454785e274 call $~lib/util/number/dtoa local.tee $88 - i32.const 5496 + i32.const 5280 call $~lib/string/String.__eq i32.eqz if @@ -9921,7 +8038,7 @@ f64.const 2.2250738585072014e-308 call $~lib/util/number/dtoa local.tee $89 - i32.const 5560 + i32.const 5344 call $~lib/string/String.__eq i32.eqz if @@ -9935,7 +8052,7 @@ f64.const 4.940656e-318 call $~lib/util/number/dtoa local.tee $90 - i32.const 5624 + i32.const 5408 call $~lib/string/String.__eq i32.eqz if @@ -9949,7 +8066,7 @@ f64.const 9060801153433600 call $~lib/util/number/dtoa local.tee $91 - i32.const 5672 + i32.const 5456 call $~lib/string/String.__eq i32.eqz if @@ -9963,7 +8080,7 @@ f64.const 4708356024711512064 call $~lib/util/number/dtoa local.tee $92 - i32.const 5728 + i32.const 5512 call $~lib/string/String.__eq i32.eqz if @@ -9977,7 +8094,7 @@ f64.const 9409340012568248320 call $~lib/util/number/dtoa local.tee $93 - i32.const 5792 + i32.const 5576 call $~lib/string/String.__eq i32.eqz if @@ -9991,7 +8108,7 @@ f64.const 5e-324 call $~lib/util/number/dtoa local.tee $94 - i32.const 5856 + i32.const 5640 call $~lib/string/String.__eq i32.eqz if @@ -10005,7 +8122,7 @@ f64.const 1 call $~lib/util/number/dtoa local.tee $95 - i32.const 5888 + i32.const 5672 call $~lib/string/String.__eq i32.eqz if @@ -10019,7 +8136,7 @@ f64.const 0.1 call $~lib/util/number/dtoa local.tee $96 - i32.const 1120 + i32.const 1016 call $~lib/string/String.__eq i32.eqz if @@ -10033,7 +8150,7 @@ f64.const -1 call $~lib/util/number/dtoa local.tee $97 - i32.const 5912 + i32.const 5696 call $~lib/string/String.__eq i32.eqz if @@ -10047,7 +8164,7 @@ f64.const -0.1 call $~lib/util/number/dtoa local.tee $98 - i32.const 5936 + i32.const 5720 call $~lib/string/String.__eq i32.eqz if @@ -10061,7 +8178,7 @@ f64.const 1e6 call $~lib/util/number/dtoa local.tee $99 - i32.const 5960 + i32.const 5744 call $~lib/string/String.__eq i32.eqz if @@ -10075,7 +8192,7 @@ f64.const 1e-06 call $~lib/util/number/dtoa local.tee $100 - i32.const 6000 + i32.const 5784 call $~lib/string/String.__eq i32.eqz if @@ -10089,7 +8206,7 @@ f64.const -1e6 call $~lib/util/number/dtoa local.tee $101 - i32.const 6032 + i32.const 5816 call $~lib/string/String.__eq i32.eqz if @@ -10103,7 +8220,7 @@ f64.const -1e-06 call $~lib/util/number/dtoa local.tee $102 - i32.const 6072 + i32.const 5856 call $~lib/string/String.__eq i32.eqz if @@ -10117,7 +8234,7 @@ f64.const 1e7 call $~lib/util/number/dtoa local.tee $103 - i32.const 6112 + i32.const 5896 call $~lib/string/String.__eq i32.eqz if @@ -10131,7 +8248,7 @@ f64.const 1e-07 call $~lib/util/number/dtoa local.tee $104 - i32.const 6152 + i32.const 5936 call $~lib/string/String.__eq i32.eqz if @@ -10145,7 +8262,7 @@ f64.const 1.e+308 call $~lib/util/number/dtoa local.tee $105 - i32.const 6176 + i32.const 5960 call $~lib/string/String.__eq i32.eqz if @@ -10159,7 +8276,7 @@ f64.const -1.e+308 call $~lib/util/number/dtoa local.tee $106 - i32.const 6208 + i32.const 5992 call $~lib/string/String.__eq i32.eqz if @@ -10173,7 +8290,7 @@ f64.const inf call $~lib/util/number/dtoa local.tee $107 - i32.const 4152 + i32.const 3936 call $~lib/string/String.__eq i32.eqz if @@ -10187,7 +8304,7 @@ f64.const -inf call $~lib/util/number/dtoa local.tee $108 - i32.const 4112 + i32.const 3896 call $~lib/string/String.__eq i32.eqz if @@ -10201,7 +8318,7 @@ f64.const 1e-308 call $~lib/util/number/dtoa local.tee $109 - i32.const 6240 + i32.const 6024 call $~lib/string/String.__eq i32.eqz if @@ -10215,7 +8332,7 @@ f64.const -1e-308 call $~lib/util/number/dtoa local.tee $110 - i32.const 6272 + i32.const 6056 call $~lib/string/String.__eq i32.eqz if @@ -10229,7 +8346,7 @@ f64.const 1e-323 call $~lib/util/number/dtoa local.tee $111 - i32.const 6304 + i32.const 6088 call $~lib/string/String.__eq i32.eqz if @@ -10243,7 +8360,7 @@ f64.const -1e-323 call $~lib/util/number/dtoa local.tee $112 - i32.const 6336 + i32.const 6120 call $~lib/string/String.__eq i32.eqz if @@ -10257,7 +8374,7 @@ f64.const 0 call $~lib/util/number/dtoa local.tee $113 - i32.const 4064 + i32.const 3848 call $~lib/string/String.__eq i32.eqz if @@ -10271,7 +8388,7 @@ f64.const 4294967272 call $~lib/util/number/dtoa local.tee $114 - i32.const 6368 + i32.const 6152 call $~lib/string/String.__eq i32.eqz if @@ -10285,7 +8402,7 @@ f64.const 1.2312145673456234e-08 call $~lib/util/number/dtoa local.tee $115 - i32.const 6408 + i32.const 6192 call $~lib/string/String.__eq i32.eqz if @@ -10299,7 +8416,7 @@ f64.const 555555555.5555556 call $~lib/util/number/dtoa local.tee $116 - i32.const 6472 + i32.const 6256 call $~lib/string/String.__eq i32.eqz if @@ -10313,7 +8430,7 @@ f64.const 0.9999999999999999 call $~lib/util/number/dtoa local.tee $117 - i32.const 6528 + i32.const 6312 call $~lib/string/String.__eq i32.eqz if @@ -10327,7 +8444,7 @@ f64.const 1 call $~lib/util/number/dtoa local.tee $118 - i32.const 5888 + i32.const 5672 call $~lib/string/String.__eq i32.eqz if @@ -10341,7 +8458,7 @@ f64.const 12.34 call $~lib/util/number/dtoa local.tee $119 - i32.const 6584 + i32.const 6368 call $~lib/string/String.__eq i32.eqz if @@ -10357,7 +8474,7 @@ f64.div call $~lib/util/number/dtoa local.tee $120 - i32.const 6616 + i32.const 6400 call $~lib/string/String.__eq i32.eqz if @@ -10371,7 +8488,7 @@ f64.const 1234e17 call $~lib/util/number/dtoa local.tee $121 - i32.const 6672 + i32.const 6456 call $~lib/string/String.__eq i32.eqz if @@ -10385,7 +8502,7 @@ f64.const 1234e18 call $~lib/util/number/dtoa local.tee $122 - i32.const 6736 + i32.const 6520 call $~lib/string/String.__eq i32.eqz if @@ -10399,7 +8516,7 @@ f64.const 2.71828 call $~lib/util/number/dtoa local.tee $123 - i32.const 6776 + i32.const 6560 call $~lib/string/String.__eq i32.eqz if @@ -10413,7 +8530,7 @@ f64.const 0.0271828 call $~lib/util/number/dtoa local.tee $124 - i32.const 6808 + i32.const 6592 call $~lib/string/String.__eq i32.eqz if @@ -10427,7 +8544,7 @@ f64.const 271.828 call $~lib/util/number/dtoa local.tee $125 - i32.const 6848 + i32.const 6632 call $~lib/string/String.__eq i32.eqz if @@ -10441,7 +8558,7 @@ f64.const 1.1e+128 call $~lib/util/number/dtoa local.tee $126 - i32.const 6880 + i32.const 6664 call $~lib/string/String.__eq i32.eqz if @@ -10455,7 +8572,7 @@ f64.const 1.1e-64 call $~lib/util/number/dtoa local.tee $127 - i32.const 6912 + i32.const 6696 call $~lib/string/String.__eq i32.eqz if @@ -10469,7 +8586,7 @@ f64.const 0.000035689 call $~lib/util/number/dtoa local.tee $128 - i32.const 6944 + i32.const 6728 call $~lib/string/String.__eq i32.eqz if @@ -10481,274 +8598,2205 @@ unreachable end global.get $std/string/str - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $0 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $1 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $2 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $3 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $4 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $5 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $6 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $7 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $8 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $9 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $10 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $11 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $12 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $13 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $14 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $15 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $16 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $17 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $18 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $19 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $20 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $21 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $22 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $23 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $24 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $25 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $26 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $27 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $28 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $29 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $30 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $31 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $32 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $33 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $34 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $35 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $36 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $37 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $38 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $39 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $40 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $41 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $42 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $43 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $44 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $45 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $46 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $47 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $48 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $49 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $50 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $51 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $52 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $53 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $54 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $55 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $56 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $57 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $58 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $59 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $60 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $61 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $62 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $63 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $64 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $65 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $66 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $67 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $68 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $69 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $70 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $71 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $72 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $73 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $74 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $75 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $76 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $77 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $78 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $79 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $80 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $81 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $82 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $83 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $84 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $85 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $86 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $87 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $88 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $89 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $90 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $91 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $92 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $93 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $94 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $95 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $96 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $97 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $98 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $99 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $100 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $101 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $102 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $103 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $104 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $105 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $106 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $107 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $108 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $109 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $110 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $111 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $112 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $113 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $114 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $115 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $116 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $117 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $118 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $119 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $120 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $121 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $122 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $123 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $124 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $125 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $126 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $127 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release local.get $128 - call $~lib/rt/purerc/__release + call $~lib/rt/pure/__release ) - (func $std/string/getString (; 79 ;) (type $FUNCSIG$i) (result i32) + (func $std/string/getString (; 57 ;) (type $FUNCSIG$i) (result i32) global.get $std/string/str - call $~lib/rt/purerc/__retain + call $~lib/rt/pure/__retain ) - (func $start (; 80 ;) (type $FUNCSIG$v) + (func $start (; 58 ;) (type $FUNCSIG$v) call $start:std/string ) - (func $~lib/rt/purerc/markGray (; 81 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/tlsf/removeBlock (; 59 ;) (type $FUNCSIG$vii) (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 6768 + i32.const 275 + 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 6768 + i32.const 277 + 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 6768 + i32.const 290 + 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 + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + 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 + end + i32.eq + if + block $~lib/rt/tlsf/SETHEAD|inlined.1 + 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 + end + local.get $7 + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + 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 + end + local.set $8 + block $~lib/rt/tlsf/SETSL|inlined.1 + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $8 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $8 + local.set $9 + local.get $11 + local.get $10 + i32.const 2 + i32.shl + i32.add + local.get $9 + i32.store offset=4 + end + local.get $8 + 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 (; 60 ;) (type $FUNCSIG$vii) (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 6768 + i32.const 203 + 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 6768 + i32.const 205 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + 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 + end + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + 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 + end + local.set $4 + local.get $4 + i32.load + local.set $5 + end + end + local.get $2 + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $1 + local.set $3 + local.get $3 + i32.const 4 + i32.sub + i32.load + end + local.set $3 + local.get $3 + i32.load + local.set $6 + local.get $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 226 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $6 + 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 $3 + call $~lib/rt/tlsf/removeBlock + local.get $3 + local.get $6 + i32.const 3 + i32.and + local.get $7 + i32.or + local.tee $2 + i32.store + local.get $3 + 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 6768 + i32.const 241 + 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 6768 + i32.const 242 + 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 6768 + i32.const 258 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $0 + local.set $3 + local.get $9 + local.set $6 + local.get $10 + local.set $7 + local.get $3 + local.get $6 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + 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 + block $~lib/rt/tlsf/SETHEAD|inlined.2 + local.get $0 + local.set $12 + local.get $9 + local.set $3 + local.get $10 + local.set $6 + local.get $1 + local.set $7 + local.get $12 + local.get $3 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=96 + end + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $9 + i32.shl + i32.or + i32.store + block $~lib/rt/tlsf/SETSL|inlined.2 + local.get $0 + local.set $3 + local.get $9 + local.set $6 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $0 + local.set $13 + local.get $9 + local.set $12 + local.get $13 + local.get $12 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + i32.const 1 + local.get $10 + i32.shl + i32.or + local.set $7 + local.get $3 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=4 + end + ) + (func $~lib/rt/tlsf/addMemory (; 61 ;) (type $FUNCSIG$iiii) (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 6768 + i32.const 384 + i32.const 4 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + end + 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 6768 + i32.const 394 + 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 6768 + i32.const 406 + 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 2 + i32.const 16 + i32.mul + 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 + block $~lib/rt/tlsf/SETTAIL|inlined.1 + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + end + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initializeRoot (; 62 ;) (type $FUNCSIG$v) + (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) + global.get $~lib/heap/HEAP_BASE + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + current_memory + local.set $1 + local.get $0 + 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 $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + grow_memory + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + i32.store + block $~lib/rt/tlsf/SETTAIL|inlined.0 + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + end + block $break|0 + i32.const 0 + local.set $4 + loop $repeat|0 + local.get $4 + i32.const 23 + i32.lt_u + i32.eqz + br_if $break|0 + block $~lib/rt/tlsf/SETSL|inlined.0 + local.get $3 + local.set $7 + local.get $4 + local.set $6 + i32.const 0 + local.set $5 + local.get $7 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store offset=4 + end + block $break|1 + i32.const 0 + local.set $5 + loop $repeat|1 + local.get $5 + i32.const 16 + i32.lt_u + i32.eqz + br_if $break|1 + block $~lib/rt/tlsf/SETHEAD|inlined.0 + local.get $3 + local.set $9 + local.get $4 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $repeat|1 + unreachable + end + unreachable + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $repeat|0 + unreachable + end + unreachable + end + local.get $3 + local.get $0 + i32.const 1572 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + current_memory + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/prepareSize (; 63 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.const 1073741808 + i32.ge_u + if + i32.const 6816 + i32.const 6768 + i32.const 446 + 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 (; 64 ;) (type $FUNCSIG$iii) (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 6768 + i32.const 336 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + 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 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + 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 $4 + local.get $4 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $4 + i32.ctz + local.set $2 + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $8 + local.get $5 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + end + local.set $6 + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 349 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $5 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $5 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $0 + local.set $8 + local.get $2 + local.set $5 + local.get $6 + i32.ctz + local.set $4 + local.get $8 + local.get $5 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + end + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (; 65 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + current_memory + local.set $2 + 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 $3 + local.get $2 + local.tee $4 + local.get $3 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + grow_memory + i32.const 0 + i32.lt_s + if + local.get $3 + grow_memory + i32.const 0 + i32.lt_s + if + unreachable + end + end + current_memory + 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 (; 66 ;) (type $FUNCSIG$viii) (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 6768 + i32.const 363 + 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 + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + 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 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + 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 + end + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + end + ) + (func $~lib/rt/tlsf/allocateBlock (; 67 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + 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 + 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 6768 + i32.const 476 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 478 + 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 + ) + (func $~lib/rt/tlsf/__alloc (; 68 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + local.set $2 + local.get $2 + i32.eqz + if + call $~lib/rt/tlsf/initializeRoot + global.get $~lib/rt/tlsf/ROOT + local.set $2 + end + local.get $2 + local.get $0 + call $~lib/rt/tlsf/allocateBlock + local.set $3 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + i32.const 16 + i32.add + ) + (func $~lib/rt/tlsf/reallocateBlock (; 69 ;) (type $FUNCSIG$iiii) (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.get $2 + call $~lib/rt/tlsf/prepareSize + local.set $3 + local.get $1 + i32.load + local.set $4 + local.get $4 + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 491 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32.const -4 + i32.and + i32.le_u + if + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + local.get $2 + i32.store offset=12 + local.get $1 + return + end + block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32) + 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 + end + local.set $6 + local.get $6 + i32.load + local.set $7 + local.get $7 + i32.const 1 + i32.and + if + local.get $4 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.add + local.get $7 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $5 + local.get $5 + local.get $3 + i32.ge_u + if + local.get $0 + local.get $6 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $4 + i32.const 3 + i32.and + local.get $5 + i32.or + i32.store + local.get $1 + local.get $2 + i32.store offset=12 + local.get $0 + local.get $1 + local.get $3 + call $~lib/rt/tlsf/prepareBlock + local.get $1 + return + end + end + local.get $0 + local.get $2 + call $~lib/rt/tlsf/allocateBlock + local.set $8 + local.get $8 + local.get $1 + i32.load offset=4 + i32.store offset=4 + local.get $8 + local.get $1 + i32.load offset=8 + i32.store offset=8 + local.get $8 + i32.const 16 + i32.add + local.get $1 + i32.const 16 + i32.add + local.get $2 + call $~lib/memory/memory.copy + local.get $1 + local.get $4 + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + local.get $1 + call $~lib/rt/tlsf/onFree + local.get $8 + ) + (func $~lib/rt/tlsf/__realloc (; 70 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 552 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + 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 6768 + i32.const 553 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + local.get $1 + call $~lib/rt/tlsf/reallocateBlock + i32.const 16 + i32.add + ) + (func $~lib/rt/tlsf/freeBlock (; 71 ;) (type $FUNCSIG$vii) (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 6768 + i32.const 530 + 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/tlsf/onFree + ) + (func $~lib/rt/tlsf/__free (; 72 ;) (type $FUNCSIG$vi) (param $0 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + i32.const 0 + i32.const 6768 + i32.const 560 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + 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 6768 + i32.const 561 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/pure/increment (; 73 ;) (type $FUNCSIG$vi) (param $0 i32) + (local $1 i32) + local.get $0 + i32.load offset=4 + local.set $1 + local.get $1 + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.const 1 + i32.add + i32.const 268435455 + i32.const -1 + i32.xor + i32.and + i32.eq + i32.eqz + if + i32.const 0 + i32.const 6872 + i32.const 103 + 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/pure/onIncrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 6872 + i32.const 106 + i32.const 13 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/pure/__retain (; 74 ;) (type $FUNCSIG$ii) (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 $~lib/rt/__typeinfo (; 75 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/RTTI_BASE + local.set $1 + local.get $0 + i32.eqz + if (result i32) + i32.const 1 + else + local.get $0 + local.get $1 + i32.load + i32.gt_u + end + if + i32.const 2072 + i32.const 6920 + i32.const 23 + i32.const 34 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + i32.const 8 + i32.mul + i32.add + i32.load + ) + (func $~lib/rt/pure/growRoots (; 76 ;) (type $FUNCSIG$v) + (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 + local.get $0 + local.get $1 + call $~lib/memory/memory.copy + 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 (; 77 ;) (type $FUNCSIG$vi) (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 1 + i32.add + global.set $~lib/rt/pure/CUR + ) + (func $~lib/rt/pure/decrement (; 78 ;) (type $FUNCSIG$vi) (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/pure/onDecrement + local.get $0 + i32.load + i32.const 1 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 6872 + i32.const 114 + 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 6872 + i32.const 123 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + call $~lib/rt/__typeinfo + i32.const 8 + 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/__retainRelease (; 79 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + local.get $1 + i32.ne + if + global.get $~lib/heap/HEAP_BASE + local.set $2 + local.get $0 + local.get $2 + i32.gt_u + if + local.get $0 + i32.const 16 + i32.sub + call $~lib/rt/pure/increment + end + local.get $1 + local.get $2 + i32.gt_u + if + local.get $1 + i32.const 16 + i32.sub + call $~lib/rt/pure/decrement + end + end + local.get $0 + ) + (func $~lib/rt/pure/__release (; 80 ;) (type $FUNCSIG$vi) (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 $~lib/array/Array<~lib/string/String>#__visit_impl (; 81 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $0 + i32.load offset=8 + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + local.get $2 + i32.load + local.set $4 + local.get $4 + if + local.get $4 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + end + ) + (func $~lib/array/Array#__visit_impl (; 82 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 83 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 84 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit_impl (; 85 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/pure/markGray (; 86 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -10772,10 +10820,10 @@ i32.const 16 i32.add i32.const 2 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end ) - (func $~lib/rt/purerc/scanBlack (; 82 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scanBlack (; 87 ;) (type $FUNCSIG$vi) (param $0 i32) local.get $0 local.get $0 i32.load offset=4 @@ -10790,9 +10838,9 @@ i32.const 16 i32.add i32.const 4 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members ) - (func $~lib/rt/purerc/scan (; 83 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/scan (; 88 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -10810,7 +10858,7 @@ i32.gt_u if local.get $0 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack else local.get $0 local.get $1 @@ -10825,11 +10873,11 @@ i32.const 16 i32.add i32.const 3 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end end ) - (func $~lib/rt/purerc/collectWhite (; 84 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/rt/pure/collectWhite (; 89 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) local.get $0 i32.load offset=4 @@ -10852,17 +10900,17 @@ i32.const 16 i32.add i32.const 5 - call $~lib/builtins/__visit_members + call $~lib/rt/__visit_members end global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock ) - (func $~lib/rt/purerc/__visit (; 85 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/pure/__visit (; 90 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) local.get $0 - global.get $~lib/builtins/HEAP_BASE + global.get $~lib/heap/HEAP_BASE i32.lt_u if return @@ -10904,7 +10952,7 @@ end block local.get $2 - call $~lib/rt/purerc/decrement + call $~lib/rt/pure/decrement br $break|0 unreachable end @@ -10920,7 +10968,7 @@ i32.eqz if i32.const 0 - i32.const 2016 + i32.const 6872 i32.const 74 i32.const 17 call $~lib/builtins/abort @@ -10933,7 +10981,7 @@ i32.sub i32.store offset=4 local.get $2 - call $~lib/rt/purerc/markGray + call $~lib/rt/pure/markGray br $break|0 unreachable end @@ -10941,7 +10989,7 @@ end block local.get $2 - call $~lib/rt/purerc/scan + call $~lib/rt/pure/scan br $break|0 unreachable end @@ -10967,7 +11015,7 @@ i32.eqz if i32.const 0 - i32.const 2016 + i32.const 6872 i32.const 85 i32.const 6 call $~lib/builtins/abort @@ -10985,7 +11033,7 @@ i32.ne if local.get $2 - call $~lib/rt/purerc/scanBlack + call $~lib/rt/pure/scanBlack end br $break|0 unreachable @@ -10994,7 +11042,7 @@ end block local.get $2 - call $~lib/rt/purerc/collectWhite + call $~lib/rt/pure/collectWhite br $break|0 unreachable end @@ -11004,7 +11052,7 @@ i32.eqz if i32.const 0 - i32.const 2016 + i32.const 6872 i32.const 96 i32.const 24 call $~lib/builtins/abort @@ -11012,55 +11060,7 @@ end end ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 86 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - local.get $0 - i32.load offset=4 - local.set $2 - local.get $2 - local.get $0 - i32.load offset=8 - i32.add - local.set $3 - block $break|0 - loop $continue|0 - local.get $2 - local.get $3 - i32.lt_u - if - local.get $2 - i32.load - local.set $4 - local.get $4 - if - local.get $4 - local.get $1 - call $~lib/rt/purerc/__visit - end - local.get $2 - i32.const 4 - i32.add - local.set $2 - br $continue|0 - end - end - end - ) - (func $~lib/array/Array#__visit_impl (; 87 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 88 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 89 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/array/Array#__visit_impl (; 90 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) - nop - ) - (func $~lib/builtins/__visit_members (; 91 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) + (func $~lib/rt/__visit_members (; 91 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (local $2 i32) block $block$16$break block @@ -11200,7 +11200,7 @@ if local.get $2 local.get $1 - call $~lib/rt/purerc/__visit + call $~lib/rt/pure/__visit end return unreachable diff --git a/tests/compiler/switch.optimized.wat b/tests/compiler/switch.optimized.wat index 83b701f9..cb0fb4a3 100644 --- a/tests/compiler/switch.optimized.wat +++ b/tests/compiler/switch.optimized.wat @@ -4,174 +4,65 @@ (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 8) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s") (export "memory" (memory $0)) (start $start) (func $switch/doSwitch (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - block $break|0 - block $case4|0 - block $case3|0 - block $case2|0 - block $case1|0 - block $case0|0 - local.get $0 - local.set $1 - local.get $1 - i32.const 1 - i32.eq - br_if $case0|0 - local.get $1 - i32.const 0 - i32.eq - br_if $case1|0 - local.get $1 - i32.const 2 - i32.eq - br_if $case3|0 - local.get $1 - i32.const 3 - i32.eq - br_if $case4|0 - br $case2|0 - end - i32.const 1 - return - end - end - i32.const 0 - return + block $case4|0 + block $case2|0 + local.get $0 + i32.const 1 + i32.ne + if + local.get $0 + i32.eqz + br_if $case2|0 + local.get $0 + i32.const 2 + i32.eq + br_if $case4|0 + local.get $0 + i32.const 3 + i32.eq + br_if $case4|0 + br $case2|0 end + i32.const 1 + return end - i32.const 23 + i32.const 0 return - unreachable end - unreachable - unreachable + i32.const 23 ) (func $switch/doSwitchDefaultOmitted (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) block $break|0 block $case2|0 - block $case1|0 - block $case0|0 - local.get $0 - local.set $1 - local.get $1 - i32.const 1 - i32.eq - br_if $case0|0 - local.get $1 - i32.const 2 - i32.eq - br_if $case1|0 - local.get $1 - i32.const 3 - i32.eq - br_if $case2|0 - br $break|0 - end - i32.const 1 - return + local.get $0 + i32.const 1 + i32.ne + if + local.get $0 + i32.const 2 + i32.eq + br_if $case2|0 + local.get $0 + i32.const 3 + i32.eq + br_if $case2|0 + br $break|0 end + i32.const 1 + return end i32.const 23 return end i32.const 0 ) - (func $switch/doSwitchBreakCase (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - block $break|0 - block $case1|0 - block $case0|0 - local.get $0 - local.set $1 - local.get $1 - i32.const 1 - i32.eq - br_if $case0|0 - br $case1|0 - end - br $break|0 - end - i32.const 2 - return - end - i32.const 1 - ) - (func $switch/doSwitchBreakDefault (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - block $break|0 - block $case1|0 - block $case0|0 - local.get $0 - local.set $1 - local.get $1 - i32.const 1 - i32.eq - br_if $case0|0 - br $case1|0 - end - i32.const 1 - return - end - br $break|0 - end - i32.const 2 - ) - (func $switch/doSwitchFallThroughCase (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - block $break|0 - block $case1|0 - block $case0|0 - local.get $0 - local.set $1 - local.get $1 - i32.const 1 - i32.eq - br_if $case1|0 - br $case0|0 - end - i32.const 2 - return - end - end - i32.const 1 - ) - (func $switch/doSwitchFallThroughDefault (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - (local $1 i32) - block $break|0 - block $case1|0 - block $case0|0 - local.get $0 - local.set $1 - local.get $1 - i32.const 1 - i32.eq - br_if $case0|0 - br $case1|0 - end - i32.const 1 - return - end - end - i32.const 2 - ) - (func $switch/doSwitchEmpty (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - local.get $0 - drop - i32.const 2 - ) - (func $start:switch (; 8 ;) (type $FUNCSIG$v) + (func $start:switch (; 3 ;) (type $FUNCSIG$v) i32.const 0 call $switch/doSwitch - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -183,8 +74,7 @@ i32.const 1 call $switch/doSwitch i32.const 1 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -196,8 +86,7 @@ i32.const 2 call $switch/doSwitch i32.const 23 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -209,8 +98,7 @@ i32.const 3 call $switch/doSwitch i32.const 23 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -221,9 +109,6 @@ end i32.const 4 call $switch/doSwitch - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -234,9 +119,6 @@ end i32.const 0 call $switch/doSwitch - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -248,8 +130,7 @@ i32.const 1 call $switch/doSwitch i32.const 1 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -261,8 +142,7 @@ i32.const 2 call $switch/doSwitch i32.const 23 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -274,8 +154,7 @@ i32.const 3 call $switch/doSwitch i32.const 23 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -286,9 +165,6 @@ end i32.const 4 call $switch/doSwitch - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -299,9 +175,6 @@ end i32.const 0 call $switch/doSwitchDefaultOmitted - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -313,8 +186,7 @@ i32.const 1 call $switch/doSwitchDefaultOmitted i32.const 1 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -326,8 +198,7 @@ i32.const 2 call $switch/doSwitchDefaultOmitted i32.const 23 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -339,8 +210,7 @@ i32.const 3 call $switch/doSwitchDefaultOmitted i32.const 23 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -351,9 +221,6 @@ end i32.const 4 call $switch/doSwitchDefaultOmitted - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -362,205 +229,11 @@ call $~lib/builtins/abort unreachable end - i32.const 0 - call $switch/doSwitchBreakCase - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 51 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - call $switch/doSwitchBreakCase - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 52 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 2 - call $switch/doSwitchBreakCase - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 53 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - call $switch/doSwitchBreakDefault - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 62 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - call $switch/doSwitchBreakDefault - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 63 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 2 - call $switch/doSwitchBreakDefault - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 64 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - call $switch/doSwitchFallThroughCase - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 73 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - call $switch/doSwitchFallThroughCase - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 74 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 2 - call $switch/doSwitchFallThroughCase - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 75 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - call $switch/doSwitchFallThroughDefault - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 84 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - call $switch/doSwitchFallThroughDefault - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 85 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 2 - call $switch/doSwitchFallThroughDefault - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 86 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - call $switch/doSwitchEmpty - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 92 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - call $switch/doSwitchEmpty - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 93 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 2 - call $switch/doSwitchEmpty - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 94 - i32.const 0 - call $~lib/builtins/abort - unreachable - end ) - (func $start (; 9 ;) (type $FUNCSIG$v) + (func $start (; 4 ;) (type $FUNCSIG$v) call $start:switch ) - (func $null (; 10 ;) (type $FUNCSIG$v) + (func $null (; 5 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/wasi.optimized.wat b/tests/compiler/wasi.optimized.wat index be16b879..57bc5ef6 100644 --- a/tests/compiler/wasi.optimized.wat +++ b/tests/compiler/wasi.optimized.wat @@ -1,545 +1,15 @@ (module - (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$v (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00w\00a\00s\00i\00.\00t\00s\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) - (global $~lib/common/target/Target.WASM32 i32 (i32.const 0)) - (global $~lib/common/target/Target.WASM64 i32 (i32.const 1)) - (global $~lib/common/target/Target.JS i32 (i32.const 2)) - (global $~lib/ASC_TARGET i32 (i32.const 0)) + (data (i32.const 8) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00w\00a\00s\00i\00.\00t\00s") (global $wasi/sig (mut i32) (i32.const 1)) (export "memory" (memory $0)) (start $start) - (func $start:wasi (; 1 ;) (type $FUNCSIG$v) - i32.const 0 - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 4 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 8 - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 5 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 16 - i32.const 16 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 6 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 20 - i32.const 20 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 7 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 24 - i32.const 24 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 8 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 10 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 8 - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 11 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 10 - i32.const 10 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 12 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 16 - i32.const 16 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 13 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 24 - i32.const 24 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 14 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 32 - i32.const 32 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 15 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 17 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 2 - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 18 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 8 - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 19 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 16 - i32.const 16 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 20 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 24 - i32.const 24 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 21 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 23 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 8 - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 24 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 16 - i32.const 16 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 25 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 20 - i32.const 20 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 26 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 24 - i32.const 24 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 27 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 32 - i32.const 32 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 28 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 40 - i32.const 40 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 29 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 48 - i32.const 48 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 30 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 56 - i32.const 56 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 31 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 33 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - block - i32.const 4 - i32.const 4 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 35 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i32.const 8 - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 36 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - end - i32.const 0 - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 44 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 8 - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 45 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 16 - i32.const 16 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 46 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 24 - i32.const 24 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 47 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 32 - i32.const 32 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 48 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 40 - i32.const 40 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 49 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 48 - i32.const 48 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 50 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 56 - i32.const 56 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 51 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 53 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 8 - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 54 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 16 - i32.const 16 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 55 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 20 - i32.const 20 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 56 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 58 - i32.const 0 - call $~lib/builtins/abort - unreachable - end - block - i32.const 4 - i32.const 4 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 60 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - i32.const 8 - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 61 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - end + (func $start (; 0 ;) (type $FUNCSIG$v) i32.const 9 global.set $wasi/sig ) - (func $start (; 2 ;) (type $FUNCSIG$v) - call $start:wasi - ) - (func $null (; 3 ;) (type $FUNCSIG$v) + (func $null (; 1 ;) (type $FUNCSIG$v) + nop ) ) diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index f8bf6182..2abcae59 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -3,9 +3,7 @@ (type $FUNCSIG$v (func)) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) - (data (i32.const 8) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00w\00h\00i\00l\00e\00.\00t\00s\00") - (table $0 1 funcref) - (elem (i32.const 0) $null) + (data (i32.const 8) "\10\00\00\00\01\00\00\00\10\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)) @@ -13,26 +11,21 @@ (start $start) (func $start:while (; 1 ;) (type $FUNCSIG$v) (local $0 i32) - block $break|0 - loop $continue|0 + loop $continue|0 + global.get $while/n + if global.get $while/n - if - global.get $while/n - i32.const 1 - i32.sub - global.set $while/n - global.get $while/m - i32.const 1 - i32.add - global.set $while/m - br $continue|0 - end + i32.const 1 + i32.sub + global.set $while/n + global.get $while/m + i32.const 1 + i32.add + global.set $while/m + br $continue|0 end end global.get $while/n - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -43,8 +36,7 @@ end global.get $while/m i32.const 10 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -57,66 +49,55 @@ global.set $while/n i32.const 0 global.set $while/m - block $break|1 - loop $continue|1 + loop $continue|1 + global.get $while/n + if + global.get $while/n + i32.const 1 + i32.sub + global.set $while/n + global.get $while/m + i32.const 1 + i32.add + global.set $while/m + loop $continue|2 + global.get $while/n + if + global.get $while/n + i32.const 1 + i32.sub + global.set $while/n + global.get $while/o + i32.const 1 + i32.add + global.set $while/o + br $continue|2 + end + end global.get $while/n if - global.get $while/n - i32.const 1 - i32.sub - global.set $while/n - global.get $while/m - i32.const 1 - i32.add - global.set $while/m - block $break|2 - loop $continue|2 - global.get $while/n - if - global.get $while/n - i32.const 1 - i32.sub - global.set $while/n - global.get $while/o - i32.const 1 - i32.add - global.set $while/o - br $continue|2 - end - end - end - global.get $while/n i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 21 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - global.get $while/o - i32.const 9 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 24 - i32.const 22 - i32.const 2 - call $~lib/builtins/abort - unreachable - end - br $continue|1 + i32.const 24 + i32.const 21 + i32.const 2 + call $~lib/builtins/abort + unreachable end + global.get $while/o + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 24 + i32.const 22 + i32.const 2 + call $~lib/builtins/abort + unreachable + end + br $continue|1 end end global.get $while/n - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 24 @@ -127,8 +108,7 @@ end global.get $while/m i32.const 1 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -139,8 +119,7 @@ end global.get $while/o i32.const 9 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -153,36 +132,29 @@ global.set $while/n i32.const 0 global.set $while/m - block $break|3 - loop $continue|3 - block (result i32) - global.get $while/n - local.tee $0 - i32.const 1 - i32.sub - global.set $while/n - local.get $0 - end - if (result i32) - global.get $while/m - i32.const 1 - i32.add - local.tee $0 - global.set $while/m - local.get $0 - else - i32.const 0 - end - if - nop - br $continue|3 - end + loop $continue|3 + global.get $while/n + local.tee $0 + i32.const 1 + i32.sub + global.set $while/n + local.get $0 + if + global.get $while/m + i32.const 1 + i32.add + local.tee $0 + global.set $while/m + else + i32.const 0 + local.set $0 end + local.get $0 + br_if $continue|3 end global.get $while/n i32.const -1 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -193,8 +165,7 @@ end global.get $while/m i32.const 1 - i32.eq - i32.eqz + i32.ne if i32.const 0 i32.const 24 @@ -208,5 +179,6 @@ call $start:while ) (func $null (; 3 ;) (type $FUNCSIG$v) + nop ) )