diff --git a/std/assembly/rt/common.ts b/std/assembly/rt/common.ts index 58ffd86eed..0d4d298201 100644 --- a/std/assembly/rt/common.ts +++ b/std/assembly/rt/common.ts @@ -12,6 +12,44 @@ // @ts-ignore: decorator @inline export const DEBUG = true; +// Common root and block structure + +// @ts-ignore: decorator +@inline export const INITIALIZED: u32 = 1 << 0; +// @ts-ignore: decorator +@inline export const COLLECTING: u32 = 1 << 1; + +// ╒═════════════════ Common root layout (32-bit) ═════════════════╕ +// 3 2 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits +// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ +// │ state │ +// ├───────────────────────────────────────────────────────────────┤ +// │ data0 │ +// ├───────────────────────────────────────────────────────────────┤ +// │ ... │ +// ╞═══════════════════════════════════════════════════════════════╡ +// │ ... │ +@unmanaged export class ROOT { + /** Runtime state, i.e. INITIALIZED, COLLECTING. */ + state: u32; + /** Runtime lock. */ + lock: u32; + /** Additional data, either MM or GC. */ + data0: usize; // MM flMap + /** Additional data, either MM or GC. */ + data1: usize; // GC roots + /** Additional data, either MM or GC. */ + data2: usize; // GC roots_cur + /** Additional data, either MM or GC. */ + data3: usize; // GC roots_end +} + +// @ts-ignore: decorator +@lazy export const root = changetype((__heap_base + AL_MASK) & ~AL_MASK); +// @ts-ignore: decorator +@lazy export var main = false; + // ╒════════════════ Common block layout (32-bit) ═════════════════╕ // 3 2 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits diff --git a/std/assembly/rt/pure.ts b/std/assembly/rt/pure.ts index 0f27bd326e..aa9915de7a 100644 --- a/std/assembly/rt/pure.ts +++ b/std/assembly/rt/pure.ts @@ -1,5 +1,5 @@ -import { DEBUG, BLOCK_OVERHEAD } from "rt/common"; -import { Block, freeBlock, ROOT } from "rt/tlsf"; +import { DEBUG, BLOCK_OVERHEAD, root } from "rt/common"; +import { Block, freeBlock } from "rt/tlsf"; import { TypeinfoFlags } from "shared/typeinfo"; import { onincrement, ondecrement, onfree, onalloc } from "./rtrace"; @@ -124,10 +124,10 @@ function decrement(s: Block): void { __visit_members(changetype(s) + BLOCK_OVERHEAD, VISIT_DECREMENT); if (isDefined(__GC_ALL_ACYCLIC)) { if (DEBUG) assert(!(info & BUFFERED_MASK)); - freeBlock(ROOT, s); + freeBlock(s); } else { if (!(info & BUFFERED_MASK)) { - freeBlock(ROOT, s); + freeBlock(s); } else { s.gcInfo = BUFFERED_MASK | COLOR_BLACK | 0; } @@ -149,31 +149,25 @@ function decrement(s: Block): void { } } -/** Buffer of possible roots. */ -// @ts-ignore: decorator -@lazy var ROOTS: usize; -/** Current absolute offset into the `ROOTS` buffer. */ -// @ts-ignore: decorator -@lazy var CUR: usize = 0; -/** Current absolute end offset into the `ROOTS` buffer. */ -// @ts-ignore: decorator -@lazy var END: usize = 0; +// root.data1 : Buffer of possible roots +// root.data2 : Current absolute offset into the buffer +// root.data3 : Current absolute end offset into the buffer /** Appends a block to possible roots. */ function appendRoot(s: Block): void { - var cur = CUR; - if (cur >= END) { + var cur = root.data2; + if (cur >= root.data3) { growRoots(); // TBD: either that or pick a default and force collection on overflow - cur = CUR; + cur = root.data2; } store(cur, s); - CUR = cur + sizeof(); + root.data2 = cur + sizeof(); } /** Grows the roots buffer if it ran full. */ function growRoots(): void { - var oldRoots = ROOTS; - var oldSize = CUR - oldRoots; + var oldRoots = root.data1; + var oldSize = root.data2 - oldRoots; var newSize = max(oldSize * 2, 64 << alignof()); var newRoots = __alloc(newSize, 0); if (isDefined(ASC_RTRACE)) onfree(changetype(newRoots - BLOCK_OVERHEAD)); // neglect unmanaged @@ -182,9 +176,9 @@ function growRoots(): void { if (isDefined(ASC_RTRACE)) onalloc(changetype(oldRoots - BLOCK_OVERHEAD)); // neglect unmanaged __free(oldRoots); } - ROOTS = newRoots; - CUR = newRoots + oldSize; - END = newRoots + newSize; + root.data1 = newRoots; + root.data2 = newRoots + oldSize; + root.data3 = newRoots + newSize; } /** Collects cyclic garbage. */ @@ -194,9 +188,9 @@ export function __collect(): void { if (isDefined(__GC_ALL_ACYCLIC)) return; // markRoots - var roots = ROOTS; + var roots = root.data1; var cur = roots; - for (let pos = cur, end = CUR; pos < end; pos += sizeof()) { + for (let pos = cur, end = root.data2; pos < end; pos += sizeof()) { let s = load(pos); let info = s.gcInfo; if ((info & COLOR_MASK) == COLOR_PURPLE && (info & REFCOUNT_MASK) > 0) { @@ -205,13 +199,13 @@ export function __collect(): void { cur += sizeof(); } else { if ((info & COLOR_MASK) == COLOR_BLACK && !(info & REFCOUNT_MASK)) { - freeBlock(ROOT, s); + freeBlock(s); } else { s.gcInfo = info & ~BUFFERED_MASK; } } } - CUR = cur; + root.data2 = cur; // scanRoots for (let pos = roots; pos < cur; pos += sizeof()) { @@ -224,7 +218,7 @@ export function __collect(): void { s.gcInfo = s.gcInfo & ~BUFFERED_MASK; collectWhite(s); } - CUR = roots; + root.data2 = roots; } /** Marks a block as gray (possible member of cycle) during the collection phase. */ @@ -261,7 +255,7 @@ function collectWhite(s: Block): void { if ((info & COLOR_MASK) == COLOR_WHITE && !(info & BUFFERED_MASK)) { s.gcInfo = (info & ~COLOR_MASK) | COLOR_BLACK; __visit_members(changetype(s) + BLOCK_OVERHEAD, VISIT_COLLECTWHITE); - freeBlock(ROOT, s); + freeBlock(s); } } diff --git a/std/assembly/rt/tlsf.ts b/std/assembly/rt/tlsf.ts index 2a71356ff3..36048fe46c 100644 --- a/std/assembly/rt/tlsf.ts +++ b/std/assembly/rt/tlsf.ts @@ -1,4 +1,4 @@ -import { AL_BITS, AL_MASK, DEBUG, BLOCK, BLOCK_OVERHEAD, BLOCK_MAXSIZE } from "rt/common"; +import { AL_BITS, AL_MASK, DEBUG, ROOT, BLOCK, BLOCK_OVERHEAD, BLOCK_MAXSIZE, INITIALIZED, COLLECTING, root, main } from "rt/common"; import { onfree, onalloc, onrealloc } from "./rtrace"; import { REFCOUNT_MASK } from "./pure"; @@ -105,12 +105,16 @@ import { REFCOUNT_MASK } from "./pure"; // 3 2 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits // ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ┐ -// │ 0 | flMap S│ ◄────┐ -// ╞═══════════════════════════════════════════════════════════════╡ │ -// │ slMap[0] S │ ◄─┐ │ -// ├───────────────────────────────────────────────────────────────┤ │ │ -// │ slMap[1] │ ◄─┤ │ +// │ ... ROOT ... │ +// ╞═══════════════════════════════════════════════════════════════╡ +// │ 0 | flMap S│ ◄────┐ +// ├───────────────────────────────────────────────────────────────┤ │ +// │ flags │ ◄─┐ │ +// ╞═══════════════════════════════════════════════════════════════╡ │ │ +// │ slMap[0] S │ ◄─┤ │ // ├───────────────────────────────────────────────────────────────┤ u32 │ +// │ ... │ ◄─┤ │ +// ├───────────────────────────────────────────────────────────────┤ │ │ // │ slMap[22] │ ◄─┘ │ // ╞═══════════════════════════════════════════════════════════════╡ usize // │ head[0] │ ◄────┤ @@ -122,15 +126,11 @@ import { REFCOUNT_MASK } from "./pure"; // │ tail │ ◄────┘ // └───────────────────────────────────────────────────────────────┘ SIZE ┘ // S: Small blocks map -@unmanaged class Root { - /** First level bitmap. */ - flMap: usize; -} -// Root constants. Where stuff is stored inside of the root structure. +// Root constants. Where additional stuff is stored inside of the root structure. // @ts-ignore: decorator -@inline const SL_START: usize = sizeof(); +@inline const SL_START: usize = (offsetof() + AL_MASK) & ~AL_MASK; // @ts-ignore: decorator @inline const SL_END: usize = SL_START + (FL_BITS << alignof()); // @ts-ignore: decorator @@ -138,14 +138,11 @@ import { REFCOUNT_MASK } from "./pure"; // @ts-ignore: decorator @inline const HL_END: usize = HL_START + FL_BITS * SL_SIZE * sizeof(); // @ts-ignore: decorator -@inline const ROOT_SIZE: usize = HL_END + sizeof(); - -// @ts-ignore: decorator -@lazy export var ROOT: Root; +@inline const ROOT_SIZE: usize = HL_END + sizeof(); // + tail /** Gets the second level map of the specified first level. */ // @ts-ignore: decorator -@inline function GETSL(root: Root, fl: usize): u32 { +@inline function GETSL(fl: usize): u32 { return load( changetype(root) + (fl << alignof()), SL_START @@ -154,7 +151,7 @@ import { REFCOUNT_MASK } from "./pure"; /** Sets the second level map of the specified first level. */ // @ts-ignore: decorator -@inline function SETSL(root: Root, fl: usize, slMap: u32): void { +@inline function SETSL(fl: usize, slMap: u32): void { store( changetype(root) + (fl << alignof()), slMap, @@ -164,7 +161,7 @@ import { REFCOUNT_MASK } from "./pure"; /** Gets the head of the free list for the specified combination of first and second level. */ // @ts-ignore: decorator -@inline function GETHEAD(root: Root, fl: usize, sl: u32): Block | null { +@inline function GETHEAD(fl: usize, sl: u32): Block | null { return load( changetype(root) + (((fl << SL_BITS) + sl) << alignof()), HL_START @@ -173,8 +170,8 @@ import { REFCOUNT_MASK } from "./pure"; /** Sets the head of the free list for the specified combination of first and second level. */ // @ts-ignore: decorator -@inline function SETHEAD(root: Root, fl: usize, sl: u32, head: Block | null): void { - store( +@inline function SETHEAD(fl: usize, sl: u32, head: Block | null): void { + store( changetype(root) + (((fl << SL_BITS) + sl) << alignof()), head, HL_START @@ -183,7 +180,7 @@ import { REFCOUNT_MASK } from "./pure"; /** Gets the tail block.. */ // @ts-ignore: decorator -@inline function GETTAIL(root: Root): Block { +@inline function GETTAIL(): Block { return load( changetype(root), HL_END @@ -192,7 +189,7 @@ import { REFCOUNT_MASK } from "./pure"; /** Sets the tail block. */ // @ts-ignore: decorator -@inline function SETTAIL(root: Root, tail: Block): void { +@inline function SETTAIL(tail: Block): void { store( changetype(root), tail, @@ -201,7 +198,7 @@ import { REFCOUNT_MASK } from "./pure"; } /** Inserts a previously used block back into the free list. */ -function insertBlock(root: Root, block: Block): void { +function insertBlock(block: Block): void { if (DEBUG) assert(block); // cannot be null var blockInfo = block.mmInfo; if (DEBUG) assert(blockInfo & FREE); // must be free @@ -213,7 +210,7 @@ function insertBlock(root: Root, block: Block): void { if (rightInfo & FREE) { let newSize = (blockInfo & ~TAGS_MASK) + BLOCK_OVERHEAD + (rightInfo & ~TAGS_MASK); if (newSize < BLOCK_MAXSIZE) { - removeBlock(root, right); + removeBlock(right); block.mmInfo = blockInfo = (blockInfo & TAGS_MASK) | newSize; right = GETRIGHT(block); rightInfo = right.mmInfo; @@ -228,7 +225,7 @@ function insertBlock(root: Root, block: Block): void { if (DEBUG) assert(leftInfo & FREE); // must be free according to right tags let newSize = (leftInfo & ~TAGS_MASK) + BLOCK_OVERHEAD + (blockInfo & ~TAGS_MASK); if (newSize < BLOCK_MAXSIZE) { - removeBlock(root, left); + removeBlock(left); left.mmInfo = blockInfo = (leftInfo & TAGS_MASK) | newSize; block = left; // 'back' is set below @@ -260,19 +257,19 @@ function insertBlock(root: Root, block: Block): void { if (DEBUG) assert(fl < FL_BITS && sl < SL_SIZE); // fl/sl out of range // perform insertion - var head = GETHEAD(root, fl, sl); + var head = GETHEAD(fl, sl); block.prev = null; block.next = head; if (head) head.prev = block; - SETHEAD(root, fl, sl, block); + SETHEAD(fl, sl, block); // update first and second level maps - root.flMap |= (1 << fl); - SETSL(root, fl, GETSL(root, fl) | (1 << sl)); + root.data0 |= (1 << fl); + SETSL(fl, GETSL(fl) | (1 << sl)); } /** Removes a free block from internal lists. */ -function removeBlock(root: Root, block: Block): void { +function removeBlock(block: Block): void { var blockInfo = block.mmInfo; if (DEBUG) assert(blockInfo & FREE); // must be free var size = blockInfo & ~TAGS_MASK; @@ -298,16 +295,16 @@ function removeBlock(root: Root, block: Block): void { if (next) next.prev = prev; // update head if we are removing it - if (block == GETHEAD(root, fl, sl)) { - SETHEAD(root, fl, sl, next); + if (block == GETHEAD(fl, sl)) { + SETHEAD(fl, sl, next); // clear second level map if head is empty now if (!next) { - let slMap = GETSL(root, fl); - SETSL(root, fl, slMap &= ~(1 << sl)); + let slMap = GETSL(fl); + SETSL(fl, slMap &= ~(1 << sl)); // clear first level map if second level is empty now - if (!slMap) root.flMap &= ~(1 << fl); + if (!slMap) root.data0 &= ~(1 << fl); } } // note: does not alter left/back because it is likely that splitting @@ -316,7 +313,7 @@ function removeBlock(root: Root, block: Block): void { } /** Searches for a free block of at least the specified size. */ -function searchBlock(root: Root, size: usize): Block | null { +function searchBlock(size: usize): Block | null { // size was already asserted by caller // mapping_search @@ -338,27 +335,27 @@ function searchBlock(root: Root, size: usize): Block | null { if (DEBUG) assert(fl < FL_BITS && sl < SL_SIZE); // fl/sl out of range // search second level - var slMap = GETSL(root, fl) & (~0 << sl); + var slMap = GETSL(fl) & (~0 << sl); var head: Block | null = null; if (!slMap) { // search next larger first level - let flMap = root.flMap & (~0 << (fl + 1)); + let flMap = root.data0 & (~0 << (fl + 1)); if (!flMap) { head = null; } else { fl = ctz(flMap); - slMap = GETSL(root, fl); + slMap = GETSL(fl); if (DEBUG) assert(slMap); // can't be zero if fl points here - head = GETHEAD(root, fl, ctz(slMap)); + head = GETHEAD(fl, ctz(slMap)); } } else { - head = GETHEAD(root, fl, ctz(slMap)); + head = GETHEAD(fl, ctz(slMap)); } return head; } /** Prepares the specified block before (re-)use, possibly splitting it. */ -function prepareBlock(root: Root, block: Block, size: usize): void { +function prepareBlock(block: Block, size: usize): void { // size was already asserted by caller var blockInfo = block.mmInfo; @@ -371,7 +368,7 @@ function prepareBlock(root: Root, block: Block, size: usize): void { let spare = changetype(changetype(block) + BLOCK_OVERHEAD + size); spare.mmInfo = (remaining - BLOCK_OVERHEAD) | FREE; // not LEFTFREE - insertBlock(root, spare); // also sets 'back' + insertBlock(spare); // also sets 'back' // otherwise tag block as no longer FREE and right as no longer LEFTFREE } else { @@ -381,7 +378,7 @@ function prepareBlock(root: Root, block: Block, size: usize): void { } /** Adds more memory to the pool. */ -function addMemory(root: Root, start: usize, end: usize): bool { +function addMemory(start: usize, end: usize): bool { if (DEBUG) { assert( start <= end && // must be valid @@ -390,7 +387,7 @@ function addMemory(root: Root, start: usize, end: usize): bool { ); } - var tail = GETTAIL(root); + var tail = GETTAIL(); var tailInfo: usize = 0; if (tail) { // more memory if (DEBUG) assert(start >= changetype(tail) + BLOCK_OVERHEAD); @@ -424,15 +421,15 @@ function addMemory(root: Root, start: usize, end: usize): bool { // tail is a zero-length used block tail = changetype(start + size - BLOCK_OVERHEAD); tail.mmInfo = 0 | LEFTFREE; - SETTAIL(root, tail); + SETTAIL(tail); - insertBlock(root, left); // also merges with free left before tail / sets 'back' + insertBlock(left); // also merges with free left before tail / sets 'back' return true; } /** Grows memory to fit at least another block of the specified size. */ -function growMemory(root: Root, size: usize): void { +function growMemory(size: usize): void { if (ASC_LOW_MEMORY_LIMIT) { unreachable(); return; @@ -446,14 +443,14 @@ function growMemory(root: Root, size: usize): void { // and additional BLOCK_OVERHEAD must be taken into account. If we are going // to merge with the tail block, that's one time, otherwise it's two times. var pagesBefore = memory.size(); - size += BLOCK_OVERHEAD << usize((pagesBefore << 16) - BLOCK_OVERHEAD != changetype(GETTAIL(root))); + size += BLOCK_OVERHEAD << usize((pagesBefore << 16) - BLOCK_OVERHEAD != changetype(GETTAIL())); var pagesNeeded = (((size + 0xffff) & ~0xffff) >>> 16); var pagesWanted = max(pagesBefore, pagesNeeded); // double memory if (memory.grow(pagesWanted) < 0) { if (memory.grow(pagesNeeded) < 0) unreachable(); } var pagesAfter = memory.size(); - addMemory(root, pagesBefore << 16, pagesAfter << 16); + addMemory(pagesBefore << 16, pagesAfter << 16); } /** Prepares and checks an allocation size. */ @@ -463,58 +460,52 @@ function prepareSize(size: usize): usize { } /** Initilizes the root structure. */ -export function maybeInitialize(): Root { - var root = ROOT; - if (!root) { - let rootOffset = (__heap_base + AL_MASK) & ~AL_MASK; +function maybeInitialize(): void { + if (!(root.state & INITIALIZED)) { + // @ts-ignore + main = true; + root.state |= INITIALIZED; + root.data0 = 0; let pagesBefore = memory.size(); - let pagesNeeded = ((((rootOffset + ROOT_SIZE) + 0xffff) & ~0xffff) >>> 16); + let pagesNeeded = ((((changetype(root) + ROOT_SIZE) + 0xffff) & ~0xffff) >>> 16); if (pagesNeeded > pagesBefore && memory.grow(pagesNeeded - pagesBefore) < 0) unreachable(); - root = changetype(rootOffset); - root.flMap = 0; - SETTAIL(root, changetype(0)); + SETTAIL(changetype(0)); for (let fl: usize = 0; fl < FL_BITS; ++fl) { - SETSL(root, fl, 0); + SETSL(fl, 0); for (let sl: u32 = 0; sl < SL_SIZE; ++sl) { - SETHEAD(root, fl, sl, null); + SETHEAD(fl, sl, null); } } - let memStart = (rootOffset + ROOT_SIZE + AL_MASK) & ~AL_MASK; + let memStart = (changetype(root) + ROOT_SIZE + AL_MASK) & ~AL_MASK; if (ASC_LOW_MEMORY_LIMIT) { const memEnd = ASC_LOW_MEMORY_LIMIT & ~AL_MASK; - if (memStart <= memEnd) addMemory(root, memStart, memEnd); + if (memStart <= memEnd) addMemory(memStart, memEnd); else unreachable(); // low memory limit already exceeded } else { - addMemory(root, memStart, memory.size() << 16); + addMemory(memStart, memory.size() << 16); } - ROOT = root; } - return root; } -// @ts-ignore: decorator -@lazy -var collectLock: bool = false; - /** Allocates a block of the specified size. */ -export function allocateBlock(root: Root, size: usize, id: u32): Block { - if (DEBUG) assert(!collectLock); // must not allocate while collecting +export function allocateBlock(size: usize, id: u32): Block { + if (DEBUG) assert(!(root.state & COLLECTING)); // must not allocate while collecting var payloadSize = prepareSize(size); - var block = searchBlock(root, payloadSize); + var block = searchBlock(payloadSize); if (!block) { if (gc.auto) { - if (DEBUG) collectLock = true; + if (DEBUG) root.state |= COLLECTING; __collect(); - if (DEBUG) collectLock = false; - block = searchBlock(root, payloadSize); + if (DEBUG) root.state &= ~COLLECTING; + block = searchBlock(payloadSize); if (!block) { - growMemory(root, payloadSize); - block = changetype(searchBlock(root, payloadSize)); + growMemory(payloadSize); + block = changetype(searchBlock(payloadSize)); if (DEBUG) assert(block); // must be found now } } else { - growMemory(root, payloadSize); - block = changetype(searchBlock(root, payloadSize)); + growMemory(payloadSize); + block = changetype(searchBlock(payloadSize)); if (DEBUG) assert(block); // must be found now } } @@ -522,20 +513,20 @@ export function allocateBlock(root: Root, size: usize, id: u32): Block { block.gcInfo = 0; // RC=0 block.rtId = id; block.rtSize = size; - removeBlock(root, block); - prepareBlock(root, block, payloadSize); + removeBlock(block); + prepareBlock(block, payloadSize); if (isDefined(ASC_RTRACE)) onalloc(block); return block; } /** Reallocates a block to the specified size. */ -export function reallocateBlock(root: Root, block: Block, size: usize): Block { +export function reallocateBlock(block: Block, size: usize): Block { var payloadSize = prepareSize(size); var blockInfo = block.mmInfo; // possibly split and update runtime size if it still fits if (payloadSize <= (blockInfo & ~TAGS_MASK)) { - prepareBlock(root, block, payloadSize); + prepareBlock(block, payloadSize); block.rtSize = size; return block; } @@ -546,32 +537,32 @@ export function reallocateBlock(root: Root, block: Block, size: usize): Block { if (rightInfo & FREE) { let mergeSize = (blockInfo & ~TAGS_MASK) + BLOCK_OVERHEAD + (rightInfo & ~TAGS_MASK); if (mergeSize >= payloadSize) { - removeBlock(root, right); + removeBlock(right); // TODO: this can yield an intermediate block larger than BLOCK_MAXSIZE, which // is immediately split though. does this trigger any assertions / issues? block.mmInfo = (blockInfo & TAGS_MASK) | mergeSize; block.rtSize = size; - prepareBlock(root, block, payloadSize); + prepareBlock(block, payloadSize); return block; } } // otherwise move the block - var newBlock = allocateBlock(root, size, block.rtId); // may invalidate cached blockInfo + var newBlock = allocateBlock(size, block.rtId); // may invalidate cached blockInfo newBlock.gcInfo = block.gcInfo; // keep RC memory.copy(changetype(newBlock) + BLOCK_OVERHEAD, changetype(block) + BLOCK_OVERHEAD, size); if (changetype(block) >= __heap_base) { if (isDefined(ASC_RTRACE)) onrealloc(block, newBlock); - freeBlock(root, block); + freeBlock(block); } return newBlock; } /** Frees a block. */ -export function freeBlock(root: Root, block: Block): void { +export function freeBlock(block: Block): void { var blockInfo = block.mmInfo; block.mmInfo = blockInfo | FREE; - insertBlock(root, block); + insertBlock(block); if (isDefined(ASC_RTRACE)) onfree(block); } @@ -589,21 +580,20 @@ function checkUsedBlock(ref: usize): Block { // @ts-ignore: decorator @global @unsafe export function __alloc(size: usize, id: u32): usize { - return changetype( - allocateBlock(maybeInitialize(), size, id) - ) + BLOCK_OVERHEAD; + maybeInitialize(); + return changetype(allocateBlock(size, id)) + BLOCK_OVERHEAD; } // @ts-ignore: decorator @global @unsafe export function __realloc(ref: usize, size: usize): usize { - return changetype( - reallocateBlock(maybeInitialize(), checkUsedBlock(ref), size) - ) + BLOCK_OVERHEAD; + maybeInitialize(); + return changetype(reallocateBlock(checkUsedBlock(ref), size)) + BLOCK_OVERHEAD; } // @ts-ignore: decorator @global @unsafe export function __free(ref: usize): void { - freeBlock(maybeInitialize(), checkUsedBlock(ref)); + maybeInitialize(); + freeBlock(checkUsedBlock(ref)); } diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index d3ce08b230..8e33ce8483 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -1,10 +1,8 @@ (module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -17,8 +15,7 @@ (data (i32.const 1104) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1168) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (global $do/ran (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) (export "_start" (func $~start)) (export "memory" (memory $0)) @@ -105,33 +102,33 @@ i32.const 1 global.set $do/ran ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -141,42 +138,42 @@ if i32.const 0 i32.const 1072 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -184,235 +181,235 @@ if i32.const 0 i32.const 1072 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1072 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -422,62 +419,62 @@ if i32.const 0 i32.const 1072 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1072 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -485,82 +482,84 @@ if i32.const 0 i32.const 1072 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -568,112 +567,130 @@ if i32.const 0 i32.const 1072 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1072 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1072 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -685,47 +702,43 @@ if unreachable end - i32.const 1216 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2784 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -736,110 +749,119 @@ br $for-loop|0 end end - i32.const 1216 - i32.const 2800 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1216 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1072 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1072 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -848,18 +870,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -867,29 +889,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1072 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -898,71 +918,69 @@ if i32.const 0 i32.const 1072 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -972,9 +990,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $do/Ref#constructor (result i32) (local $0 i32) @@ -1261,6 +1279,8 @@ global.set $do/ran i32.const 0 global.set $do/ran + i32.const 1216 + global.set $~lib/rt/common/root call $do/Ref#constructor local.set $0 loop $do-continue|04 @@ -1469,7 +1489,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/do.untouched.wat b/tests/compiler/do.untouched.wat index 418a287303..18f491e068 100644 --- a/tests/compiler/do.untouched.wat +++ b/tests/compiler/do.untouched.wat @@ -1,12 +1,10 @@ (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -20,9 +18,9 @@ (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (table $0 1 funcref) (global $do/ran (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~started (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 208)) @@ -440,7 +438,8 @@ i32.const 1 global.set $do/ran ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -449,38 +448,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -490,29 +487,29 @@ if i32.const 0 i32.const 64 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -520,21 +517,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -544,119 +541,112 @@ if i32.const 0 i32.const 64 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -666,184 +656,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 64 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -853,52 +838,52 @@ if i32.const 0 i32.const 64 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 64 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -906,21 +891,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -930,109 +915,100 @@ if i32.const 0 i32.const 64 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -1040,7 +1016,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1051,24 +1027,22 @@ if i32.const 0 i32.const 64 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -1076,50 +1050,50 @@ if i32.const 0 i32.const 64 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 64 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -1130,53 +1104,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -1186,26 +1157,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -1215,13 +1187,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -1232,84 +1204,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1317,20 +1278,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1341,7 +1298,7 @@ if i32.const 112 i32.const 64 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1361,34 +1318,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1396,16 +1352,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1413,21 +1369,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1437,160 +1393,150 @@ if i32.const 0 i32.const 64 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 64 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1599,22 +1545,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1623,27 +1569,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1651,74 +1596,73 @@ if i32.const 0 i32.const 64 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1733,86 +1677,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 64 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 64 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 64 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1821,44 +1772,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 64 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2238,6 +2187,14 @@ end i32.const 0 global.set $do/ran + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $do/testRef global.get $do/ran i32.eqz @@ -2278,22 +2235,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -2352,7 +2308,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index e0b0674624..671cc74f64 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -1,13 +1,11 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 1028) "\01") @@ -23,40 +21,36 @@ (data (i32.const 1440) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 1488) "\t\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\00\00\00\00\00\00 ") (data (i32.const 1544) "\04\00\00\00\"A\00\00\00\00\00\00\"A") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) - (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) - (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/pure/END (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -66,42 +60,42 @@ if i32.const 0 i32.const 1136 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -109,235 +103,235 @@ if i32.const 0 i32.const 1136 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1136 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -347,62 +341,62 @@ if i32.const 0 i32.const 1136 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1136 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -410,82 +404,84 @@ if i32.const 0 i32.const 1136 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -493,112 +489,130 @@ if i32.const 0 i32.const 1136 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1136 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1136 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -610,47 +624,43 @@ if unreachable end - i32.const 1568 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 3136 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1568 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1568 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -661,16 +671,16 @@ br $for-loop|0 end end - i32.const 1568 - i32.const 3152 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1568 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -679,7 +689,7 @@ if i32.const 1184 i32.const 1136 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -696,55 +706,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -752,144 +762,143 @@ if i32.const 0 i32.const 1136 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1136 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1136 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -900,61 +909,70 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1136 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -965,18 +983,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -984,60 +1002,56 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1136 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1136 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1131,7 +1145,7 @@ if i32.const 0 i32.const 1136 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -1311,116 +1325,110 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 1564 i32.ge_u if local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (local $2 i32) @@ -1616,8 +1624,8 @@ i32.const 1104 i32.load local.set $4 - local.get $3 call $~lib/rt/tlsf/maybeInitialize + local.get $3 local.get $4 call $~lib/rt/tlsf/checkUsedBlock local.get $1 @@ -1663,6 +1671,8 @@ ) (func $~start (local $0 i32) + i32.const 1568 + global.set $~lib/rt/common/root i32.const 20 i32.const 6 call $~lib/rt/tlsf/__alloc @@ -1796,7 +1806,6 @@ i32.add i32.const 5 call $~lib/rt/__visit_members - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock end @@ -1808,11 +1817,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/pure/ROOTS + global.get $~lib/rt/common/root + i32.load offset=12 local.tee $0 local.tee $4 local.set $3 - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.set $1 loop $for-loop|0 local.get $3 @@ -1858,7 +1869,6 @@ i32.and select if - global.get $~lib/rt/tlsf/ROOT local.get $2 call $~lib/rt/tlsf/freeBlock else @@ -1876,8 +1886,9 @@ br $for-loop|0 end end + global.get $~lib/rt/common/root local.get $4 - global.set $~lib/rt/pure/CUR + i32.store offset=16 local.get $0 local.set $1 loop $for-loop|1 @@ -1919,8 +1930,9 @@ br $for-loop|2 end end + global.get $~lib/rt/common/root local.get $0 - global.set $~lib/rt/pure/CUR + i32.store offset=16 ) (func $~lib/rt/pure/decrement (param $0 i32) (local $1 i32) @@ -1962,7 +1974,6 @@ i32.const -2147483648 i32.store offset=4 else - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock end @@ -2023,13 +2034,17 @@ i32.and i32.eqz if - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.tee $1 - global.get $~lib/rt/pure/END + global.get $~lib/rt/common/root + i32.load offset=20 i32.ge_u if - global.get $~lib/rt/pure/CUR - global.get $~lib/rt/pure/ROOTS + global.get $~lib/rt/common/root + i32.load offset=16 + global.get $~lib/rt/common/root + i32.load offset=12 local.tee $1 i32.sub local.tee $3 @@ -2055,26 +2070,31 @@ call $~lib/rt/tlsf/checkUsedBlock call $~lib/rt/tlsf/freeBlock end + global.get $~lib/rt/common/root local.get $2 - global.set $~lib/rt/pure/ROOTS + i32.store offset=12 + global.get $~lib/rt/common/root local.get $2 local.get $3 i32.add - global.set $~lib/rt/pure/CUR + i32.store offset=16 + global.get $~lib/rt/common/root local.get $2 local.get $4 i32.add - global.set $~lib/rt/pure/END - global.get $~lib/rt/pure/CUR + i32.store offset=20 + global.get $~lib/rt/common/root + i32.load offset=16 local.set $1 end local.get $1 local.get $0 i32.store + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.add - global.set $~lib/rt/pure/CUR + i32.store offset=16 end end end diff --git a/tests/compiler/extends-baseaggregate.untouched.wat b/tests/compiler/extends-baseaggregate.untouched.wat index fd84213021..2e1ba88fc5 100644 --- a/tests/compiler/extends-baseaggregate.untouched.wat +++ b/tests/compiler/extends-baseaggregate.untouched.wat @@ -1,13 +1,11 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 16) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") @@ -25,19 +23,17 @@ (table $0 1 funcref) (global $extends-baseaggregate/poolB i32 (i32.const 48)) (global $extends-baseaggregate/poolA i32 (i32.const 96)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) - (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0)) - (global $~lib/rt/pure/CUR (mut i32) (i32.const 0)) - (global $~lib/rt/pure/END (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 480)) (global $~lib/heap/__heap_base i32 (i32.const 556)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -46,38 +42,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -87,29 +81,29 @@ if i32.const 0 i32.const 128 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -117,21 +111,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -141,119 +135,112 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -263,184 +250,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 128 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -450,52 +432,52 @@ if i32.const 0 i32.const 128 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 128 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -503,21 +485,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -527,109 +509,100 @@ if i32.const 0 i32.const 128 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -637,7 +610,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -648,24 +621,22 @@ if i32.const 0 i32.const 128 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -673,50 +644,50 @@ if i32.const 0 i32.const 128 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 128 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -727,53 +698,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -783,26 +751,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -812,13 +781,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -829,84 +798,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -914,20 +872,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -938,7 +892,7 @@ if i32.const 176 i32.const 128 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -958,34 +912,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -993,16 +946,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1010,21 +963,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1034,160 +987,150 @@ if i32.const 0 i32.const 128 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 128 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1196,22 +1139,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1220,27 +1163,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1248,74 +1190,73 @@ if i32.const 0 i32.const 128 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1330,86 +1271,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 128 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 128 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 128 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1418,42 +1366,40 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 128 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 0 drop - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1603,7 +1549,7 @@ if i32.const 0 i32.const 128 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -2866,37 +2812,36 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 0 drop ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -2904,103 +2849,98 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 0 drop local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -3338,6 +3278,14 @@ (func $start:extends-baseaggregate (local $0 i32) (local $1 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root global.get $extends-baseaggregate/poolA i32.const 0 call $extends-baseaggregate/A2#constructor @@ -3464,7 +3412,6 @@ i32.add i32.const 5 call $~lib/rt/__visit_members - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock end @@ -3479,13 +3426,15 @@ (local $6 i32) i32.const 0 drop - global.get $~lib/rt/pure/ROOTS + global.get $~lib/rt/common/root + i32.load offset=12 local.set $0 local.get $0 local.set $1 local.get $1 local.set $2 - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.set $3 loop $for-loop|0 local.get $2 @@ -3539,7 +3488,6 @@ i32.const 0 end if - global.get $~lib/rt/tlsf/ROOT local.get $5 call $~lib/rt/tlsf/freeBlock else @@ -3559,8 +3507,9 @@ br $for-loop|0 end end + global.get $~lib/rt/common/root local.get $1 - global.set $~lib/rt/pure/CUR + i32.store offset=16 local.get $0 local.set $3 loop $for-loop|1 @@ -3609,8 +3558,9 @@ br $for-loop|2 end end + global.get $~lib/rt/common/root local.get $0 - global.set $~lib/rt/pure/CUR + i32.store offset=16 ) (func $~lib/rt/__typeinfo (param $0 i32) (result i32) (local $1 i32) @@ -3650,9 +3600,11 @@ (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/pure/ROOTS + global.get $~lib/rt/common/root + i32.load offset=12 local.set $0 - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.get $0 i32.sub local.set $1 @@ -3686,36 +3638,43 @@ local.get $0 call $~lib/rt/tlsf/__free end + global.get $~lib/rt/common/root local.get $5 - global.set $~lib/rt/pure/ROOTS + i32.store offset=12 + global.get $~lib/rt/common/root local.get $5 local.get $1 i32.add - global.set $~lib/rt/pure/CUR + i32.store offset=16 + global.get $~lib/rt/common/root local.get $5 local.get $4 i32.add - global.set $~lib/rt/pure/END + i32.store offset=20 ) (func $~lib/rt/pure/appendRoot (param $0 i32) (local $1 i32) - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.set $1 local.get $1 - global.get $~lib/rt/pure/END + global.get $~lib/rt/common/root + i32.load offset=20 i32.ge_u if call $~lib/rt/pure/growRoots - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.set $1 end local.get $1 local.get $0 i32.store + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.add - global.set $~lib/rt/pure/CUR + i32.store offset=16 ) (func $~lib/rt/pure/decrement (param $0 i32) (local $1 i32) @@ -3761,7 +3720,6 @@ i32.and i32.eqz if - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 5ffcec178e..3e000497b1 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -1,10 +1,8 @@ (module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -17,8 +15,7 @@ (data (i32.const 1104) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1168) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (global $for/ran (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) (export "_start" (func $~start)) (export "memory" (memory $0)) @@ -102,33 +99,33 @@ i32.const 1 global.set $for/ran ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -138,42 +135,42 @@ if i32.const 0 i32.const 1072 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -181,235 +178,235 @@ if i32.const 0 i32.const 1072 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1072 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -419,62 +416,62 @@ if i32.const 0 i32.const 1072 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1072 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -482,82 +479,84 @@ if i32.const 0 i32.const 1072 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -565,112 +564,130 @@ if i32.const 0 i32.const 1072 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1072 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1072 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -682,47 +699,43 @@ if unreachable end - i32.const 1216 - local.tee $0 - i32.const 0 - i32.store - i32.const 2784 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -733,110 +746,119 @@ br $for-loop|0 end end - i32.const 1216 - i32.const 2800 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1216 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1072 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1072 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -845,18 +867,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -864,29 +886,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1072 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -895,71 +915,69 @@ if i32.const 0 i32.const 1072 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -969,9 +987,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $for/Ref#constructor (result i32) (local $0 i32) @@ -1261,6 +1279,8 @@ end i32.const 0 global.set $for/ran + i32.const 1216 + global.set $~lib/rt/common/root call $for/Ref#constructor local.set $1 loop $for-loop|03 @@ -1478,7 +1498,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/for.untouched.wat b/tests/compiler/for.untouched.wat index 78c447d516..484e6fbac6 100644 --- a/tests/compiler/for.untouched.wat +++ b/tests/compiler/for.untouched.wat @@ -1,13 +1,11 @@ (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -20,9 +18,9 @@ (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (table $0 1 funcref) (global $for/ran (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~started (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 208)) @@ -453,7 +451,8 @@ i32.const 1 global.set $for/ran ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -462,38 +461,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -503,29 +500,29 @@ if i32.const 0 i32.const 64 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -533,21 +530,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -557,119 +554,112 @@ if i32.const 0 i32.const 64 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -679,184 +669,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 64 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -866,52 +851,52 @@ if i32.const 0 i32.const 64 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 64 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -919,21 +904,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -943,109 +928,100 @@ if i32.const 0 i32.const 64 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -1053,7 +1029,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1064,24 +1040,22 @@ if i32.const 0 i32.const 64 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -1089,50 +1063,50 @@ if i32.const 0 i32.const 64 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 64 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -1143,53 +1117,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -1199,26 +1170,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -1228,13 +1200,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -1245,84 +1217,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1330,20 +1291,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1354,7 +1311,7 @@ if i32.const 112 i32.const 64 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1374,34 +1331,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1409,16 +1365,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1426,21 +1382,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1450,160 +1406,150 @@ if i32.const 0 i32.const 64 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 64 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1612,22 +1558,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1636,27 +1582,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1664,74 +1609,73 @@ if i32.const 0 i32.const 64 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1746,86 +1690,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 64 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 64 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 64 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1834,44 +1785,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 64 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2283,6 +2232,14 @@ end i32.const 0 global.set $for/ran + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $for/testRef global.get $for/ran i32.eqz @@ -2323,22 +2280,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -2397,7 +2353,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index 454a19e0c9..759a3e46f3 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -1,13 +1,10 @@ (module (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -18,8 +15,7 @@ (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (data (i32.const 1184) "\05\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\00\00\00\00\00\00 ") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 1184)) (global $implicit-getter-setter/Basic i32 (i32.const 3)) (global $implicit-getter-setter/Managed i32 (i32.const 4)) @@ -37,33 +33,34 @@ (export "Managed#get:foo" (func $implicit-getter-setter/Managed#get:foo)) (export "Managed#set:foo" (func $implicit-getter-setter/Managed#set:foo)) (export "Managed#constructor" (func $implicit-getter-setter/Managed#constructor)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (start $~start) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -73,42 +70,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -116,235 +113,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -354,62 +351,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -417,82 +414,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -500,112 +499,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -617,47 +634,43 @@ if unreachable end - i32.const 1232 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2800 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1232 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1232 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -668,66 +681,66 @@ br $for-loop|0 end end - i32.const 1232 - i32.const 2816 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1232 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -735,144 +748,143 @@ if i32.const 0 i32.const 1040 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1040 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -883,80 +895,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1088 i32.const 1040 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -967,18 +988,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -986,62 +1007,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1177,6 +1194,10 @@ local.get $1 i32.store ) + (func $~start + i32.const 1232 + global.set $~lib/rt/common/root + ) (func $~lib/rt/pure/__collect nop ) @@ -1251,7 +1272,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/implicit-getter-setter.untouched.wat b/tests/compiler/implicit-getter-setter.untouched.wat index e046c665dc..a220e98adf 100644 --- a/tests/compiler/implicit-getter-setter.untouched.wat +++ b/tests/compiler/implicit-getter-setter.untouched.wat @@ -1,13 +1,10 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -19,9 +16,9 @@ (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (data (i32.const 176) "\05\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\00\00\00\00\00\00 \00\00\00\00\00\00\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/rt/__rtti_base i32 (i32.const 176)) (global $~lib/heap/__heap_base i32 (i32.const 220)) @@ -41,7 +38,9 @@ (export "Managed#get:foo" (func $implicit-getter-setter/Managed#get:foo)) (export "Managed#set:foo" (func $implicit-getter-setter/Managed#set:foo)) (export "Managed#constructor" (func $implicit-getter-setter/Managed#constructor)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (start $~start) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -50,38 +49,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -91,29 +88,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -121,21 +118,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -145,119 +142,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -267,184 +257,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -454,52 +439,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -507,21 +492,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -531,109 +516,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -641,7 +617,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -652,24 +628,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -677,50 +651,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -731,53 +705,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -787,26 +758,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -816,13 +788,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -833,84 +805,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -918,20 +879,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -942,7 +899,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -962,34 +919,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -997,16 +953,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1014,21 +970,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1038,160 +994,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1200,22 +1146,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1224,27 +1170,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1252,74 +1197,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1334,86 +1278,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1422,44 +1373,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1613,27 +1562,36 @@ local.get $1 i32.store ) + (func $~start + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root + ) (func $~lib/rt/pure/__collect i32.const 1 drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1692,7 +1650,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index 555c78f813..c878b01fe4 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -1,11 +1,10 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -17,37 +16,36 @@ (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (data (i32.const 1184) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00e\00s\00t") (data (i32.const 1216) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00i\00s\00s\00u\00e\00s\00/\001\000\009\005\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -57,42 +55,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -100,235 +98,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -338,62 +336,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -401,82 +399,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -484,112 +484,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -601,47 +619,43 @@ if unreachable end - i32.const 1264 - local.tee $0 - i32.const 0 - i32.store - i32.const 2832 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1264 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1264 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -652,110 +666,119 @@ br $for-loop|0 end end - i32.const 1264 - i32.const 2848 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1264 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -764,18 +787,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -783,29 +806,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -814,71 +835,69 @@ if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 4 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -888,9 +907,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $~lib/rt/pure/__retain (param $0 i32) (result i32) (local $1 i32) @@ -958,6 +977,8 @@ (local $0 i32) (local $1 i32) (local $2 i32) + i32.const 1264 + global.set $~lib/rt/common/root call $~lib/rt/tlsf/maybeInitialize call $~lib/rt/tlsf/allocateBlock i32.const 16 @@ -1068,7 +1089,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/issues/1095.untouched.wat b/tests/compiler/issues/1095.untouched.wat index ababb570f7..b3c85f5923 100644 --- a/tests/compiler/issues/1095.untouched.wat +++ b/tests/compiler/issues/1095.untouched.wat @@ -1,13 +1,10 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -20,14 +17,15 @@ (data (i32.const 176) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00e\00s\00t\00") (data (i32.const 208) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00i\00s\00s\00u\00e\00s\00/\001\000\009\005\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/heap/__heap_base i32 (i32.const 252)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -36,38 +34,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -77,29 +73,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -107,21 +103,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -131,119 +127,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -253,184 +242,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -440,52 +424,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -493,21 +477,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -517,109 +501,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -627,7 +602,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -638,24 +613,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -663,50 +636,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -717,53 +690,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -773,26 +743,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -802,13 +773,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -819,84 +790,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -904,20 +864,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -928,7 +884,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -948,34 +904,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -983,16 +938,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1000,21 +955,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1024,160 +979,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1186,22 +1131,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1210,27 +1155,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1238,74 +1182,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1320,86 +1263,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1408,44 +1358,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1587,6 +1535,14 @@ ) (func $start:issues/1095 (local $0 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $issues/1095/Foo#constructor local.tee $0 @@ -1602,22 +1558,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1676,7 +1631,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 271e518e90..8f5790824e 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -1,10 +1,8 @@ (module (type $i32_=>_none (func (param i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -16,40 +14,39 @@ (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (data (i32.const 1184) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00i\00s\00s\00u\00e\00s\00/\001\002\002\005\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $issues/1225/x (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "normal" (func $issues/1225/normal)) (export "viaThis" (func $issues/1225/viaThis)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -59,42 +56,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -102,235 +99,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -340,62 +337,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -403,82 +400,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -486,112 +485,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -603,47 +620,43 @@ if unreachable end - i32.const 1232 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2800 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1232 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1232 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -654,110 +667,119 @@ br $for-loop|0 end end - i32.const 1232 - i32.const 2816 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1232 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -766,18 +788,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -785,29 +807,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -816,71 +836,69 @@ if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 12 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -890,9 +908,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $issues/1225/normal (result i32) global.get $issues/1225/x @@ -902,10 +920,12 @@ global.get $issues/1225/x i32.load offset=4 ) - (func $~start + (func $start:issues/1225 (local $0 i32) (local $1 i32) (local $2 i32) + i32.const 1232 + global.set $~lib/rt/common/root call $~lib/rt/tlsf/maybeInitialize call $~lib/rt/tlsf/allocateBlock i32.const 16 @@ -1014,6 +1034,9 @@ i32.const 0 global.set $issues/1225/x ) + (func $~start + call $start:issues/1225 + ) (func $~lib/rt/pure/decrement (param $0 i32) (local $1 i32) (local $2 i32) @@ -1085,7 +1108,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/issues/1225.untouched.wat b/tests/compiler/issues/1225.untouched.wat index 110b340240..2432da789a 100644 --- a/tests/compiler/issues/1225.untouched.wat +++ b/tests/compiler/issues/1225.untouched.wat @@ -1,12 +1,10 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -19,9 +17,9 @@ (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (data (i32.const 176) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00i\00s\00s\00u\00e\00s\00/\001\002\002\005\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $issues/1225/x (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 220)) @@ -29,7 +27,8 @@ (export "normal" (func $issues/1225/normal)) (export "viaThis" (func $issues/1225/viaThis)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -38,38 +37,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -79,29 +76,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -109,21 +106,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -133,119 +130,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -255,184 +245,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -442,52 +427,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -495,21 +480,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -519,109 +504,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -629,7 +605,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -640,24 +616,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -665,50 +639,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -719,53 +693,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -775,26 +746,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -804,13 +776,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -821,84 +793,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -906,20 +867,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -930,7 +887,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -950,34 +907,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -985,16 +941,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1002,21 +958,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1026,160 +982,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1188,22 +1134,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1212,27 +1158,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1240,74 +1185,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1322,86 +1266,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1410,44 +1361,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1572,6 +1521,14 @@ (func $start:issues/1225 (local $0 i32) (local $1 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 i32.const 4 call $issues/1225/X#constructor @@ -1623,22 +1580,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1697,7 +1653,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index dfcf05fc2e..8fb90f2935 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -1,10 +1,8 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -16,37 +14,36 @@ (data (i32.const 1072) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1120) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1184) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -56,42 +53,42 @@ if i32.const 0 i32.const 1088 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -99,235 +96,235 @@ if i32.const 0 i32.const 1088 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1088 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -337,62 +334,62 @@ if i32.const 0 i32.const 1088 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1088 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -400,82 +397,84 @@ if i32.const 0 i32.const 1088 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -483,112 +482,130 @@ if i32.const 0 i32.const 1088 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1088 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1088 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -600,47 +617,43 @@ if unreachable end - i32.const 1232 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2800 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1232 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1232 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -651,110 +664,119 @@ br $for-loop|0 end end - i32.const 1232 - i32.const 2816 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1232 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1088 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1088 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -763,18 +785,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -782,29 +804,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1088 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -813,71 +833,69 @@ if i32.const 0 i32.const 1088 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -887,9 +905,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $logical/Obj#constructor (result i32) (local $0 i32) @@ -961,6 +979,8 @@ (func $~start (local $0 i32) (local $1 i32) + i32.const 1232 + global.set $~lib/rt/common/root call $logical/Obj#constructor local.tee $0 if (result i32) @@ -1069,7 +1089,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/logical.untouched.wat b/tests/compiler/logical.untouched.wat index 65e10a3ab1..4d952a9c9d 100644 --- a/tests/compiler/logical.untouched.wat +++ b/tests/compiler/logical.untouched.wat @@ -1,14 +1,11 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i64_i32_=>_i32 (func (param i64 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -24,9 +21,9 @@ (global $logical/I (mut i64) (i64.const 0)) (global $logical/f (mut f32) (f32.const 0)) (global $logical/F (mut f64) (f64.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/heap/__heap_base i32 (i32.const 224)) (export "memory" (memory $0)) @@ -51,7 +48,8 @@ local.get $1 end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -60,38 +58,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -101,29 +97,29 @@ if i32.const 0 i32.const 80 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -131,21 +127,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -155,119 +151,112 @@ if i32.const 0 i32.const 80 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -277,184 +266,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 80 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -464,52 +448,52 @@ if i32.const 0 i32.const 80 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 80 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -517,21 +501,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -541,109 +525,100 @@ if i32.const 0 i32.const 80 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -651,7 +626,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -662,24 +637,22 @@ if i32.const 0 i32.const 80 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -687,50 +660,50 @@ if i32.const 0 i32.const 80 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 80 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -741,53 +714,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -797,26 +767,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -826,13 +797,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -843,84 +814,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -928,20 +888,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -952,7 +908,7 @@ if i32.const 128 i32.const 80 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -972,34 +928,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1007,16 +962,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1024,21 +979,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1048,160 +1003,150 @@ if i32.const 0 i32.const 80 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 80 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1210,22 +1155,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1234,27 +1179,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1262,74 +1206,73 @@ if i32.const 0 i32.const 80 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1344,86 +1287,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 80 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 80 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 80 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1432,44 +1382,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 80 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2108,6 +2056,14 @@ call $~lib/builtins/abort unreachable end + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $logical/Obj#constructor local.tee $2 @@ -2153,22 +2109,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -2227,7 +2182,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 0ed2b2c8b5..7cf0c91e30 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -2,11 +2,9 @@ (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -18,38 +16,37 @@ (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (data (i32.const 1184) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00m\00a\00n\00a\00g\00e\00d\00-\00c\00a\00s\00t\00.\00t\00s") (data (i32.const 1232) "\05\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\00\00\04\00\00\00 ") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) (export "_start" (func $~start)) (export "memory" (memory $0)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -59,42 +56,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -102,235 +99,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -340,62 +337,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -403,82 +400,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -486,112 +485,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -603,47 +620,43 @@ if unreachable end - i32.const 1280 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2848 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1280 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1280 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -654,109 +667,118 @@ br $for-loop|0 end end - i32.const 1280 - i32.const 2864 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1280 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $2 + local.tee $1 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $2 + local.tee $1 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -765,18 +787,18 @@ i32.and i32.const 16 i32.shr_u - local.set $3 + local.set $2 + local.get $1 local.get $2 - local.get $3 + local.get $1 local.get $2 - local.get $3 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $3 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -784,29 +806,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $2 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $2 + local.get $1 i32.load i32.const -4 i32.and @@ -815,71 +835,69 @@ if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 0 i32.store offset=4 - local.get $2 local.get $1 + local.get $0 i32.store offset=8 - local.get $2 + local.get $1 i32.const 0 i32.store offset=12 - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 + local.get $1 i32.load - local.tee $1 + local.tee $0 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if - local.get $2 local.get $1 + local.get $0 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $2 + local.get $1 i32.const 32 i32.add - local.tee $1 - local.get $3 + local.tee $0 + local.get $2 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 $2 local.get $1 + local.get $0 i32.const -2 i32.and i32.store - local.get $2 + local.get $1 i32.const 16 i32.add local.tee $0 - local.get $2 + local.get $1 i32.load i32.const -4 i32.and i32.add local.get $0 - local.get $2 + local.get $1 i32.load i32.const -4 i32.and @@ -889,9 +907,9 @@ i32.and i32.store end - local.get $2 + local.get $1 call $~lib/rt/rtrace/onalloc - local.get $2 + local.get $1 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1016,6 +1034,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) + i32.const 1280 + global.set $~lib/rt/common/root call $managed-cast/Cat#constructor call $managed-cast/Cat#constructor local.tee $3 @@ -1186,7 +1206,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/managed-cast.untouched.wat b/tests/compiler/managed-cast.untouched.wat index 1c3c6de678..3d454d8e05 100644 --- a/tests/compiler/managed-cast.untouched.wat +++ b/tests/compiler/managed-cast.untouched.wat @@ -1,13 +1,10 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -20,16 +17,17 @@ (data (i32.const 176) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00m\00a\00n\00a\00g\00e\00d\00-\00c\00a\00s\00t\00.\00t\00s\00") (data (i32.const 224) "\05\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\00\00\04\00\00\00 \00\00\00\00\00\00\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~started (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 224)) (global $~lib/heap/__heap_base i32 (i32.const 268)) (export "_start" (func $~start)) (export "memory" (memory $0)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -38,38 +36,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -79,29 +75,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -109,21 +105,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -133,119 +129,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -255,184 +244,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -442,52 +426,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -495,21 +479,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -519,109 +503,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -629,7 +604,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -640,24 +615,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -665,50 +638,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -719,53 +692,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -775,26 +745,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -804,13 +775,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -821,84 +792,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -906,20 +866,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -930,7 +886,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -950,34 +906,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -985,16 +940,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1002,21 +957,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1026,160 +981,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1188,22 +1133,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1212,27 +1157,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1240,74 +1184,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1322,86 +1265,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1410,44 +1360,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1802,6 +1750,14 @@ (local $5 i32) (local $6 i32) (local $7 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $managed-cast/Cat#constructor local.tee $0 @@ -1866,22 +1822,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1940,7 +1895,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index e7c00c0c50..d4838bb9b0 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -1,13 +1,12 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -24,38 +23,37 @@ (data (i32.const 1344) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00e\00s\00t") (data (i32.const 1376) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00b\00a\00r") (data (i32.const 1408) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00b\00a\00z") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) (export "_start" (func $~start)) (export "memory" (memory $0)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -65,42 +63,42 @@ if i32.const 0 i32.const 1088 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -108,235 +106,235 @@ if i32.const 0 i32.const 1088 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1088 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -346,62 +344,62 @@ if i32.const 0 i32.const 1088 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1088 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -409,82 +407,84 @@ if i32.const 0 i32.const 1088 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -492,112 +492,130 @@ if i32.const 0 i32.const 1088 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1088 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1088 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -609,47 +627,43 @@ if unreachable end - i32.const 1440 - local.tee $0 - i32.const 0 - i32.store - i32.const 3008 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1440 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1440 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -660,66 +674,66 @@ br $for-loop|0 end end - i32.const 1440 - i32.const 3024 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1440 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -727,144 +741,143 @@ if i32.const 0 i32.const 1088 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1088 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1088 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -875,80 +888,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1088 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1136 i32.const 1088 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -959,18 +981,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -978,62 +1000,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1088 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1088 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1394,22 +1412,20 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $object-literal/testUnmanaged (param $0 i32) (local $1 i32) - (local $2 i32) local.get $0 i32.load i32.const 123 @@ -1472,7 +1488,7 @@ if i32.const 0 i32.const 1088 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -1767,6 +1783,8 @@ (local $3 i32) (local $4 i32) (local $5 i32) + i32.const 1440 + global.set $~lib/rt/common/root i32.const 8 i32.const 3 call $~lib/rt/tlsf/__alloc @@ -1811,16 +1829,16 @@ i32.const 8 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 i32.const 0 i32.store - local.get $2 + local.get $1 i32.const 0 i32.store offset=4 - local.get $2 + local.get $1 i32.const 123 i32.store - local.get $2 + local.get $1 block $__inlined_func$~lib/string/String#substring (result i32) i32.const 1312 i32.const 0 @@ -1838,31 +1856,31 @@ local.get $5 i32.lt_s select - local.tee $1 + local.tee $0 local.get $4 - local.get $1 + local.get $0 i32.gt_s select i32.const 1 i32.shl - local.tee $0 + local.tee $2 local.get $4 - local.get $1 + local.get $0 local.get $4 - local.get $1 + local.get $0 i32.lt_s select i32.const 1 i32.shl local.tee $4 i32.sub - local.tee $1 + local.tee $0 i32.eqz br_if $__inlined_func$~lib/string/String#substring drop i32.const 1040 i32.const 0 - local.get $0 + local.get $2 local.get $5 i32.const 1 i32.shl @@ -1871,134 +1889,135 @@ select br_if $__inlined_func$~lib/string/String#substring drop - local.get $1 + local.get $0 i32.const 1 call $~lib/rt/tlsf/__alloc - local.tee $0 + local.tee $2 local.get $4 i32.const 1040 i32.add - local.get $1 - call $~lib/memory/memory.copy local.get $0 + call $~lib/memory/memory.copy + local.get $2 call $~lib/rt/pure/__retain end i32.store offset=4 - local.get $2 + local.get $1 call $object-literal/testUnmanaged i32.const 65 i32.const 4 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $0 + local.tee $2 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 0 i32.store offset=4 - local.get $0 + local.get $2 i64.const 0 i64.store offset=8 - local.get $0 + local.get $2 i64.const 0 i64.store offset=16 - local.get $0 + local.get $2 f32.const 0 f32.store offset=24 - local.get $0 + local.get $2 f64.const 0 f64.store offset=32 - local.get $0 + local.get $2 i32.const 0 i32.store8 offset=40 - local.get $0 + local.get $2 i32.const 0 i32.store8 offset=41 - local.get $0 + local.get $2 i32.const 0 i32.store16 offset=42 - local.get $0 + local.get $2 i32.const 0 i32.store16 offset=44 - local.get $0 + local.get $2 i32.const 0 i32.store offset=48 - local.get $0 + local.get $2 i32.const 0 i32.store offset=52 - local.get $0 + local.get $2 f64.const 0 f64.store offset=56 - local.get $0 + local.get $2 i32.const 0 i32.store8 offset=64 - local.get $0 + local.get $2 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 0 i32.store offset=4 - local.get $0 + local.get $2 i64.const 0 i64.store offset=8 - local.get $0 + local.get $2 i64.const 0 i64.store offset=16 - local.get $0 + local.get $2 f32.const 0 f32.store offset=24 - local.get $0 + local.get $2 f64.const 0 f64.store offset=32 - local.get $0 + local.get $2 i32.const 0 i32.store8 offset=40 - local.get $0 + local.get $2 i32.const 0 i32.store8 offset=41 - local.get $0 + local.get $2 i32.const 0 i32.store16 offset=42 - local.get $0 + local.get $2 i32.const 0 i32.store16 offset=44 - local.get $0 + local.get $2 i32.const 0 i32.store offset=48 - local.get $0 + local.get $2 i32.const 0 i32.store offset=52 - local.get $0 + local.get $2 f64.const 0 f64.store offset=56 - local.get $0 + local.get $2 i32.const 0 i32.store8 offset=64 - local.get $0 + local.get $2 call $object-literal/testOmittedTypes i32.const 16 i32.const 5 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $2 + local.tee $1 i32.const 0 i32.store - local.get $2 + local.get $1 i32.const 0 i32.store offset=4 - local.get $2 + local.get $1 f64.const 0 f64.store offset=8 - local.get $2 + local.get $1 i32.const 0 i32.store - local.get $2 + local.get $1 i32.const 1360 i32.store offset=4 - local.get $2 + local.get $1 f64.const 0 f64.store offset=8 - local.get $2 + local.get $1 + local.tee $0 i32.load if i32.const 0 @@ -2008,7 +2027,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 i32.load offset=4 i32.const 1360 call $~lib/string/String.__eq @@ -2021,7 +2040,7 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $0 f64.load offset=8 f64.const 0 f64.ne @@ -2037,67 +2056,67 @@ i32.const 6 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $1 + local.tee $0 i32.const 1392 i32.store - local.get $1 + local.get $0 i32.const 1424 i32.store offset=4 - local.get $1 + local.get $0 i32.const 0 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 - local.get $1 + local.get $0 i32.const 0 i32.store offset=24 - local.get $1 + local.get $0 i32.const 0 i32.store offset=28 - local.get $1 + local.get $0 i32.const 0 i32.store offset=32 - local.get $1 + local.get $0 i32.const -1 i32.store offset=36 - local.get $1 + local.get $0 i32.const 0 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 - local.get $1 + local.get $0 i32.const 0 i32.store offset=24 - local.get $1 + local.get $0 i32.const 0 i32.store offset=28 - local.get $1 + local.get $0 i32.const 0 i32.store offset=32 - local.get $1 + local.get $0 call $object-literal/testOmittedFoo local.get $3 call $~lib/rt/pure/__release - local.get $0 - call $~lib/rt/pure/__release local.get $2 call $~lib/rt/pure/__release local.get $1 call $~lib/rt/pure/__release + local.get $0 + call $~lib/rt/pure/__release ) (func $~start global.get $~started @@ -2151,7 +2170,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/object-literal.untouched.wat b/tests/compiler/object-literal.untouched.wat index 98f6656a59..7a4b983d1a 100644 --- a/tests/compiler/object-literal.untouched.wat +++ b/tests/compiler/object-literal.untouched.wat @@ -1,13 +1,12 @@ (module (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -26,16 +25,17 @@ (data (i32.const 368) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00b\00a\00r\00") (data (i32.const 400) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00b\00a\00z\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~started (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 424)) (export "_start" (func $~start)) (export "memory" (memory $0)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -44,38 +44,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -85,29 +83,29 @@ if i32.const 0 i32.const 80 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -115,21 +113,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -139,119 +137,112 @@ if i32.const 0 i32.const 80 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -261,184 +252,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 80 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -448,52 +434,52 @@ if i32.const 0 i32.const 80 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 80 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -501,21 +487,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -525,109 +511,100 @@ if i32.const 0 i32.const 80 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -635,7 +612,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -646,24 +623,22 @@ if i32.const 0 i32.const 80 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -671,50 +646,50 @@ if i32.const 0 i32.const 80 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 80 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -725,53 +700,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -781,26 +753,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -810,13 +783,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -827,84 +800,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -912,20 +874,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -936,7 +894,7 @@ if i32.const 128 i32.const 80 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -956,34 +914,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -991,16 +948,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1008,21 +965,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1032,160 +989,150 @@ if i32.const 0 i32.const 80 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 80 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1194,22 +1141,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1218,27 +1165,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1246,74 +1192,73 @@ if i32.const 0 i32.const 80 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1328,86 +1273,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 80 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 80 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 80 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1416,44 +1368,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 80 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -3218,29 +3168,28 @@ if i32.const 0 i32.const 80 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/tlsf/__free (param $0 i32) @@ -3778,6 +3727,14 @@ (local $1 i32) (local $2 i32) (local $3 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $object-literal/Managed#constructor local.set $0 @@ -3970,7 +3927,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/rc/global-init.untouched.wat b/tests/compiler/rc/global-init.untouched.wat index 5e52828faa..8b75de4a83 100644 --- a/tests/compiler/rc/global-init.untouched.wat +++ b/tests/compiler/rc/global-init.untouched.wat @@ -1,7 +1,7 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) @@ -16,7 +16,7 @@ (table $0 1 funcref) (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/common/root (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 128)) (export "memory" (memory $0)) (start $~start) @@ -138,7 +138,8 @@ (func $~start call $start:rc/global-init ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -147,38 +148,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 96 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -188,29 +187,29 @@ if i32.const 0 i32.const 96 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -218,21 +217,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -242,119 +241,112 @@ if i32.const 0 i32.const 96 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -364,184 +356,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 96 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 96 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 96 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -551,52 +538,52 @@ if i32.const 0 i32.const 96 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 96 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -604,21 +591,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -628,110 +615,101 @@ if i32.const 0 i32.const 96 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -790,7 +768,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index c49de915d2..427e8c596e 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -1,11 +1,9 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -16,37 +14,36 @@ (data (i32.const 1040) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1088) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1152) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1056 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -56,42 +53,42 @@ if i32.const 0 i32.const 1056 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -99,235 +96,235 @@ if i32.const 0 i32.const 1056 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1056 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1056 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1056 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -337,62 +334,62 @@ if i32.const 0 i32.const 1056 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1056 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -400,82 +397,84 @@ if i32.const 0 i32.const 1056 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -483,112 +482,130 @@ if i32.const 0 i32.const 1056 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1056 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1056 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -600,47 +617,43 @@ if unreachable end - i32.const 1200 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2768 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1200 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1200 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -651,110 +664,119 @@ br $for-loop|0 end end - i32.const 1200 - i32.const 2784 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1200 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1056 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1056 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -763,18 +785,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -782,29 +804,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1056 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -813,71 +833,69 @@ if i32.const 0 i32.const 1056 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -887,14 +905,16 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $~start (local $0 i32) (local $1 i32) (local $2 i32) + i32.const 1200 + global.set $~lib/rt/common/root call $~lib/rt/tlsf/maybeInitialize call $~lib/rt/tlsf/allocateBlock i32.const 16 @@ -1026,7 +1046,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/rc/local-init.untouched.wat b/tests/compiler/rc/local-init.untouched.wat index 3f346a5bc7..0a25e390c4 100644 --- a/tests/compiler/rc/local-init.untouched.wat +++ b/tests/compiler/rc/local-init.untouched.wat @@ -1,13 +1,11 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -19,9 +17,9 @@ (data (i32.const 80) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") (data (i32.const 144) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/heap/__heap_base i32 (i32.const 192)) (export "memory" (memory $0)) @@ -40,7 +38,8 @@ (func $rc/local-init/getRef (result i32) i32.const 32 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -49,38 +48,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 48 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -90,29 +87,29 @@ if i32.const 0 i32.const 48 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -120,21 +117,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -144,119 +141,112 @@ if i32.const 0 i32.const 48 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -266,184 +256,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 48 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 48 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 48 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -453,52 +438,52 @@ if i32.const 0 i32.const 48 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 48 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -506,21 +491,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -530,109 +515,100 @@ if i32.const 0 i32.const 48 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -640,7 +616,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -651,24 +627,22 @@ if i32.const 0 i32.const 48 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -676,50 +650,50 @@ if i32.const 0 i32.const 48 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 48 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -730,53 +704,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -786,26 +757,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -815,13 +787,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -832,84 +804,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -917,20 +878,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -941,7 +898,7 @@ if i32.const 96 i32.const 48 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -961,34 +918,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -996,16 +952,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1013,21 +969,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1037,160 +993,150 @@ if i32.const 0 i32.const 48 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 48 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1199,22 +1145,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1223,27 +1169,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1251,74 +1196,73 @@ if i32.const 0 i32.const 48 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1333,86 +1277,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 48 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 48 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 48 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1421,44 +1372,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 48 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1555,6 +1504,14 @@ local.set $0 local.get $0 call $~lib/rt/pure/__release + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $rc/local-init/Ref#constructor local.set $0 @@ -1564,22 +1521,21 @@ (func $~start call $start:rc/local-init ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1638,7 +1594,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index 6a906a7a83..d82360cc83 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -1,11 +1,10 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -15,38 +14,37 @@ (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $rc/logical-and-mismatch/gloRef (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -56,42 +54,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -99,235 +97,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -337,62 +335,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -400,82 +398,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -483,112 +483,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -600,47 +618,43 @@ if unreachable end - i32.const 1184 - local.tee $0 - i32.const 0 - i32.store - i32.const 2752 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1184 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1184 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -651,110 +665,119 @@ br $for-loop|0 end end - i32.const 1184 - i32.const 2768 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1184 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -763,18 +786,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -782,29 +805,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -813,71 +834,69 @@ if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -887,9 +906,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $~lib/rt/pure/__retain (param $0 i32) (result i32) (local $1 i32) @@ -962,18 +981,20 @@ ) (func $~start (local $0 i32) + i32.const 1184 + global.set $~lib/rt/common/root 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 + if (result i32) local.get $0 call $~lib/rt/pure/__release global.get $rc/logical-and-mismatch/gloRef call $~lib/rt/pure/__retain - local.set $0 + else + local.get $0 end - local.get $0 call $~lib/rt/pure/__release global.get $rc/logical-and-mismatch/gloRef local.tee $0 @@ -986,13 +1007,13 @@ call $~lib/rt/pure/__release call $rc/logical-and-mismatch/Ref#constructor local.tee $0 - if + if (result i32) local.get $0 call $~lib/rt/pure/__release call $rc/logical-and-mismatch/Ref#constructor - local.set $0 + else + local.get $0 end - local.get $0 call $~lib/rt/pure/__release global.get $rc/logical-and-mismatch/gloRef call $~lib/rt/pure/__release @@ -1068,7 +1089,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/rc/logical-and-mismatch.untouched.wat b/tests/compiler/rc/logical-and-mismatch.untouched.wat index 75a31a6e5d..dba4544b93 100644 --- a/tests/compiler/rc/logical-and-mismatch.untouched.wat +++ b/tests/compiler/rc/logical-and-mismatch.untouched.wat @@ -1,13 +1,11 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -18,15 +16,16 @@ (data (i32.const 64) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $rc/logical-and-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 176)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -35,38 +34,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -76,29 +73,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -106,21 +103,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -130,119 +127,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -252,184 +242,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -439,52 +424,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -492,21 +477,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -516,109 +501,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -626,7 +602,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -637,24 +613,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -662,50 +636,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -716,53 +690,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -772,26 +743,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -801,13 +773,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -818,84 +790,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -903,20 +864,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -927,7 +884,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -947,34 +904,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -982,16 +938,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -999,21 +955,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1023,160 +979,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1185,22 +1131,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1209,27 +1155,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1237,74 +1182,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1319,86 +1263,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1407,44 +1358,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1548,6 +1497,14 @@ ) (func $start:rc/logical-and-mismatch (local $0 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $rc/logical-and-mismatch/Ref#constructor global.set $rc/logical-and-mismatch/gloRef @@ -1609,22 +1566,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1683,7 +1639,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index 946c55476b..8c74476010 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -1,11 +1,10 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -15,38 +14,37 @@ (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $rc/logical-or-mismatch/gloRef (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -56,42 +54,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -99,235 +97,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -337,62 +335,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -400,82 +398,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -483,112 +483,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -600,47 +618,43 @@ if unreachable end - i32.const 1184 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2752 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1184 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1184 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -651,110 +665,119 @@ br $for-loop|0 end end - i32.const 1184 - i32.const 2768 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1184 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -763,18 +786,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -782,29 +805,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -813,71 +834,69 @@ if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -887,9 +906,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $~lib/rt/pure/__retain (param $0 i32) (result i32) (local $1 i32) @@ -962,19 +981,20 @@ ) (func $~start (local $0 i32) + i32.const 1184 + global.set $~lib/rt/common/root call $rc/logical-or-mismatch/Ref#constructor global.set $rc/logical-or-mismatch/gloRef call $rc/logical-or-mismatch/Ref#constructor local.tee $0 - i32.eqz - if + 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 - local.set $0 end - local.get $0 call $~lib/rt/pure/__release global.get $rc/logical-or-mismatch/gloRef local.tee $0 @@ -987,14 +1007,13 @@ call $~lib/rt/pure/__release call $rc/logical-or-mismatch/Ref#constructor local.tee $0 - i32.eqz - if + if (result i32) + local.get $0 + else local.get $0 call $~lib/rt/pure/__release call $rc/logical-or-mismatch/Ref#constructor - local.set $0 end - local.get $0 call $~lib/rt/pure/__release global.get $rc/logical-or-mismatch/gloRef call $~lib/rt/pure/__release @@ -1070,7 +1089,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/rc/logical-or-mismatch.untouched.wat b/tests/compiler/rc/logical-or-mismatch.untouched.wat index 05b2addd50..d956d96762 100644 --- a/tests/compiler/rc/logical-or-mismatch.untouched.wat +++ b/tests/compiler/rc/logical-or-mismatch.untouched.wat @@ -1,13 +1,11 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -18,15 +16,16 @@ (data (i32.const 64) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $rc/logical-or-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 176)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -35,38 +34,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -76,29 +73,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -106,21 +103,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -130,119 +127,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -252,184 +242,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -439,52 +424,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -492,21 +477,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -516,109 +501,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -626,7 +602,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -637,24 +613,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -662,50 +636,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -716,53 +690,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -772,26 +743,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -801,13 +773,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -818,84 +790,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -903,20 +864,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -927,7 +884,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -947,34 +904,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -982,16 +938,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -999,21 +955,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1023,160 +979,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1185,22 +1131,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1209,27 +1155,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1237,74 +1182,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1319,86 +1263,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1407,44 +1358,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1548,6 +1497,14 @@ ) (func $start:rc/logical-or-mismatch (local $0 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $rc/logical-or-mismatch/Ref#constructor global.set $rc/logical-or-mismatch/gloRef @@ -1609,22 +1566,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1683,7 +1639,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index adad34ed33..d287a728da 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -1,10 +1,10 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -17,8 +17,7 @@ (data (i32.const 1072) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1120) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1184) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "eliminated_v" (func $rc/optimize/eliminated_v)) (export "eliminated_vi" (func $rc/optimize/eliminated_vi)) @@ -47,6 +46,7 @@ (export "FinalizeARC.eliminates.unnecessaryStaticRelease" (func $rc/optimize/eliminated_v)) (export "FinalizeARC.keeps.dynamicRetain" (func $rc/optimize/FinalizeARC.keeps.dynamicRetain)) (export "FinalizeARC.keeps.dynamicRelease" (func $rc/optimize/FinalizeARC.keeps.dynamicRelease)) + (start $~start) (func $rc/optimize/eliminated_v nop ) @@ -110,33 +110,33 @@ end local.get $0 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -146,42 +146,42 @@ if i32.const 0 i32.const 1088 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -189,235 +189,235 @@ if i32.const 0 i32.const 1088 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1088 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1088 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -427,62 +427,62 @@ if i32.const 0 i32.const 1088 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1088 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -490,82 +490,84 @@ if i32.const 0 i32.const 1088 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -573,112 +575,130 @@ if i32.const 0 i32.const 1088 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1088 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1088 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -690,47 +710,43 @@ if unreachable end - i32.const 1216 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2784 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -741,110 +757,119 @@ br $for-loop|0 end end - i32.const 1216 - i32.const 2800 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1216 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1088 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1088 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -853,18 +878,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -872,29 +897,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1088 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -903,71 +926,69 @@ if i32.const 0 i32.const 1088 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -977,15 +998,18 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) - (func $rc/optimize/getRef (result i32) + (func $~lib/rt/tlsf/__alloc (result i32) call $~lib/rt/tlsf/maybeInitialize call $~lib/rt/tlsf/allocateBlock i32.const 16 i32.add + ) + (func $rc/optimize/getRef (result i32) + call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain ) (func $~lib/rt/pure/__release (param $0 i32) @@ -1000,10 +1024,7 @@ end ) (func $rc/optimize/eliminated_rr (param $0 i32) (result i32) - call $~lib/rt/tlsf/maybeInitialize - call $~lib/rt/tlsf/allocateBlock - i32.const 16 - i32.add + call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain ) (func $rc/optimize/OptimizeARC.eliminates.balancedInsideOutsideLoopWithBranch (param $0 i32) (param $1 i32) (param $2 i32) @@ -1050,6 +1071,10 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~start + i32.const 1216 + global.set $~lib/rt/common/root + ) (func $~lib/rt/pure/decrement (param $0 i32) (local $1 i32) (local $2 i32) @@ -1121,7 +1146,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/rc/optimize.untouched.wat b/tests/compiler/rc/optimize.untouched.wat index 2504b02101..a5eacc6ea0 100644 --- a/tests/compiler/rc/optimize.untouched.wat +++ b/tests/compiler/rc/optimize.untouched.wat @@ -3,11 +3,10 @@ (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $none_=>_i32 (func (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -19,9 +18,9 @@ (data (i32.const 112) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") (data (i32.const 176) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/heap/__heap_base i32 (i32.const 196)) (export "memory" (memory $0)) @@ -52,6 +51,7 @@ (export "FinalizeARC.eliminates.unnecessaryStaticRelease" (func $rc/optimize/FinalizeARC.eliminates.unnecessaryStaticRelease)) (export "FinalizeARC.keeps.dynamicRetain" (func $rc/optimize/FinalizeARC.keeps.dynamicRetain)) (export "FinalizeARC.keeps.dynamicRelease" (func $rc/optimize/FinalizeARC.keeps.dynamicRelease)) + (start $~start) (func $rc/optimize/eliminated_v nop ) @@ -129,7 +129,8 @@ end local.get $0 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -138,38 +139,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -179,29 +178,29 @@ if i32.const 0 i32.const 80 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -209,21 +208,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -233,119 +232,112 @@ if i32.const 0 i32.const 80 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -355,184 +347,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 80 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 80 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -542,52 +529,52 @@ if i32.const 0 i32.const 80 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 80 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -595,21 +582,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -619,109 +606,100 @@ if i32.const 0 i32.const 80 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -729,7 +707,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -740,24 +718,22 @@ if i32.const 0 i32.const 80 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -765,50 +741,50 @@ if i32.const 0 i32.const 80 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 80 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -819,53 +795,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -875,26 +848,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -904,13 +878,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -921,84 +895,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1006,20 +969,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1030,7 +989,7 @@ if i32.const 128 i32.const 80 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1050,34 +1009,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1085,16 +1043,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1102,21 +1060,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1126,160 +1084,150 @@ if i32.const 0 i32.const 80 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 80 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1288,22 +1236,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1312,27 +1260,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1340,74 +1287,73 @@ if i32.const 0 i32.const 80 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1422,86 +1368,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 80 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 80 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 80 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1510,44 +1463,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 80 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1856,27 +1807,36 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~start + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root + ) (func $~lib/rt/pure/__collect i32.const 1 drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1935,7 +1895,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index 160b6e5eb6..565aa92319 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -1,55 +1,52 @@ (module (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (data (i32.const 1184) "\04\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 ") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 1184)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) (export "__retain" (func $~lib/rt/pure/__retain)) (export "__release" (func $~lib/rt/pure/__release)) - (export "__collect" (func $~start)) + (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (start $~start) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -59,42 +56,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -102,235 +99,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -340,62 +337,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -403,82 +400,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -486,112 +485,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -603,47 +620,43 @@ if unreachable end - i32.const 1232 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2800 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1232 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1232 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -654,66 +667,66 @@ br $for-loop|0 end end - i32.const 1232 - i32.const 2816 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1232 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -721,144 +734,143 @@ if i32.const 0 i32.const 1040 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1040 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -869,80 +881,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1088 i32.const 1040 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -953,18 +974,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -972,60 +993,56 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1096,6 +1113,10 @@ end ) (func $~start + i32.const 1232 + global.set $~lib/rt/common/root + ) + (func $~lib/rt/pure/__collect nop ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1167,7 +1188,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock else diff --git a/tests/compiler/rc/rereturn.untouched.wat b/tests/compiler/rc/rereturn.untouched.wat index 86eaab64c7..4587d9b053 100644 --- a/tests/compiler/rc/rereturn.untouched.wat +++ b/tests/compiler/rc/rereturn.untouched.wat @@ -1,12 +1,10 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) - (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) - (type $none_=>_i32 (func (result i32))) + (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) @@ -15,9 +13,9 @@ (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (data (i32.const 176) "\04\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\00\00\00\00\00\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/rt/__rtti_base i32 (i32.const 176)) (global $~lib/heap/__heap_base i32 (i32.const 212)) @@ -28,7 +26,8 @@ (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -37,38 +36,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -78,29 +75,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -108,21 +105,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -132,119 +129,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -254,184 +244,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -441,52 +426,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -494,21 +479,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -518,109 +503,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -628,7 +604,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -639,24 +615,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -664,50 +638,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -718,53 +692,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -774,26 +745,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -803,13 +775,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -820,84 +792,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -905,20 +866,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -929,7 +886,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -949,34 +906,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -984,16 +940,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1001,21 +957,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1025,160 +981,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1187,22 +1133,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1211,27 +1157,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1239,74 +1184,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1321,86 +1265,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1409,42 +1360,40 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 0 drop - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1552,6 +1501,14 @@ call $~lib/rt/pure/__release ) (func $~start + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $start:rc/rereturn ) (func $~lib/rt/pure/__collect @@ -1559,18 +1516,17 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 0 drop @@ -1629,7 +1585,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index ae587c4e1a..556146b418 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -1,10 +1,9 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -15,40 +14,39 @@ (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $rc/ternary-mismatch/gloRef (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 $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -58,42 +56,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -101,235 +99,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -339,62 +337,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -402,82 +400,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -485,112 +485,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -602,47 +620,43 @@ if unreachable end - i32.const 1184 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2752 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1184 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1184 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -653,110 +667,119 @@ br $for-loop|0 end end - i32.const 1184 - i32.const 2768 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1184 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -765,18 +788,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -784,29 +807,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -815,71 +836,69 @@ if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -889,9 +908,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $~lib/rt/pure/__retain (param $0 i32) (result i32) (local $1 i32) @@ -981,6 +1000,8 @@ end ) (func $~start + i32.const 1184 + global.set $~lib/rt/common/root call $rc/ternary-mismatch/Ref#constructor global.set $rc/ternary-mismatch/gloRef i32.const 1 @@ -1069,7 +1090,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/rc/ternary-mismatch.untouched.wat b/tests/compiler/rc/ternary-mismatch.untouched.wat index f502716e41..b599a1862f 100644 --- a/tests/compiler/rc/ternary-mismatch.untouched.wat +++ b/tests/compiler/rc/ternary-mismatch.untouched.wat @@ -1,13 +1,11 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -18,9 +16,9 @@ (data (i32.const 64) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00") (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $rc/ternary-mismatch/gloRef (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 176)) @@ -28,7 +26,8 @@ (export "test1" (func $rc/ternary-mismatch/test1)) (export "test2" (func $rc/ternary-mismatch/test2)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -37,38 +36,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -78,29 +75,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -108,21 +105,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -132,119 +129,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -254,184 +244,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -441,52 +426,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -494,21 +479,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -518,109 +503,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -628,7 +604,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -639,24 +615,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -664,50 +638,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -718,53 +692,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -774,26 +745,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -803,13 +775,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -820,84 +792,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -905,20 +866,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -929,7 +886,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -949,34 +906,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -984,16 +940,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1001,21 +957,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1025,160 +981,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1187,22 +1133,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1211,27 +1157,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1239,74 +1184,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1321,86 +1265,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1409,44 +1360,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1567,6 +1516,14 @@ end ) (func $start:rc/ternary-mismatch + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $rc/ternary-mismatch/Ref#constructor global.set $rc/ternary-mismatch/gloRef @@ -1593,22 +1550,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -1667,7 +1623,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index 5c12ab7b25..27f652737d 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -1,13 +1,12 @@ (module - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i64_i32_i64_i32_i64_=>_i32 (func (param i32 i64 i32 i64 i32 i64) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) @@ -27,8 +26,7 @@ (data (i32.const 2372) "\01\00\00\00\01") (data (i32.const 2384) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\001\00.\000") (data (i32.const 2416) "\03\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 ") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~lib/util/number/_K (mut i32) (i32.const 0)) (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) @@ -40,33 +38,33 @@ (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -76,42 +74,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -119,235 +117,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -357,62 +355,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -420,82 +418,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -503,112 +503,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -620,47 +638,43 @@ if unreachable end - i32.const 2448 - local.tee $0 - i32.const 0 - i32.store - i32.const 4016 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 2448 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 2448 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -671,66 +685,66 @@ br $for-loop|0 end end - i32.const 2448 - i32.const 4032 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 2448 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -738,144 +752,143 @@ if i32.const 0 i32.const 1040 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1040 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -886,80 +899,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1088 i32.const 1040 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -970,18 +992,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -989,60 +1011,56 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2295,15 +2313,14 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock ) (func $start:resolve-ternary @@ -2311,7 +2328,6 @@ (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 call $~lib/util/number/decimalCount32 local.tee $0 @@ -2390,7 +2406,7 @@ if i32.const 0 i32.const 1040 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -2416,6 +2432,8 @@ call $~lib/rt/pure/__release ) (func $~start + i32.const 2448 + global.set $~lib/rt/common/root call $start:resolve-ternary ) (func $~lib/rt/pure/__collect @@ -2484,7 +2502,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/resolve-ternary.untouched.wat b/tests/compiler/resolve-ternary.untouched.wat index ddf482c710..5b93312f32 100644 --- a/tests/compiler/resolve-ternary.untouched.wat +++ b/tests/compiler/resolve-ternary.untouched.wat @@ -1,13 +1,12 @@ (module (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) @@ -34,9 +33,9 @@ (data (i32.const 1808) "\03\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00") (table $0 5 funcref) (elem (i32.const 1) $start:resolve-ternary~anonymous|0 $start:resolve-ternary~anonymous|1 $resolve-ternary/g1 $resolve-ternary/g2) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $resolve-ternary/b (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) @@ -58,7 +57,8 @@ (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) (start $~start) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -67,38 +67,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -108,29 +106,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -138,21 +136,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -162,119 +160,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -284,184 +275,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -471,52 +457,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -524,21 +510,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -548,109 +534,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -658,7 +635,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -669,24 +646,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -694,50 +669,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -748,53 +723,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -804,26 +776,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -833,13 +806,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -850,84 +823,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -935,20 +897,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -959,7 +917,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -979,34 +937,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1014,16 +971,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1031,21 +988,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1055,160 +1012,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1217,22 +1164,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1241,27 +1188,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1269,74 +1215,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1351,86 +1296,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1439,42 +1391,40 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 0 drop - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -4694,25 +4644,24 @@ if i32.const 0 i32.const 32 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 0 drop @@ -4919,6 +4868,14 @@ call $~lib/rt/pure/__release ) (func $~start + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $start:resolve-ternary ) (func $~lib/rt/pure/__collect @@ -4980,7 +4937,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index e3b306b5ff..54951d50e8 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -3,11 +3,9 @@ (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -29,11 +27,7 @@ (data (i32.const 1472) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") (data (i32.const 1536) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 1584) "\08\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\"\t\00\00\00\00\00\00\"A\00\00\00\00\00\00\"A") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (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)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/pure/__release (param $0 i32) @@ -47,33 +41,33 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -83,42 +77,42 @@ if i32.const 0 i32.const 1136 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -126,235 +120,235 @@ if i32.const 0 i32.const 1136 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1136 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -364,62 +358,62 @@ if i32.const 0 i32.const 1136 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1136 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -427,82 +421,84 @@ if i32.const 0 i32.const 1136 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -510,112 +506,130 @@ if i32.const 0 i32.const 1136 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1136 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1136 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -627,47 +641,43 @@ if unreachable end - i32.const 1664 - local.tee $0 - i32.const 0 - i32.store - i32.const 3232 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1664 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1664 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -678,16 +688,16 @@ br $for-loop|0 end end - i32.const 1664 - i32.const 3248 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1664 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -696,7 +706,7 @@ if i32.const 1184 i32.const 1136 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -713,55 +723,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -769,144 +779,143 @@ if i32.const 0 i32.const 1136 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1136 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1136 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -917,61 +926,70 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1136 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -982,18 +1000,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1001,62 +1019,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1136 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1136 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1310,7 +1324,7 @@ if i32.const 0 i32.const 1136 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -1490,121 +1504,115 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 1652 i32.ge_u if - local.get $1 - local.get $3 + local.get $0 + local.get $2 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/array/ensureSize (param $0 i32) (param $1 i32) (local $2 i32) @@ -1632,8 +1640,8 @@ local.get $0 i32.load local.set $3 - local.get $2 call $~lib/rt/tlsf/maybeInitialize + local.get $2 local.get $3 call $~lib/rt/tlsf/checkUsedBlock local.get $1 @@ -1766,6 +1774,8 @@ (local $3 i32) (local $4 i32) (local $5 i32) + i32.const 1664 + global.set $~lib/rt/common/root i32.const 16 i32.const 3 call $~lib/rt/tlsf/__alloc @@ -1785,27 +1795,28 @@ i32.const 12 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 i32.const 12 call $~lib/memory/memory.fill - local.get $2 - local.tee $0 + local.get $1 + local.set $2 + local.get $1 local.get $3 i32.load local.tee $4 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $4 call $~lib/rt/pure/__release end local.get $3 - local.get $0 + local.get $2 i32.store local.get $3 - local.get $2 + local.get $1 i32.store offset=4 local.get $3 i32.const 12 @@ -1819,7 +1830,7 @@ call $~lib/array/Array#push local.get $3 i32.load offset=12 - local.tee $2 + local.tee $1 i32.const 1 i32.lt_s if @@ -1832,17 +1843,17 @@ end local.get $3 i32.load offset=4 - local.get $2 + local.get $1 i32.const 1 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.shl i32.add i32.load drop local.get $3 - local.get $2 + local.get $1 i32.store offset=12 local.get $3 call $~lib/rt/pure/__release @@ -1865,27 +1876,28 @@ i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 i32.const 0 call $~lib/memory/memory.fill - local.get $2 - local.tee $0 + local.get $1 + local.set $2 + local.get $1 local.get $3 i32.load local.tee $4 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $4 call $~lib/rt/pure/__release end local.get $3 - local.get $0 + local.get $2 i32.store local.get $3 - local.get $2 + local.get $1 i32.store offset=4 local.get $3 i32.const 0 @@ -1895,7 +1907,7 @@ i32.store offset=12 local.get $3 loop $for-loop|0 - local.get $1 + local.get $0 i32.const 10 i32.lt_s if @@ -1918,27 +1930,28 @@ i32.const 0 i32.const 0 call $~lib/rt/tlsf/__alloc - local.tee $2 + local.tee $1 i32.const 0 call $~lib/memory/memory.fill - local.get $2 - local.tee $0 + local.get $1 + local.set $2 + local.get $1 local.get $3 i32.load local.tee $5 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $5 call $~lib/rt/pure/__release end local.get $3 - local.get $0 + local.get $2 i32.store local.get $3 - local.get $2 + local.get $1 i32.store offset=4 local.get $3 i32.const 0 @@ -1947,9 +1960,9 @@ i32.const 0 i32.store offset=12 i32.const 0 - local.set $0 + local.set $2 loop $for-loop|1 - local.get $0 + local.get $2 i32.const 10 i32.lt_s if @@ -1959,7 +1972,7 @@ local.tee $5 i32.const 1 i32.add - local.tee $2 + local.tee $1 call $~lib/array/ensureSize local.get $3 i32.load offset=4 @@ -1970,21 +1983,21 @@ i32.const 1344 i32.store local.get $3 - local.get $2 + local.get $1 i32.store offset=12 - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $for-loop|1 end end local.get $3 call $~lib/rt/pure/__release - local.get $1 + local.get $0 i32.const 1 i32.add - local.set $1 + local.set $0 br $for-loop|0 end end @@ -1992,129 +2005,127 @@ i32.const 1360 i32.const 1392 call $~lib/string/String.__concat - local.tee $1 + local.tee $0 i32.const 1456 call $~lib/string/String.__concat - local.get $1 + local.get $0 call $~lib/rt/pure/__release call $~lib/rt/pure/__release i32.const 4 i32.const 6 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $2 + local.tee $3 i32.const 0 i32.store i32.const 4 i32.const 7 call $~lib/rt/tlsf/__alloc call $~lib/rt/pure/__retain - local.tee $3 + local.tee $1 i32.const 0 i32.store + local.get $1 + local.tee $2 local.get $3 local.tee $0 - local.get $2 - local.tee $1 i32.load local.tee $4 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $1 local.get $0 + local.get $2 i32.store + local.get $0 local.get $1 - local.set $0 + local.tee $0 local.get $3 - local.tee $1 - local.get $0 i32.load local.tee $4 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $4 call $~lib/rt/pure/__release end local.get $0 - local.get $1 i32.store - local.get $0 - local.tee $1 local.get $3 local.tee $0 + local.get $1 + local.tee $2 i32.load local.tee $4 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $4 call $~lib/rt/pure/__release end + local.get $2 local.get $0 - local.get $1 i32.store + local.get $3 + local.tee $0 local.get $2 - local.tee $1 - local.get $0 i32.load local.tee $4 i32.ne if - local.get $1 + local.get $0 call $~lib/rt/pure/__retain - local.set $1 + local.set $0 local.get $4 call $~lib/rt/pure/__release end + local.get $2 local.get $0 - local.get $1 i32.store + local.get $1 local.get $3 - local.get $2 - local.tee $1 + local.tee $0 i32.load local.tee $4 i32.ne if - local.get $0 + local.get $2 call $~lib/rt/pure/__retain - local.set $0 + local.set $2 local.get $4 call $~lib/rt/pure/__release end - local.get $1 local.get $0 - i32.store local.get $2 + i32.store local.get $3 + local.get $1 i32.load - local.tee $0 + local.tee $2 i32.ne if - local.get $1 - call $~lib/rt/pure/__retain - local.set $1 local.get $0 + call $~lib/rt/pure/__retain + local.set $0 + local.get $2 call $~lib/rt/pure/__release end - local.get $3 local.get $1 + local.get $0 i32.store - local.get $2 - call $~lib/rt/pure/__release local.get $3 call $~lib/rt/pure/__release + local.get $1 + call $~lib/rt/pure/__release call $~lib/rt/pure/__collect ) (func $~start @@ -2162,7 +2173,6 @@ i32.const -2147483648 i32.store offset=4 else - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock end @@ -2223,13 +2233,17 @@ i32.and i32.eqz if - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.tee $1 - global.get $~lib/rt/pure/END + global.get $~lib/rt/common/root + i32.load offset=20 i32.ge_u if - global.get $~lib/rt/pure/CUR - global.get $~lib/rt/pure/ROOTS + global.get $~lib/rt/common/root + i32.load offset=16 + global.get $~lib/rt/common/root + i32.load offset=12 local.tee $1 i32.sub local.tee $3 @@ -2263,26 +2277,31 @@ call $~lib/rt/tlsf/checkUsedBlock call $~lib/rt/tlsf/freeBlock end + global.get $~lib/rt/common/root local.get $2 - global.set $~lib/rt/pure/ROOTS + i32.store offset=12 + global.get $~lib/rt/common/root local.get $2 local.get $3 i32.add - global.set $~lib/rt/pure/CUR + i32.store offset=16 + global.get $~lib/rt/common/root local.get $2 local.get $4 i32.add - global.set $~lib/rt/pure/END - global.get $~lib/rt/pure/CUR + i32.store offset=20 + global.get $~lib/rt/common/root + i32.load offset=16 local.set $1 end local.get $1 local.get $0 i32.store + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.add - global.set $~lib/rt/pure/CUR + i32.store offset=16 end end end @@ -2386,7 +2405,6 @@ i32.add i32.const 5 call $~lib/rt/__visit_members - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock end @@ -2398,11 +2416,13 @@ (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/pure/ROOTS + global.get $~lib/rt/common/root + i32.load offset=12 local.tee $0 local.tee $4 local.set $3 - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.set $1 loop $for-loop|0 local.get $3 @@ -2448,7 +2468,6 @@ i32.and select if - global.get $~lib/rt/tlsf/ROOT local.get $2 call $~lib/rt/tlsf/freeBlock else @@ -2466,8 +2485,9 @@ br $for-loop|0 end end + global.get $~lib/rt/common/root local.get $4 - global.set $~lib/rt/pure/CUR + i32.store offset=16 local.get $0 local.set $1 loop $for-loop|1 @@ -2509,8 +2529,9 @@ br $for-loop|2 end end + global.get $~lib/rt/common/root local.get $0 - global.set $~lib/rt/pure/CUR + i32.store offset=16 ) (func $~lib/rt/pure/__visit (param $0 i32) (param $1 i32) local.get $0 diff --git a/tests/compiler/retain-release-sanity.untouched.wat b/tests/compiler/retain-release-sanity.untouched.wat index e1fa94dd82..afdf52d501 100644 --- a/tests/compiler/retain-release-sanity.untouched.wat +++ b/tests/compiler/retain-release-sanity.untouched.wat @@ -1,13 +1,11 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -30,14 +28,11 @@ (data (i32.const 528) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00") (data (i32.const 576) "\08\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\"\t\00\00\00\00\00\00\"A\00\00\00\00\00\00\"A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL 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)) (global $~lib/rt/__rtti_base i32 (i32.const 576)) (global $~lib/heap/__heap_base i32 (i32.const 644)) (export "memory" (memory $0)) @@ -53,7 +48,8 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -62,38 +58,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -103,29 +97,29 @@ if i32.const 0 i32.const 128 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -133,21 +127,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -157,119 +151,112 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -279,184 +266,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 128 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -466,52 +448,52 @@ if i32.const 0 i32.const 128 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 128 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -519,21 +501,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -543,109 +525,100 @@ if i32.const 0 i32.const 128 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -653,7 +626,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -664,24 +637,22 @@ if i32.const 0 i32.const 128 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -689,50 +660,50 @@ if i32.const 0 i32.const 128 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 128 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -743,53 +714,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -799,26 +767,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -828,13 +797,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -845,84 +814,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -930,20 +888,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -954,7 +908,7 @@ if i32.const 176 i32.const 128 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -974,34 +928,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1009,16 +962,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1026,21 +979,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1050,160 +1003,150 @@ if i32.const 0 i32.const 128 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 128 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1212,22 +1155,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1236,27 +1179,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1264,74 +1206,73 @@ if i32.const 0 i32.const 128 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1346,86 +1287,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 128 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 128 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 128 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1434,44 +1382,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 128 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1880,7 +1826,7 @@ if i32.const 0 i32.const 128 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -3143,39 +3089,38 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -3183,106 +3128,101 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 1 drop - local.get $1 - local.get $8 + local.get $0 + local.get $7 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -3759,6 +3699,14 @@ (local $3 i32) (local $4 i32) (local $5 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 i32.const 3 call $~lib/array/Array#constructor @@ -4000,9 +3948,11 @@ (local $3 i32) (local $4 i32) (local $5 i32) - global.get $~lib/rt/pure/ROOTS + global.get $~lib/rt/common/root + i32.load offset=12 local.set $0 - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.get $0 i32.sub local.set $1 @@ -4044,36 +3994,43 @@ local.get $0 call $~lib/rt/tlsf/__free end + global.get $~lib/rt/common/root local.get $5 - global.set $~lib/rt/pure/ROOTS + i32.store offset=12 + global.get $~lib/rt/common/root local.get $5 local.get $1 i32.add - global.set $~lib/rt/pure/CUR + i32.store offset=16 + global.get $~lib/rt/common/root local.get $5 local.get $4 i32.add - global.set $~lib/rt/pure/END + i32.store offset=20 ) (func $~lib/rt/pure/appendRoot (param $0 i32) (local $1 i32) - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.set $1 local.get $1 - global.get $~lib/rt/pure/END + global.get $~lib/rt/common/root + i32.load offset=20 i32.ge_u if call $~lib/rt/pure/growRoots - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.set $1 end local.get $1 local.get $0 i32.store + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.add - global.set $~lib/rt/pure/CUR + i32.store offset=16 ) (func $~lib/rt/pure/decrement (param $0 i32) (local $1 i32) @@ -4121,7 +4078,6 @@ i32.and i32.eqz if - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else @@ -4303,7 +4259,6 @@ i32.add i32.const 5 call $~lib/rt/__visit_members - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock end @@ -4318,13 +4273,15 @@ (local $6 i32) i32.const 0 drop - global.get $~lib/rt/pure/ROOTS + global.get $~lib/rt/common/root + i32.load offset=12 local.set $0 local.get $0 local.set $1 local.get $1 local.set $2 - global.get $~lib/rt/pure/CUR + global.get $~lib/rt/common/root + i32.load offset=16 local.set $3 loop $for-loop|0 local.get $2 @@ -4378,7 +4335,6 @@ i32.const 0 end if - global.get $~lib/rt/tlsf/ROOT local.get $5 call $~lib/rt/tlsf/freeBlock else @@ -4398,8 +4354,9 @@ br $for-loop|0 end end + global.get $~lib/rt/common/root local.get $1 - global.set $~lib/rt/pure/CUR + i32.store offset=16 local.get $0 local.set $3 loop $for-loop|1 @@ -4448,8 +4405,9 @@ br $for-loop|2 end end + global.get $~lib/rt/common/root local.get $0 - global.set $~lib/rt/pure/CUR + i32.store offset=16 ) (func $~lib/rt/pure/__visit (param $0 i32) (param $1 i32) (local $2 i32) diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index b19a070365..191205ed31 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -1,49 +1,47 @@ (module - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $retain-return/ref (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) (export "_start" (func $~start)) (export "memory" (memory $0)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -53,42 +51,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -96,235 +94,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -334,62 +332,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -397,82 +395,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -480,112 +480,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -597,47 +615,43 @@ if unreachable end - i32.const 1184 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2752 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1184 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1184 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -648,110 +662,119 @@ br $for-loop|0 end end - i32.const 1184 - i32.const 2768 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1184 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -760,18 +783,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -779,29 +802,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -810,71 +831,69 @@ if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -884,7 +903,7 @@ i32.and i32.store end - local.get $1 + local.get $0 ) (func $~lib/rt/pure/__retain (param $0 i32) (result i32) (local $1 i32) @@ -962,6 +981,8 @@ i32.const 1 global.set $~started end + i32.const 1184 + global.set $~lib/rt/common/root call $retain-return/Ref#constructor call $~lib/rt/pure/__release call $retain-return/Ref#constructor @@ -1062,7 +1083,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock else diff --git a/tests/compiler/retain-return.untouched.wat b/tests/compiler/retain-return.untouched.wat index 5f9a41b003..019b8ef85b 100644 --- a/tests/compiler/retain-return.untouched.wat +++ b/tests/compiler/retain-return.untouched.wat @@ -1,12 +1,10 @@ (module (type $none_=>_i32 (func (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) @@ -15,9 +13,9 @@ (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (table $0 7 funcref) (elem (i32.const 1) $start:retain-return~anonymous|0 $start:retain-return~anonymous|1 $start:retain-return~anonymous|2 $start:retain-return~anonymous|3 $start:retain-return~anonymous|4 $start:retain-return~anonymous|5) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $retain-return/ref (mut i32) (i32.const 0)) (global $retain-return/returnNewFnExpr (mut i32) (i32.const 1)) @@ -31,7 +29,8 @@ (global $~lib/heap/__heap_base i32 (i32.const 176)) (export "_start" (func $~start)) (export "memory" (memory $0)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -40,38 +39,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -81,29 +78,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -111,21 +108,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -135,119 +132,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -257,184 +247,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -444,52 +429,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -497,21 +482,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -521,109 +506,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -631,7 +607,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -642,24 +618,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -667,50 +641,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -721,53 +695,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -777,26 +748,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -806,13 +778,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -823,84 +795,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -908,20 +869,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -932,7 +889,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -952,34 +909,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -987,16 +943,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1004,21 +960,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1028,160 +984,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1190,22 +1136,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1214,27 +1160,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1242,74 +1187,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1324,86 +1268,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1412,42 +1363,40 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 0 drop - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1590,6 +1539,14 @@ (func $start:retain-return (local $0 i32) (local $1 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $retain-return/returnNew call $~lib/rt/pure/__release call $retain-return/returnNew @@ -1697,18 +1654,17 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 0 drop @@ -1767,7 +1723,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index fa32ef6903..c392e3aeb6 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -1,21 +1,17 @@ (module (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1072) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1136) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (data (i32.const 1184) "\03\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 ") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 1184)) (export "memory" (memory $0)) (export "__alloc" (func $~lib/rt/tlsf/__alloc)) @@ -23,33 +19,34 @@ (export "__release" (func $~lib/rt/pure/__release)) (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (start $~start) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -59,42 +56,42 @@ if i32.const 0 i32.const 1040 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -102,235 +99,235 @@ if i32.const 0 i32.const 1040 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1040 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1040 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -340,62 +337,62 @@ if i32.const 0 i32.const 1040 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1040 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -403,82 +400,84 @@ if i32.const 0 i32.const 1040 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -486,112 +485,130 @@ if i32.const 0 i32.const 1040 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1040 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -603,47 +620,43 @@ if unreachable end - i32.const 1216 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 2784 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -654,66 +667,66 @@ br $for-loop|0 end end - i32.const 1216 - i32.const 2800 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1216 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -721,144 +734,143 @@ if i32.const 0 i32.const 1040 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1040 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1040 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -869,80 +881,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1040 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1088 i32.const 1040 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -953,18 +974,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -972,60 +993,56 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1040 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1040 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1095,6 +1112,10 @@ call $~lib/rt/pure/decrement end ) + (func $~start + i32.const 1216 + global.set $~lib/rt/common/root + ) (func $~lib/rt/pure/__collect nop ) @@ -1167,7 +1188,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock else diff --git a/tests/compiler/runtime-full.untouched.wat b/tests/compiler/runtime-full.untouched.wat index d7ab098ac5..a06143f001 100644 --- a/tests/compiler/runtime-full.untouched.wat +++ b/tests/compiler/runtime-full.untouched.wat @@ -1,13 +1,10 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (memory $0 1) (data (i32.const 16) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00") @@ -15,9 +12,9 @@ (data (i32.const 128) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (data (i32.const 176) "\03\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/rt/__rtti_base i32 (i32.const 176)) (global $~lib/heap/__heap_base i32 (i32.const 204)) @@ -27,7 +24,9 @@ (export "__release" (func $~lib/rt/pure/__release)) (export "__collect" (func $~lib/rt/pure/__collect)) (export "__rtti_base" (global $~lib/rt/__rtti_base)) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (start $~start) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -36,38 +35,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -77,29 +74,29 @@ if i32.const 0 i32.const 32 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -107,21 +104,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -131,119 +128,112 @@ if i32.const 0 i32.const 32 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -253,184 +243,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 32 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 32 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -440,52 +425,52 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -493,21 +478,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -517,109 +502,100 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -627,7 +603,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -638,24 +614,22 @@ if i32.const 0 i32.const 32 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -663,50 +637,50 @@ if i32.const 0 i32.const 32 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -717,53 +691,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -773,26 +744,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -802,13 +774,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -819,84 +791,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -904,20 +865,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -928,7 +885,7 @@ if i32.const 80 i32.const 32 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -948,34 +905,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -983,16 +939,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1000,21 +956,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1024,160 +980,150 @@ if i32.const 0 i32.const 32 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 32 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1186,22 +1132,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1210,27 +1156,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1238,74 +1183,73 @@ if i32.const 0 i32.const 32 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1320,86 +1264,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 32 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 32 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1408,42 +1359,40 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 0 drop - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1527,23 +1476,32 @@ call $~lib/rt/pure/decrement end ) + (func $~start + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root + ) (func $~lib/rt/pure/__collect i32.const 1 drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 0 drop @@ -1602,7 +1560,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index ddd2247e86..d6b271fc2c 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -3,11 +3,9 @@ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -27,8 +25,7 @@ (data (i32.const 1424) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1488) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (global $std/array-literal/i (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $std/array-literal/dynamicArrayI8 (mut i32) (i32.const 0)) (global $std/array-literal/dynamicArrayI32 (mut i32) (i32.const 0)) (global $std/array-literal/dynamicArrayRef (mut i32) (i32.const 0)) @@ -75,33 +72,33 @@ i32.add i32.load ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1392 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -111,42 +108,42 @@ if i32.const 0 i32.const 1392 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -154,235 +151,235 @@ if i32.const 0 i32.const 1392 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1392 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1392 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1392 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -392,62 +389,62 @@ if i32.const 0 i32.const 1392 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1392 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -455,82 +452,84 @@ if i32.const 0 i32.const 1392 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -538,112 +537,130 @@ if i32.const 0 i32.const 1392 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1392 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1392 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -655,47 +672,43 @@ if unreachable end - i32.const 1536 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 3104 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1536 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1536 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -706,66 +719,66 @@ br $for-loop|0 end end - i32.const 1536 - i32.const 3120 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1536 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -773,144 +786,143 @@ if i32.const 0 i32.const 1392 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1392 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1392 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -921,80 +933,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1392 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1440 i32.const 1392 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -1005,18 +1026,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1024,62 +1045,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1392 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1392 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1288,6 +1305,8 @@ call $~lib/builtins/abort unreachable end + i32.const 1536 + global.set $~lib/rt/common/root i32.const 3 i32.const 0 i32.const 3 @@ -1633,7 +1652,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/std/array-literal.untouched.wat b/tests/compiler/std/array-literal.untouched.wat index 88dd7543cb..b19740cafa 100644 --- a/tests/compiler/std/array-literal.untouched.wat +++ b/tests/compiler/std/array-literal.untouched.wat @@ -1,13 +1,12 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -32,9 +31,9 @@ (global $std/array-literal/staticArrayI32 i32 (i32.const 304)) (global $std/array-literal/emptyArrayI32 (mut i32) (i32.const 352)) (global $std/array-literal/i (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $std/array-literal/dynamicArrayI8 (mut i32) (i32.const 0)) @@ -114,7 +113,8 @@ drop local.get $2 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -123,38 +123,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 384 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -164,29 +162,29 @@ if i32.const 0 i32.const 384 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -194,21 +192,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -218,119 +216,112 @@ if i32.const 0 i32.const 384 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -340,184 +331,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 384 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 384 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 384 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -527,52 +513,52 @@ if i32.const 0 i32.const 384 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 384 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -580,21 +566,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -604,109 +590,100 @@ if i32.const 0 i32.const 384 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -714,7 +691,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -725,24 +702,22 @@ if i32.const 0 i32.const 384 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -750,50 +725,50 @@ if i32.const 0 i32.const 384 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 384 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -804,53 +779,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -860,26 +832,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -889,13 +862,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -906,84 +879,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -991,20 +953,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1015,7 +973,7 @@ if i32.const 432 i32.const 384 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1035,34 +993,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1070,16 +1027,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1087,21 +1044,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1111,160 +1068,150 @@ if i32.const 0 i32.const 384 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 384 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1273,22 +1220,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1297,27 +1244,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1325,74 +1271,73 @@ if i32.const 0 i32.const 384 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1407,86 +1352,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 384 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 384 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 384 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1495,44 +1447,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 384 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -3086,6 +3036,14 @@ call $~lib/builtins/abort unreachable end + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 3 i32.const 0 i32.const 3 @@ -3368,22 +3326,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -3442,7 +3399,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 8cfc0be17b..e19061898c 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -2,13 +2,13 @@ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) - (type $i32_=>_none (func (param i32))) - (type $none_=>_i32 (func (result i32))) - (type $none_=>_f64 (func (result f64))) (type $none_=>_none (func)) + (type $none_=>_f64 (func (result f64))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) @@ -234,8 +234,7 @@ (data (i32.const 9732) "\01") (table $0 57 funcref) (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~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 $~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 $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/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/math/random_seeded (mut i32) (i32.const 0)) @@ -263,33 +262,33 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -299,42 +298,42 @@ if i32.const 0 i32.const 1136 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -342,235 +341,235 @@ if i32.const 0 i32.const 1136 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1136 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1136 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -580,62 +579,62 @@ if i32.const 0 i32.const 1136 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1136 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -643,82 +642,84 @@ if i32.const 0 i32.const 1136 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -726,112 +727,130 @@ if i32.const 0 i32.const 1136 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1136 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1136 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -843,47 +862,43 @@ if unreachable end - i32.const 9744 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 11312 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 9744 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 9744 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -894,16 +909,16 @@ br $for-loop|0 end end - i32.const 9744 - i32.const 11328 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 9744 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -912,7 +927,7 @@ if i32.const 1184 i32.const 1136 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -929,55 +944,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -985,144 +1000,143 @@ if i32.const 0 i32.const 1136 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1136 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1136 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -1133,60 +1147,69 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1136 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -1197,18 +1220,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1216,62 +1239,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1136 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1136 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2113,128 +2132,122 @@ if i32.const 0 i32.const 1136 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 9744 i32.ge_u if - local.get $1 - local.get $3 + local.get $0 + local.get $2 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/array/ensureSize (param $0 i32) (param $1 i32) (local $2 i32) @@ -2262,8 +2275,8 @@ local.get $0 i32.load local.set $3 - local.get $2 call $~lib/rt/tlsf/maybeInitialize + local.get $2 local.get $3 call $~lib/rt/tlsf/checkUsedBlock local.get $1 @@ -3747,6 +3760,12 @@ unreachable end ) + (func $~lib/rt/tlsf/__free (param $0 i32) + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -3983,10 +4002,8 @@ br $for-loop|2 end end - call $~lib/rt/tlsf/maybeInitialize local.get $5 - call $~lib/rt/tlsf/checkUsedBlock - call $~lib/rt/tlsf/freeBlock + call $~lib/rt/tlsf/__free local.get $0 f32.load offset=4 local.set $4 @@ -4263,10 +4280,8 @@ br $for-loop|2 end end - call $~lib/rt/tlsf/maybeInitialize local.get $5 - call $~lib/rt/tlsf/checkUsedBlock - call $~lib/rt/tlsf/freeBlock + call $~lib/rt/tlsf/__free local.get $0 f64.load offset=8 local.set $4 @@ -4566,10 +4581,8 @@ br $for-loop|2 end end - call $~lib/rt/tlsf/maybeInitialize local.get $5 - call $~lib/rt/tlsf/checkUsedBlock - call $~lib/rt/tlsf/freeBlock + call $~lib/rt/tlsf/__free local.get $0 i32.load offset=4 local.set $1 @@ -7262,10 +7275,8 @@ local.get $0 call $~lib/string/String#substring local.set $0 - call $~lib/rt/tlsf/maybeInitialize local.get $1 - call $~lib/rt/tlsf/checkUsedBlock - call $~lib/rt/tlsf/freeBlock + call $~lib/rt/tlsf/__free end local.get $0 return @@ -9588,6 +9599,8 @@ (local $59 i32) (local $60 i32) (local $61 i32) + i32.const 9744 + global.set $~lib/rt/common/root i32.const 0 call $~lib/array/Array#constructor global.set $std/array/arr @@ -16247,7 +16260,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 67512ffaca..9f1a3462f6 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -20,7 +20,6 @@ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i64_=>_none (func (param i64))) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) @@ -232,9 +231,9 @@ (data (i32.const 9120) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") (table $0 57 funcref) (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~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|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 $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $std/array/arr (mut i32) (i32.const 0)) @@ -271,7 +270,8 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -280,38 +280,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -321,29 +319,29 @@ if i32.const 0 i32.const 128 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -351,21 +349,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -375,119 +373,112 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -497,184 +488,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 128 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 128 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -684,52 +670,52 @@ if i32.const 0 i32.const 128 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 128 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -737,21 +723,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -761,109 +747,100 @@ if i32.const 0 i32.const 128 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -871,7 +848,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -882,24 +859,22 @@ if i32.const 0 i32.const 128 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -907,50 +882,50 @@ if i32.const 0 i32.const 128 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 128 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -961,53 +936,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -1017,26 +989,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -1046,13 +1019,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -1063,84 +1036,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1148,20 +1110,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1172,7 +1130,7 @@ if i32.const 176 i32.const 128 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1192,34 +1150,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1227,16 +1184,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1244,21 +1201,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1268,160 +1225,150 @@ if i32.const 0 i32.const 128 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 128 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - i32.add - local.set $1 - local.get $1 + i32.add + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1430,22 +1377,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1454,27 +1401,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1482,74 +1428,73 @@ if i32.const 0 i32.const 128 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1564,86 +1509,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 128 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 128 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 128 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1652,44 +1604,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 128 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -4047,46 +3997,45 @@ if i32.const 0 i32.const 128 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -4094,106 +4043,101 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 1 drop - local.get $1 - local.get $8 + local.get $0 + local.get $7 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -18943,6 +18887,14 @@ i32.const 8 i32.eq drop + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 i32.const 0 call $~lib/array/Array#constructor @@ -25070,7 +25022,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 7b293d62ad..26552542a5 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -1,13 +1,12 @@ (module (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $none_=>_none (func)) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -22,8 +21,7 @@ (data (i32.const 1296) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") (data (i32.const 1360) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02") (data (i32.const 1392) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00d\00a\00t\00a\00v\00i\00e\00w\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/pure/__release (param $0 i32) @@ -37,33 +35,33 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -73,42 +71,42 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -116,235 +114,235 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1152 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -354,62 +352,62 @@ if i32.const 0 i32.const 1152 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1152 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -417,82 +415,84 @@ if i32.const 0 i32.const 1152 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -500,112 +500,130 @@ if i32.const 0 i32.const 1152 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -617,47 +635,43 @@ if unreachable end - i32.const 1440 - local.tee $0 - i32.const 0 - i32.store - i32.const 3008 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1440 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1440 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -668,66 +682,66 @@ br $for-loop|0 end end - i32.const 1440 - i32.const 3024 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1440 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -735,144 +749,143 @@ if i32.const 0 i32.const 1152 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1152 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1152 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -883,80 +896,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1152 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1200 i32.const 1152 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -967,18 +989,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -986,62 +1008,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1152 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1152 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1582,6 +1600,8 @@ (local $7 i32) (local $8 i32) (local $9 i32) + i32.const 1440 + global.set $~lib/rt/common/root i32.const 8 i32.const 0 call $~lib/rt/tlsf/__alloc @@ -1971,7 +1991,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index 5491c52dc2..33ba88a506 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -1,14 +1,13 @@ (module (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -24,9 +23,9 @@ (data (i32.const 352) "\08\00\00\00\01\00\00\00\00\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00") (data (i32.const 384) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00d\00a\00t\00a\00v\00i\00e\00w\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) @@ -44,7 +43,8 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -53,38 +53,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -94,29 +92,29 @@ if i32.const 0 i32.const 144 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -124,21 +122,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -148,119 +146,112 @@ if i32.const 0 i32.const 144 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -270,184 +261,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 144 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -457,52 +443,52 @@ if i32.const 0 i32.const 144 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 144 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -510,21 +496,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -534,109 +520,100 @@ if i32.const 0 i32.const 144 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 - local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.get $8 + local.set $2 + local.get $9 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -644,7 +621,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -655,24 +632,22 @@ if i32.const 0 i32.const 144 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -680,50 +655,50 @@ if i32.const 0 i32.const 144 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -734,53 +709,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -790,26 +762,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -819,13 +792,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -836,84 +809,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -921,20 +883,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -945,7 +903,7 @@ if i32.const 192 i32.const 144 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -965,34 +923,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1000,16 +957,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1017,21 +974,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1041,160 +998,150 @@ if i32.const 0 i32.const 144 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 - i32.const 0 - local.set $7 - local.get $6 + local.set $4 + i32.const 0 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 144 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1203,22 +1150,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1227,27 +1174,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1255,74 +1201,73 @@ if i32.const 0 i32.const 144 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1337,86 +1282,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 144 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1425,44 +1377,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -3695,6 +3645,14 @@ (local $3 i32) (local $4 i32) (local $5 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 i32.const 8 call $~lib/arraybuffer/ArrayBuffer#constructor @@ -4062,22 +4020,21 @@ (func $~start call $start:std/arraybuffer ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -4136,7 +4093,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index 0dc4eb871c..a613dfee00 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -1,7 +1,7 @@ (module - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) @@ -11,7 +11,6 @@ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_f32_i32_=>_none (func (param i32 f32 i32))) (type $i32_f64_i32_=>_none (func (param i32 f64 i32))) - (type $none_=>_i32 (func (result i32))) (type $i64_=>_i64 (func (param i64) (result i64))) (type $i32_i32_i32_=>_f32 (func (param i32 i32 i32) (result f32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) @@ -30,8 +29,7 @@ (data (i32.const 1360) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00~\00l\00i\00b\00/\00t\00y\00p\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") (data (i32.const 1424) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00d\00a\00t\00a\00v\00i\00e\00w\00.\00t\00s") (data (i32.const 1472) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00s\00t\00d\00/\00d\00a\00t\00a\00v\00i\00e\00w\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/pure/__release (param $0 i32) @@ -45,33 +43,33 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -81,42 +79,42 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -124,235 +122,235 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1152 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -362,62 +360,62 @@ if i32.const 0 i32.const 1152 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1152 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -425,82 +423,84 @@ if i32.const 0 i32.const 1152 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -508,112 +508,130 @@ if i32.const 0 i32.const 1152 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -625,47 +643,43 @@ if unreachable end - i32.const 1520 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 3088 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1520 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1520 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -676,66 +690,66 @@ br $for-loop|0 end end - i32.const 1520 - i32.const 3104 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1520 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -743,144 +757,143 @@ if i32.const 0 i32.const 1152 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1152 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1152 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -891,80 +904,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1152 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1200 i32.const 1152 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -975,18 +997,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -994,62 +1016,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1152 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1152 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1832,6 +1850,8 @@ (local $1 i32) (local $2 i32) (local $3 i32) + i32.const 1520 + global.set $~lib/rt/common/root i32.const 12 i32.const 3 call $~lib/rt/tlsf/__alloc @@ -3493,7 +3513,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/std/dataview.untouched.wat b/tests/compiler/std/dataview.untouched.wat index e7910f81cf..c054f6df3e 100644 --- a/tests/compiler/std/dataview.untouched.wat +++ b/tests/compiler/std/dataview.untouched.wat @@ -1,19 +1,18 @@ (module - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i64_i32_=>_none (func (param i32 i32 i64 i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_i64 (func (param i32 i32 i32) (result i64))) (type $i64_=>_i64 (func (param i64) (result i64))) (type $i32_i32_f32_i32_=>_none (func (param i32 i32 f32 i32))) (type $i32_i32_f64_i32_=>_none (func (param i32 i32 f64 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_=>_f32 (func (param i32 i32 i32) (result f32))) (type $i32_i32_i32_=>_f64 (func (param i32 i32 i32) (result f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -32,9 +31,9 @@ (data (i32.const 416) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00d\00a\00t\00a\00v\00i\00e\00w\00.\00t\00s\00") (data (i32.const 464) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00s\00t\00d\00/\00d\00a\00t\00a\00v\00i\00e\00w\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) @@ -52,7 +51,8 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -61,38 +61,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -102,29 +100,29 @@ if i32.const 0 i32.const 144 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -132,21 +130,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -156,119 +154,112 @@ if i32.const 0 i32.const 144 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -278,184 +269,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 144 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -465,52 +451,52 @@ if i32.const 0 i32.const 144 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 144 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -518,21 +504,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -542,109 +528,100 @@ if i32.const 0 i32.const 144 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -652,7 +629,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -663,24 +640,22 @@ if i32.const 0 i32.const 144 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -688,50 +663,50 @@ if i32.const 0 i32.const 144 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -742,53 +717,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -798,26 +770,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -827,13 +800,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -844,84 +817,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -929,20 +891,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -953,7 +911,7 @@ if i32.const 192 i32.const 144 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -973,34 +931,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1008,16 +965,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1025,21 +982,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1049,160 +1006,150 @@ if i32.const 0 i32.const 144 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 144 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1211,22 +1158,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1235,27 +1182,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1263,74 +1209,73 @@ if i32.const 0 i32.const 144 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1345,86 +1290,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 144 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1433,44 +1385,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2809,6 +2759,14 @@ (local $0 i32) (local $1 i32) (local $2 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 i32.const 8 call $~lib/typedarray/Uint8Array#constructor @@ -4537,22 +4495,21 @@ (func $~start call $start:std/dataview ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -4611,7 +4568,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index fb5b50733e..2fda9fed13 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -1,12 +1,11 @@ (module (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) - (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32))) (type $i32_f32_=>_i32 (func (param i32 f32) (result i32))) @@ -18,6 +17,7 @@ (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_f32_=>_none (func (param i32 f32))) (type $i32_f64_=>_none (func (param i32 f64))) + (type $none_=>_i32 (func (result i32))) (type $i32_i64_i64_=>_i32 (func (param i32 i64 i64) (result i32))) (type $i32_f32_f32_=>_i32 (func (param i32 f32 f32) (result i32))) (type $i32_f64_f64_=>_i32 (func (param i32 f64 f64) (result i32))) @@ -40,8 +40,7 @@ (data (i32.const 1408) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s") (data (i32.const 1456) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") (data (i32.const 1504) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/pure/__release (param $0 i32) @@ -55,33 +54,33 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -91,42 +90,42 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -134,235 +133,235 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1152 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -372,62 +371,62 @@ if i32.const 0 i32.const 1152 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1152 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -435,82 +434,84 @@ if i32.const 0 i32.const 1152 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -518,112 +519,130 @@ if i32.const 0 i32.const 1152 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -635,47 +654,43 @@ if unreachable end - i32.const 1568 - local.tee $0 - i32.const 0 - i32.store - i32.const 3136 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1568 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1568 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -686,16 +701,16 @@ br $for-loop|0 end end - i32.const 1568 - i32.const 3152 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1568 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -704,7 +719,7 @@ if i32.const 1200 i32.const 1152 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -721,55 +736,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -777,144 +792,143 @@ if i32.const 0 i32.const 1152 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1152 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1152 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -925,60 +939,69 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1152 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -989,18 +1012,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1008,62 +1031,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1152 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1152 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1826,127 +1845,120 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 1556 i32.ge_u if - local.get $1 - local.get $3 + local.get $0 + local.get $2 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/array/ensureSize (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) local.get $1 local.get $0 i32.load offset=8 @@ -2005,7 +2017,7 @@ if i32.const 0 i32.const 1152 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -13029,6 +13041,8 @@ call $~lib/rt/pure/__release ) (func $~start + i32.const 1568 + global.set $~lib/rt/common/root call $std/map/testNumeric call $std/map/testNumeric call $std/map/testNumeric @@ -13112,7 +13126,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/map.untouched.wat b/tests/compiler/std/map.untouched.wat index 1131cad73a..78f01f0821 100644 --- a/tests/compiler/std/map.untouched.wat +++ b/tests/compiler/std/map.untouched.wat @@ -20,7 +20,6 @@ (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_f32_f32_=>_i32 (func (param i32 f32 f32) (result i32))) (type $i32_f64_f64_=>_i32 (func (param i32 f64 f64) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) @@ -42,9 +41,9 @@ (data (i32.const 448) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") (data (i32.const 496) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 548)) @@ -61,7 +60,8 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -70,38 +70,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -111,29 +109,29 @@ if i32.const 0 i32.const 144 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -141,21 +139,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -165,119 +163,112 @@ if i32.const 0 i32.const 144 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -287,184 +278,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 144 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -474,52 +460,52 @@ if i32.const 0 i32.const 144 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 144 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -527,21 +513,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -551,109 +537,100 @@ if i32.const 0 i32.const 144 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -661,7 +638,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -672,24 +649,22 @@ if i32.const 0 i32.const 144 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -697,50 +672,50 @@ if i32.const 0 i32.const 144 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -751,53 +726,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -807,26 +779,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -836,13 +809,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -853,84 +826,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -938,20 +900,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -962,7 +920,7 @@ if i32.const 192 i32.const 144 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -982,34 +940,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1017,16 +974,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1034,21 +991,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1058,160 +1015,150 @@ if i32.const 0 i32.const 144 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 144 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 - i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + i32.sub + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1220,22 +1167,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1244,27 +1191,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1272,74 +1218,73 @@ if i32.const 0 i32.const 144 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1354,86 +1299,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 144 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1442,44 +1394,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2410,7 +2360,7 @@ if i32.const 0 i32.const 144 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -3673,39 +3623,38 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -3713,106 +3662,101 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 1 drop - local.get $1 - local.get $8 + local.get $0 + local.get $7 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -21032,6 +20976,14 @@ call $~lib/rt/pure/__release ) (func $start:std/map + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $std/map/testNumeric call $std/map/testNumeric call $std/map/testNumeric @@ -21102,7 +21054,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index d466d43d4e..098b2e6181 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -3,8 +3,8 @@ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $none_=>_none (func)) - (type $none_=>_i32 (func (result i32))) (type $i32_=>_none (func (param i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) @@ -37,8 +37,7 @@ (data (i32.const 1296) "\14\00\00\00\01\00\00\00\01\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s") (data (i32.const 1344) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") (data (i32.const 1392) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/pure/__release (param $0 i32) @@ -52,33 +51,33 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -88,42 +87,42 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -131,235 +130,235 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1152 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -369,62 +368,62 @@ if i32.const 0 i32.const 1152 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1152 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -432,82 +431,84 @@ if i32.const 0 i32.const 1152 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -515,112 +516,130 @@ if i32.const 0 i32.const 1152 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -632,47 +651,43 @@ if unreachable end - i32.const 1456 - local.tee $0 - i32.const 0 - i32.store - i32.const 3024 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1456 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1456 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -683,16 +698,16 @@ br $for-loop|0 end end - i32.const 1456 - i32.const 3040 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1456 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -701,7 +716,7 @@ if i32.const 1200 i32.const 1152 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -718,55 +733,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -774,144 +789,143 @@ if i32.const 0 i32.const 1152 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1152 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1152 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -922,60 +936,69 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1152 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -986,18 +1009,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1005,62 +1028,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1152 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1152 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1817,127 +1836,120 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 1444 i32.ge_u if - local.get $1 - local.get $3 + local.get $0 + local.get $2 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/array/ensureSize (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) local.get $1 local.get $0 i32.load offset=8 @@ -1996,7 +2008,7 @@ if i32.const 0 i32.const 1152 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -9363,6 +9375,8 @@ call $~lib/rt/pure/__release ) (func $~start + i32.const 1456 + global.set $~lib/rt/common/root call $std/set/testNumeric call $std/set/testNumeric call $std/set/testNumeric @@ -9446,7 +9460,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index 20a7bc6553..e10b17761b 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -1,7 +1,7 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_none (func)) @@ -17,7 +17,6 @@ (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32))) (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) @@ -37,9 +36,9 @@ (data (i32.const 336) "\1a\00\00\00\01\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") (data (i32.const 384) "$\00\00\00\01\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 436)) @@ -56,7 +55,8 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -65,38 +65,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -106,29 +104,29 @@ if i32.const 0 i32.const 144 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -136,21 +134,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -160,119 +158,112 @@ if i32.const 0 i32.const 144 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -282,184 +273,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 144 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -469,52 +455,52 @@ if i32.const 0 i32.const 144 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 144 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -522,21 +508,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -546,109 +532,100 @@ if i32.const 0 i32.const 144 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -656,7 +633,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -667,24 +644,22 @@ if i32.const 0 i32.const 144 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -692,50 +667,50 @@ if i32.const 0 i32.const 144 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -746,53 +721,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -802,26 +774,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -831,13 +804,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -848,84 +821,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -933,20 +895,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -957,7 +915,7 @@ if i32.const 192 i32.const 144 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -977,34 +935,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1012,16 +969,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1029,21 +986,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1053,160 +1010,150 @@ if i32.const 0 i32.const 144 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 144 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl - i32.const 16 - i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + i32.const 16 + i32.sub + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1215,22 +1162,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1239,27 +1186,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1267,74 +1213,73 @@ if i32.const 0 i32.const 144 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1349,86 +1294,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 144 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1437,44 +1389,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2346,7 +2296,7 @@ if i32.const 0 i32.const 144 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -3609,39 +3559,38 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -3649,106 +3598,101 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 1 drop - local.get $1 - local.get $8 + local.get $0 + local.get $7 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -14571,6 +14515,14 @@ call $~lib/rt/pure/__release ) (func $start:std/set + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $std/set/testNumeric call $std/set/testNumeric call $std/set/testNumeric @@ -14641,7 +14593,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index ec97281e2d..91d47c77c8 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -1,13 +1,13 @@ (module (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $none_=>_none (func)) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -23,8 +23,7 @@ (data (i32.const 1312) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1360) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1424) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $std/staticarray/arr3 (mut i32) (i32.const 0)) (global $std/staticarray/arr4 (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) @@ -75,33 +74,33 @@ local.get $1 i32.store offset=4 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1328 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -111,42 +110,42 @@ if i32.const 0 i32.const 1328 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -154,235 +153,235 @@ if i32.const 0 i32.const 1328 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1328 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1328 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1328 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -392,62 +391,62 @@ if i32.const 0 i32.const 1328 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1328 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -455,82 +454,84 @@ if i32.const 0 i32.const 1328 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -538,112 +539,130 @@ if i32.const 0 i32.const 1328 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1328 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1328 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -655,47 +674,43 @@ if unreachable end - i32.const 1472 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 3040 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1472 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1472 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -706,66 +721,66 @@ br $for-loop|0 end end - i32.const 1472 - i32.const 3056 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1472 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -773,144 +788,143 @@ if i32.const 0 i32.const 1328 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1328 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1328 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -921,80 +935,89 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1328 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 1073741808 i32.ge_u if i32.const 1376 i32.const 1328 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 i32.const 15 i32.add i32.const -16 i32.and - local.tee $3 + local.tee $2 i32.const 16 - local.get $3 + local.get $2 i32.const 16 i32.gt_u select - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -1005,18 +1028,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1024,62 +1047,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1328 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1328 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1429,6 +1448,8 @@ call $~lib/builtins/abort unreachable end + i32.const 1472 + global.set $~lib/rt/common/root call $std/staticarray/test global.set $std/staticarray/arr3 global.get $std/staticarray/arr3 @@ -1660,7 +1681,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/std/staticarray.untouched.wat b/tests/compiler/std/staticarray.untouched.wat index 69b4f3f24b..56efee0610 100644 --- a/tests/compiler/std/staticarray.untouched.wat +++ b/tests/compiler/std/staticarray.untouched.wat @@ -1,13 +1,13 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -26,9 +26,9 @@ (table $0 1 funcref) (global $std/staticarray/arr1 i32 (i32.const 32)) (global $std/staticarray/arr2 i32 (i32.const 256)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $std/staticarray/arr3 (mut i32) (i32.const 0)) @@ -104,7 +104,8 @@ local.get $2 call $~lib/staticarray/StaticArray#__uset ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -113,38 +114,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 320 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -154,29 +153,29 @@ if i32.const 0 i32.const 320 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -184,21 +183,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -208,119 +207,112 @@ if i32.const 0 i32.const 320 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -330,184 +322,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 320 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 320 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 320 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -517,52 +504,52 @@ if i32.const 0 i32.const 320 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 320 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -570,21 +557,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -594,109 +581,100 @@ if i32.const 0 i32.const 320 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -704,7 +682,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -715,24 +693,22 @@ if i32.const 0 i32.const 320 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -740,50 +716,50 @@ if i32.const 0 i32.const 320 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 320 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -794,53 +770,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -850,26 +823,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -879,13 +853,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -896,84 +870,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -981,20 +944,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1005,7 +964,7 @@ if i32.const 368 i32.const 320 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1025,34 +984,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1060,16 +1018,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1077,21 +1035,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1101,160 +1059,150 @@ if i32.const 0 i32.const 320 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 320 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1263,22 +1211,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1287,27 +1235,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1315,74 +1262,73 @@ if i32.const 0 i32.const 320 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1397,86 +1343,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 320 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 320 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 320 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1485,44 +1438,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 320 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2992,6 +2943,14 @@ call $~lib/builtins/abort unreachable end + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $std/staticarray/test global.set $std/staticarray/arr3 global.get $std/staticarray/arr3 @@ -3147,22 +3106,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -3221,7 +3179,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index 25640a67c8..85c432d55f 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -1,14 +1,13 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) - (type $none_=>_i32 (func (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -300,8 +299,7 @@ (data (i32.const 18416) "@\00\00\00\01\00\00\00\01\00\00\00@\00\00\00o\00r\00i\00g\00U\00p\00p\00e\00r\00C\00o\00d\00e\00 \00!\00=\00 \00e\00x\00p\00e\00c\00t\00U\00p\00p\00e\00r\00C\00o\00d\00e") (data (i32.const 18496) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00 \00o\00r\00i\00g\00U\00p\00p\00e\00r\00C\00o\00d\00e\00 \00=\00 ") (data (i32.const 18560) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00 \00e\00x\00p\00e\00c\00t\00U\00p\00p\00e\00r\00C\00o\00d\00e\00 \00=\00 ") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) (export "_start" (func $~start)) (export "memory" (memory $0)) @@ -364,33 +362,33 @@ end local.get $0 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1104 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -400,42 +398,42 @@ if i32.const 0 i32.const 1104 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -443,235 +441,235 @@ if i32.const 0 i32.const 1104 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1104 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1104 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1104 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -681,62 +679,62 @@ if i32.const 0 i32.const 1104 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1104 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -744,82 +742,84 @@ if i32.const 0 i32.const 1104 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -827,112 +827,130 @@ if i32.const 0 i32.const 1104 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1104 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1104 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -944,47 +962,43 @@ if unreachable end - i32.const 18624 - local.tee $0 - i32.const 0 - i32.store - i32.const 20192 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 18624 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 18624 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -995,16 +1009,16 @@ br $for-loop|0 end end - i32.const 18624 - i32.const 20208 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 18624 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -1013,7 +1027,7 @@ if i32.const 1152 i32.const 1104 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1030,55 +1044,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -1086,144 +1100,143 @@ if i32.const 0 i32.const 1104 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1104 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1104 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -1234,60 +1247,69 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1104 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -1298,18 +1320,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1317,62 +1339,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1104 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1104 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1706,125 +1724,118 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 18616 i32.ge_u if - local.get $1 - local.get $3 + local.get $0 + local.get $2 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - (local $3 i32) call $~lib/rt/tlsf/maybeInitialize local.get $0 i32.const 16 @@ -1859,7 +1870,7 @@ if i32.const 0 i32.const 1104 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -3238,6 +3249,8 @@ (local $96 i32) (local $97 i32) (local $98 i32) + i32.const 18624 + global.set $~lib/rt/common/root i32.const 1040 call $~lib/string/String#toUpperCase local.tee $13 @@ -4892,7 +4905,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/string-casemapping.untouched.wat b/tests/compiler/std/string-casemapping.untouched.wat index 41c7e6ce04..894de2c978 100644 --- a/tests/compiler/std/string-casemapping.untouched.wat +++ b/tests/compiler/std/string-casemapping.untouched.wat @@ -1,16 +1,14 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_=>_none (func (param i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i64_=>_i32 (func (param i64) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i64_=>_i32 (func (param i64) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) @@ -193,9 +191,9 @@ (data (i32.const 18144) "\"\00\00\00\01\00\00\00\01\00\00\00\"\00\00\00 \00o\00r\00i\00g\00U\00p\00p\00e\00r\00C\00o\00d\00e\00 \00=\00 \00") (data (i32.const 18208) "&\00\00\00\01\00\00\00\01\00\00\00&\00\00\00 \00e\00x\00p\00e\00c\00t\00U\00p\00p\00e\00r\00C\00o\00d\00e\00 \00=\00 \00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/util/casemap/SPECIALS_UPPER i32 (i32.const 208)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) @@ -277,7 +275,8 @@ end local.get $0 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -286,38 +285,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 96 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -327,29 +324,29 @@ if i32.const 0 i32.const 96 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -357,21 +354,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -381,119 +378,112 @@ if i32.const 0 i32.const 96 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -503,184 +493,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 96 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 96 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 96 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -690,52 +675,52 @@ if i32.const 0 i32.const 96 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 96 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -743,21 +728,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -767,109 +752,100 @@ if i32.const 0 i32.const 96 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -877,7 +853,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -888,24 +864,22 @@ if i32.const 0 i32.const 96 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -913,50 +887,50 @@ if i32.const 0 i32.const 96 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 96 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -967,53 +941,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -1023,26 +994,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -1052,13 +1024,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -1069,84 +1041,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1154,20 +1115,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1178,7 +1135,7 @@ if i32.const 144 i32.const 96 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1198,34 +1155,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1233,16 +1189,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1250,21 +1206,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1274,160 +1230,150 @@ if i32.const 0 i32.const 96 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 96 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl - i32.const 16 - i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + i32.const 16 + i32.sub + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1436,22 +1382,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1460,27 +1406,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1488,74 +1433,73 @@ if i32.const 0 i32.const 96 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1570,86 +1514,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 96 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 96 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 96 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1658,44 +1609,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 96 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -1944,7 +1893,7 @@ if i32.const 0 i32.const 96 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -3207,39 +3156,38 @@ end end ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -3247,106 +3195,101 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 1 drop - local.get $1 - local.get $8 + local.get $0 + local.get $7 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -5313,6 +5256,14 @@ (local $98 i32) (local $99 i32) (local $100 i32) + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 32 call $~lib/string/String#toUpperCase local.tee $0 @@ -6968,7 +6919,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index 0e16ace529..730f69858a 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -1,13 +1,12 @@ (module - (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -31,8 +30,7 @@ (data (i32.const 1536) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00h\00i\00R\d8b\df") (data (i32.const 1568) "*3\00\00\01\00\00\00\01\00\00\00*3\00\00M\00a\00t\00h\00e\00m\00a\00t\00i\00c\00s\00 \00a\00n\00d\00 \00S\00c\00i\00e\00n\00c\00e\00s\00:\00\n\00\n\00.\" \00E\00\c5\"d\00a\00 \00=\00 \00Q\00,\00 \00 \00n\00 \00\92! \00\1e\",\00 \00\11\" \00f\00(\00i\00)\00 \00=\00 \00\0f\" \00g\00(\00i\00)\00,\00 \00\00\"x\00\08\"\1d!:\00 \00\08#x\00\t# \00=\00 \00\12\"\n#\12\"x\00\0b#,\00 \00\b1\03 \00\'\" \00\ac\00\b2\03 \00=\00 \00\ac\00(\00\ac\00\b1\03 \00(\" \00\b2\03)\00,\00\n\00\n\00\15! \00\86\" \00\15!\80 \00\82\" \00$! \00\82\" \00\1a! \00\82\" \00\1d! \00\82\" \00\02!,\00 \00\a5\" \00<\00 \00a\00 \00`\" \00b\00 \00a\" \00c\00 \00d\" \00d\00 \00j\" \00\a4\" \00\d2! \00(\00A\00 \00\d4! \00B\00)\00,\00\n\00\n\002\00H\00\82 \00+\00 \00O\00\82 \00\cc! \002\00H\00\82 O\00,\00 \00R\00 \00=\00 \004\00.\007\00 \00k\00\a9\03,\00 \00\00# \002\000\000\00 \00m\00m\00\n\00\n\00L\00i\00n\00g\00u\00i\00s\00t\00i\00c\00s\00 \00a\00n\00d\00 \00d\00i\00c\00t\00i\00o\00n\00a\00r\00i\00e\00s\00:\00\n\00\n\00\f0\00i\00 \001\01n\00t\00Y\02\c8\02n\00\e6\00\83\02Y\02n\00Y\02l\00 \00f\00Y\02\c8\02n\00[\02t\001\01k\00 \00Y\02s\00o\00\8a\02s\00i\00\c8\02e\001\01\83\02n\00\n\00Y\00 \00[\00\c8\02\8f\02p\00s\00i\00l\00T\02n\00]\00,\00 \00Y\00e\00n\00 \00[\00j\00[\02n\00]\00,\00 \00Y\00o\00g\00a\00 \00[\00\c8\02j\00o\00\d0\02g\00Q\02]\00\n\00\n\00A\00P\00L\00:\00\n\00\n\00(\00(\00V\00s#V\00)\00=\00s#t#V\00)\00/\00V\00\90!,\00V\00 \00 \00 \00 \007#\90!s#\92!t#\06\"\07\"\83\"> N#U#\08#\n\00\n\00N\00i\00c\00e\00r\00 \00t\00y\00p\00o\00g\00r\00a\00p\00h\00y\00 \00i\00n\00 \00p\00l\00a\00i\00n\00 \00t\00e\00x\00t\00 \00f\00i\00l\00e\00s\00:\00\n\00\n\00T%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%W%\n\00Q% \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 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00\" \00\18 s\00i\00n\00g\00l\00e\00\19 \00a\00n\00d\00 \00\1c d\00o\00u\00b\00l\00e\00\1d \00q\00u\00o\00t\00e\00s\00 \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \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 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00\" \00C\00u\00r\00l\00y\00 \00a\00p\00o\00s\00t\00r\00o\00p\00h\00e\00s\00:\00 \00\1c W\00e\00\19 v\00e\00 \00b\00e\00e\00n\00 \00h\00e\00r\00e\00\1d \00Q%\n\00Q% \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 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00\" \00L\00a\00t\00i\00n\00-\001\00 \00a\00p\00o\00s\00t\00r\00o\00p\00h\00e\00 \00a\00n\00d\00 \00a\00c\00c\00e\00n\00t\00s\00:\00 \00\'\00\b4\00`\00 \00 \00Q%\n\00Q% \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 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00\" \00\1a d\00e\00u\00t\00s\00c\00h\00e\00\18 \00\1e A\00n\00f\00\fc\00h\00r\00u\00n\00g\00s\00z\00e\00i\00c\00h\00e\00n\00\1c \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \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 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00\" \00 ,\00 \00! ,\00 \000 ,\00 \00\" ,\00 \003\00\13 4\00,\00 \00\14 ,\00 \00\12\"5\00/\00+\005\00,\00 \00\"!,\00 \00& \00 \00 \00 \00 \00 \00Q%\n\00Q% \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 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00\" \00A\00S\00C\00I\00I\00 \00s\00a\00f\00e\00t\00y\00 \00t\00e\00s\00t\00:\00 \001\00l\00I\00|\00,\00 \000\00O\00D\00,\00 \008\00B\00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00m%\00%\00%\00%\00%\00%\00%\00%\00%\00%n% \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00\" \00t\00h\00e\00 \00e\00u\00r\00o\00 \00s\00y\00m\00b\00o\00l\00:\00 \00\02% \001\004\00.\009\005\00 \00\ac \00\02% \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Q% \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00p%\00%\00%\00%\00%\00%\00%\00%\00%\00%o% \00 \00 \00 \00 \00 \00 \00 \00 \00Q%\n\00Z%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%]%\n\00\n\00G\00r\00e\00e\00k\00 \00(\00i\00n\00 \00P\00o\00l\00y\00t\00o\00n\00i\00c\00)\00:\00\n\00\n\00T\00h\00e\00 \00G\00r\00e\00e\00k\00 \00a\00n\00t\00h\00e\00m\00:\00\n\00\n\00\a3\03r\1f \00\b3\03\bd\03\c9\03\c1\03w\1f\b6\03\c9\03 \00\00\1f\c0\03x\1f \00\c4\03t\1f\bd\03 \00\ba\03y\1f\c8\03\b7\03\n\00\c4\03\bf\03\e6\1f \00\c3\03\c0\03\b1\03\b8\03\b9\03\bf\03\e6\1f \00\c4\03t\1f\bd\03 \00\c4\03\c1\03\bf\03\bc\03\b5\03\c1\03u\1f,\00\n\00\c3\03r\1f \00\b3\03\bd\03\c9\03\c1\03w\1f\b6\03\c9\03 \00\00\1f\c0\03x\1f \00\c4\03t\1f\bd\03 \00D\1f\c8\03\b7\03\n\00\c0\03\bf\03z\1f \00\bc\03r\1f \00\b2\03w\1f\b1\03 \00\bc\03\b5\03\c4\03\c1\03q\1f\b5\03\b9\03 \00\c4\03t\1f \00\b3\03\c6\1f.\00\n\00\n\00\bf\1f\91\03\c0\03\bf\1f \00\c4\03p\1f \00\ba\03y\1f\ba\03\ba\03\b1\03\bb\03\b1\03 \00\b2\03\b3\03\b1\03\bb\03\bc\03s\1f\bd\03\b7\03\n\00\c4\03\f6\1f\bd\03 \00\fe\1f\95\03\bb\03\bb\03u\1f\bd\03\c9\03\bd\03 \00\c4\03p\1f \001\1f\b5\03\c1\03q\1f\n\00\ba\03\b1\03v\1f \00\c3\03p\1f\bd\03 \00\c0\03\c1\03\f6\1f\c4\03\b1\03 \00\00\1f\bd\03\b4\03\c1\03\b5\03\b9\03\c9\03\bc\03s\1f\bd\03\b7\03\n\00\c7\03\b1\03\d6\1f\c1\03\b5\03,\00 \00f\1f \00\c7\03\b1\03\d6\1f\c1\03\b5\03,\00 \00\bf\1f\95\03\bb\03\b5\03\c5\03\b8\03\b5\03\c1\03\b9\03q\1f!\00\n\00\n\00F\00r\00o\00m\00 \00a\00 \00s\00p\00e\00e\00c\00h\00 \00o\00f\00 \00D\00e\00m\00o\00s\00t\00h\00e\00n\00e\00s\00 \00i\00n\00 \00t\00h\00e\00 \004\00t\00h\00 \00c\00e\00n\00t\00u\00r\00y\00 \00B\00C\00:\00\n\00\n\00\9f\03P\1f\c7\03v\1f \00\c4\03\b1\03P\1f\c4\03p\1f \00\c0\03\b1\03\c1\03w\1f\c3\03\c4\03\b1\03\c4\03\b1\03w\1f \00\bc\03\bf\03\b9\03 \00\b3\03\b9\03\b3\03\bd\03}\1f\c3\03\ba\03\b5\03\b9\03\bd\03,\00 \00f\1f \00\04\1f\bd\03\b4\03\c1\03\b5\03\c2\03 \00\bf\1f\91\03\b8\03\b7\03\bd\03\b1\03\d6\1f\bf\03\b9\03,\00\n\00E\1f\c4\03\b1\03\bd\03 \00\c4\03\bf\1f \00\b5\030\1f\c2\03 \00\c4\03p\1f \00\c0\03\c1\03q\1f\b3\03\bc\03\b1\03\c4\03\b1\03 \00\00\1f\c0\03\bf\03\b2\03\bb\03s\1f\c8\03\c9\03 \00\ba\03\b1\03v\1f \00E\1f\c4\03\b1\03\bd\03 \00\c0\03\c1\03x\1f\c2\03 \00\c4\03\bf\03z\1f\c2\03\n\00\bb\03y\1f\b3\03\bf\03\c5\03\c2\03 \00\bf\03S\1f\c2\03 \00\00\1f\ba\03\bf\03{\1f\c9\03\87\03 \00\c4\03\bf\03z\1f\c2\03 \00\bc\03r\1f\bd\03 \00\b3\03p\1f\c1\03 \00\bb\03y\1f\b3\03\bf\03\c5\03\c2\03 \00\c0\03\b5\03\c1\03v\1f \00\c4\03\bf\03\e6\1f\n\00\c4\03\b9\03\bc\03\c9\03\c1\03u\1f\c3\03\b1\03\c3\03\b8\03\b1\03\b9\03 \00\a6\03w\1f\bb\03\b9\03\c0\03\c0\03\bf\03\bd\03 \00A\1f\c1\03\f6\1f \00\b3\03\b9\03\b3\03\bd\03\bf\03\bc\03s\1f\bd\03\bf\03\c5\03\c2\03,\00 \00\c4\03p\1f \00\b4\03r\1f \00\c0\03\c1\03q\1f\b3\03\bc\03\b1\03\c4\03\bf\1f\n\00\b5\030\1f\c2\03 \00\c4\03\bf\03\e6\1f\c4\03\bf\03 \00\c0\03\c1\03\bf\03u\1f\ba\03\bf\03\bd\03\c4\03\b1\03,\00 \00 \00e\1f\c3\03\b8\03\bf\1f \00E\1f\c0\03\c9\03\c2\03 \00\bc\03t\1f \00\c0\03\b5\03\b9\03\c3\03y\1f\bc\03\b5\03\b8\03\bf\1f \00\b1\03P\1f\c4\03\bf\03v\1f\n\00\c0\03\c1\03y\1f\c4\03\b5\03\c1\03\bf\03\bd\03 \00\ba\03\b1\03\ba\03\f6\1f\c2\03 \00\c3\03\ba\03s\1f\c8\03\b1\03\c3\03\b8\03\b1\03\b9\03 \00\b4\03s\1f\bf\03\bd\03.\00 \00\bf\03P\1f\b4\03s\1f\bd\03 \00\bf\03V\1f\bd\03 \00\04\1f\bb\03\bb\03\bf\03 \00\bc\03\bf\03\b9\03 \00\b4\03\bf\03\ba\03\bf\03\e6\1f\c3\03\b9\03\bd\03\n\00\bf\031\1f \00\c4\03p\1f \00\c4\03\bf\03\b9\03\b1\03\e6\1f\c4\03\b1\03 \00\bb\03s\1f\b3\03\bf\03\bd\03\c4\03\b5\03\c2\03 \00\"\1f \00\c4\03t\1f\bd\03 \00Q\1f\c0\03y\1f\b8\03\b5\03\c3\03\b9\03\bd\03,\00 \00\c0\03\b5\03\c1\03v\1f \00\'\1f\c2\03 \00\b2\03\bf\03\c5\03\bb\03\b5\03{\1f\b5\03\c3\03\b8\03\b1\03\b9\03,\00\n\00\bf\03P\1f\c7\03v\1f \00\c4\03t\1f\bd\03 \00\bf\03V\1f\c3\03\b1\03\bd\03 \00\c0\03\b1\03\c1\03\b9\03\c3\03\c4\03q\1f\bd\03\c4\03\b5\03\c2\03 \00Q\1f\bc\03\d6\1f\bd\03 \00\01\1f\bc\03\b1\03\c1\03\c4\03q\1f\bd\03\b5\03\b9\03\bd\03.\00 \00\10\1f\b3\03|\1f \00\b4\03s\1f,\00 \00E\1f\c4\03\b9\03 \00\bc\03s\1f\bd\03\n\00\c0\03\bf\03\c4\03\bf\1f \00\10\1f\be\03\c6\1f\bd\03 \00\c4\03\c7\1f \00\c0\03y\1f\bb\03\b5\03\b9\03 \00\ba\03\b1\03v\1f \00\c4\03p\1f \00\b1\03Q\1f\c4\03\c6\1f\c2\03 \00\14\1f\c7\03\b5\03\b9\03\bd\03 \00\00\1f\c3\03\c6\03\b1\03\bb\03\f6\1f\c2\03 \00\ba\03\b1\03v\1f \00\a6\03w\1f\bb\03\b9\03\c0\03\c0\03\bf\03\bd\03\n\00\c4\03\b9\03\bc\03\c9\03\c1\03u\1f\c3\03\b1\03\c3\03\b8\03\b1\03\b9\03,\00 \00\ba\03\b1\03v\1f \00\bc\03q\1f\bb\03\bf\1f \00\00\1f\ba\03\c1\03\b9\03\b2\03\f6\1f\c2\03 \00\bf\036\1f\b4\03\b1\03\87\03 \00\10\1f\c0\03\bf\1f \00\10\1f\bc\03\bf\03\e6\1f \00\b3\03q\1f\c1\03,\00 \00\bf\03P\1f \00\c0\03q\1f\bb\03\b1\03\b9\03\n\00\b3\03s\1f\b3\03\bf\03\bd\03\b5\03\bd\03 \00\c4\03\b1\03\e6\1f\c4\03\bf\1f \00\00\1f\bc\03\c6\03y\1f\c4\03\b5\03\c1\03\b1\03\87\03 \00\bd\03\e6\1f\bd\03 \00\bc\03s\1f\bd\03\c4\03\bf\03\b9\03 \00\c0\03s\1f\c0\03\b5\03\b9\03\c3\03\bc\03\b1\03\b9\03 \00\c4\03\bf\03\e6\1f\b8\03\bf\1f \001\1f\ba\03\b1\03\bd\03x\1f\bd\03\n\00\c0\03\c1\03\bf\03\bb\03\b1\03\b2\03\b5\03\d6\1f\bd\03 \00!\1f\bc\03\d6\1f\bd\03 \00\b5\036\1f\bd\03\b1\03\b9\03 \00\c4\03t\1f\bd\03 \00\c0\03\c1\03}\1f\c4\03\b7\03\bd\03,\00 \00E\1f\c0\03\c9\03\c2\03 \00\c4\03\bf\03z\1f\c2\03 \00\c3\03\c5\03\bc\03\bc\03q\1f\c7\03\bf\03\c5\03\c2\03\n\00\c3\03}\1f\c3\03\bf\03\bc\03\b5\03\bd\03.\00 \00\10\1fp\1f\bd\03 \00\b3\03p\1f\c1\03 \00\c4\03\bf\03\e6\1f\c4\03\bf\03 \00\b2\03\b5\03\b2\03\b1\03w\1f\c9\03\c2\03 \00Q\1f\c0\03q\1f\c1\03\be\03\c3\1f,\00 \00\c4\03y\1f\c4\03\b5\03 \00\ba\03\b1\03v\1f \00\c0\03\b5\03\c1\03v\1f \00\c4\03\bf\03\e6\1f\n\00\c4\03w\1f\bd\03\b1\03 \00\c4\03\b9\03\bc\03\c9\03\c1\03u\1f\c3\03\b5\03\c4\03\b1\03w\1f \00\c4\03\b9\03\c2\03 \00\ba\03\b1\03v\1f \00C\1f\bd\03 \00\c4\03\c1\03y\1f\c0\03\bf\03\bd\03 \00\10\1f\be\03s\1f\c3\03\c4\03\b1\03\b9\03 \00\c3\03\ba\03\bf\03\c0\03\b5\03\d6\1f\bd\03\87\03 \00\c0\03\c1\03v\1f\bd\03 \00\b4\03r\1f\n\00\c4\03t\1f\bd\03 \00\00\1f\c1\03\c7\03t\1f\bd\03 \00@\1f\c1\03\b8\03\f6\1f\c2\03 \00Q\1f\c0\03\bf\03\b8\03s\1f\c3\03\b8\03\b1\03\b9\03,\00 \00\bc\03q\1f\c4\03\b1\03\b9\03\bf\03\bd\03 \00!\1f\b3\03\bf\03\e6\1f\bc\03\b1\03\b9\03 \00\c0\03\b5\03\c1\03v\1f \00\c4\03\c6\1f\c2\03\n\00\c4\03\b5\03\bb\03\b5\03\c5\03\c4\03\c6\1f\c2\03 \00A\1f\bd\03\c4\03\b9\03\bd\03\bf\03\e6\1f\bd\03 \00\c0\03\bf\03\b9\03\b5\03\d6\1f\c3\03\b8\03\b1\03\b9\03 \00\bb\03y\1f\b3\03\bf\03\bd\03.\00\n\00\n\00\94\03\b7\03\bc\03\bf\03\c3\03\b8\03s\1f\bd\03\bf\03\c5\03\c2\03,\00 \00\93\03\fd\1f \00\bf\1f\9f\03\bb\03\c5\03\bd\03\b8\03\b9\03\b1\03\ba\03x\1f\c2\03\n\00\n\00G\00e\00o\00r\00g\00i\00a\00n\00:\00\n\00\n\00F\00r\00o\00m\00 \00a\00 \00U\00n\00i\00c\00o\00d\00e\00 \00c\00o\00n\00f\00e\00r\00e\00n\00c\00e\00 \00i\00n\00v\00i\00t\00a\00t\00i\00o\00n\00:\00\n\00\n\00\d2\10\d7\10\ee\10\dd\10\d5\10\d7\10 \00\d0\10\ee\10\da\10\d0\10\d5\10\d4\10 \00\d2\10\d0\10\d8\10\d0\10\e0\10\dd\10\d7\10 \00\e0\10\d4\10\d2\10\d8\10\e1\10\e2\10\e0\10\d0\10\ea\10\d8\10\d0\10 \00U\00n\00i\00c\00o\00d\00e\00-\00\d8\10\e1\10 \00\db\10\d4\10\d0\10\d7\10\d4\10 \00\e1\10\d0\10\d4\10\e0\10\d7\10\d0\10\e8\10\dd\10\e0\10\d8\10\e1\10\dd\10\n\00\d9\10\dd\10\dc\10\e4\10\d4\10\e0\10\d4\10\dc\10\ea\10\d8\10\d0\10\d6\10\d4\10 \00\d3\10\d0\10\e1\10\d0\10\e1\10\ec\10\e0\10\d4\10\d1\10\d0\10\d3\10,\00 \00\e0\10\dd\10\db\10\d4\10\da\10\d8\10\ea\10 \00\d2\10\d0\10\d8\10\db\10\d0\10\e0\10\d7\10\d4\10\d1\10\d0\10 \001\000\00-\001\002\00 \00\db\10\d0\10\e0\10\e2\10\e1\10,\00\n\00\e5\10.\00 \00\db\10\d0\10\d8\10\dc\10\ea\10\e8\10\d8\10,\00 \00\d2\10\d4\10\e0\10\db\10\d0\10\dc\10\d8\10\d0\10\e8\10\d8\10.\00 \00\d9\10\dd\10\dc\10\e4\10\d4\10\e0\10\d4\10\dc\10\ea\10\d8\10\d0\10 \00\e8\10\d4\10\f0\10\d9\10\e0\10\d4\10\d1\10\e1\10 \00\d4\10\e0\10\d7\10\d0\10\d3\10 \00\db\10\e1\10\dd\10\e4\10\da\10\d8\10\dd\10\e1\10\n\00\d4\10\e5\10\e1\10\de\10\d4\10\e0\10\e2\10\d4\10\d1\10\e1\10 \00\d8\10\e1\10\d4\10\d7\10 \00\d3\10\d0\10\e0\10\d2\10\d4\10\d1\10\e8\10\d8\10 \00\e0\10\dd\10\d2\10\dd\10\e0\10\d8\10\ea\10\d0\10\d0\10 \00\d8\10\dc\10\e2\10\d4\10\e0\10\dc\10\d4\10\e2\10\d8\10 \00\d3\10\d0\10 \00U\00n\00i\00c\00o\00d\00e\00-\00\d8\10,\00\n\00\d8\10\dc\10\e2\10\d4\10\e0\10\dc\10\d0\10\ea\10\d8\10\dd\10\dc\10\d0\10\da\10\d8\10\d6\10\d0\10\ea\10\d8\10\d0\10 \00\d3\10\d0\10 \00\da\10\dd\10\d9\10\d0\10\da\10\d8\10\d6\10\d0\10\ea\10\d8\10\d0\10,\00 \00U\00n\00i\00c\00o\00d\00e\00-\00\d8\10\e1\10 \00\d2\10\d0\10\db\10\dd\10\e7\10\d4\10\dc\10\d4\10\d1\10\d0\10\n\00\dd\10\de\10\d4\10\e0\10\d0\10\ea\10\d8\10\e3\10\da\10 \00\e1\10\d8\10\e1\10\e2\10\d4\10\db\10\d4\10\d1\10\e1\10\d0\10,\00 \00\d3\10\d0\10 \00\d2\10\d0\10\db\10\dd\10\e7\10\d4\10\dc\10\d4\10\d1\10\d8\10\d7\10 \00\de\10\e0\10\dd\10\d2\10\e0\10\d0\10\db\10\d4\10\d1\10\e8\10\d8\10,\00 \00\e8\10\e0\10\d8\10\e4\10\e2\10\d4\10\d1\10\e8\10\d8\10,\00\n\00\e2\10\d4\10\e5\10\e1\10\e2\10\d4\10\d1\10\d8\10\e1\10 \00\d3\10\d0\10\db\10\e3\10\e8\10\d0\10\d5\10\d4\10\d1\10\d0\10\e1\10\d0\10 \00\d3\10\d0\10 \00\db\10\e0\10\d0\10\d5\10\d0\10\da\10\d4\10\dc\10\dd\10\d5\10\d0\10\dc\10 \00\d9\10\dd\10\db\10\de\10\d8\10\e3\10\e2\10\d4\10\e0\10\e3\10\da\10 \00\e1\10\d8\10\e1\10\e2\10\d4\10\db\10\d4\10\d1\10\e8\10\d8\10.\00\n\00\n\00R\00u\00s\00s\00i\00a\00n\00:\00\n\00\n\00F\00r\00o\00m\00 \00a\00 \00U\00n\00i\00c\00o\00d\00e\00 \00c\00o\00n\00f\00e\00r\00e\00n\00c\00e\00 \00i\00n\00v\00i\00t\00a\00t\00i\00o\00n\00:\00\n\00\n\00\17\040\04@\045\043\048\04A\04B\04@\048\04@\04C\049\04B\045\04A\04L\04 \00A\045\049\04G\040\04A\04 \00=\040\04 \00\14\045\04A\04O\04B\04C\04N\04 \00\1c\045\046\044\04C\04=\040\04@\04>\044\04=\04C\04N\04 \00\1a\04>\04=\04D\045\04@\045\04=\04F\048\04N\04 \00?\04>\04\n\00U\00n\00i\00c\00o\00d\00e\00,\00 \00:\04>\04B\04>\04@\040\04O\04 \00A\04>\04A\04B\04>\048\04B\04A\04O\04 \001\000\00-\001\002\00 \00<\040\04@\04B\040\04 \001\009\009\007\00 \003\04>\044\040\04 \002\04 \00\1c\040\049\04=\04F\045\04 \002\04 \00\13\045\04@\04<\040\04=\048\048\04.\00\n\00\1a\04>\04=\04D\045\04@\045\04=\04F\048\04O\04 \00A\04>\041\045\04@\045\04B\04 \00H\048\04@\04>\04:\048\049\04 \00:\04@\04C\043\04 \00M\04:\04A\04?\045\04@\04B\04>\042\04 \00?\04>\04 \00 \002\04>\04?\04@\04>\04A\040\04<\04 \003\04;\04>\041\040\04;\04L\04=\04>\043\04>\04\n\00\18\04=\04B\045\04@\04=\045\04B\040\04 \008\04 \00U\00n\00i\00c\00o\00d\00e\00,\00 \00;\04>\04:\040\04;\048\047\040\04F\048\048\04 \008\04 \008\04=\04B\045\04@\04=\040\04F\048\04>\04=\040\04;\048\047\040\04F\048\048\04,\00 \002\04>\04?\04;\04>\04I\045\04=\048\04N\04 \008\04\n\00?\04@\048\04<\045\04=\045\04=\048\04N\04 \00U\00n\00i\00c\00o\00d\00e\00 \002\04 \00@\040\047\04;\048\04G\04=\04K\04E\04 \00>\04?\045\04@\040\04F\048\04>\04=\04=\04K\04E\04 \00A\048\04A\04B\045\04<\040\04E\04 \008\04 \00?\04@\04>\043\04@\040\04<\04<\04=\04K\04E\04\n\00?\04@\048\04;\04>\046\045\04=\048\04O\04E\04,\00 \00H\04@\048\04D\04B\040\04E\04,\00 \002\045\04@\04A\04B\04:\045\04 \008\04 \00<\04=\04>\043\04>\04O\047\04K\04G\04=\04K\04E\04 \00:\04>\04<\04?\04L\04N\04B\045\04@\04=\04K\04E\04 \00A\048\04A\04B\045\04<\040\04E\04.\00\n\00\n\00T\00h\00a\00i\00 \00(\00U\00C\00S\00 \00L\00e\00v\00e\00l\00 \002\00)\00:\00\n\00\n\00E\00x\00c\00e\00r\00p\00t\00 \00f\00r\00o\00m\00 \00a\00 \00p\00o\00e\00t\00r\00y\00 \00o\00n\00 \00T\00h\00e\00 \00R\00o\00m\00a\00n\00c\00e\00 \00o\00f\00 \00T\00h\00e\00 \00T\00h\00r\00e\00e\00 \00K\00i\00n\00g\00d\00o\00m\00s\00 \00(\00a\00 \00C\00h\00i\00n\00e\00s\00e\00\n\00c\00l\00a\00s\00s\00i\00c\00 \00\'\00S\00a\00n\00 \00G\00u\00a\00\'\00)\00:\00\n\00\n\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-\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-\00-\00-\00-\00-\00]\00\n\00 \00 \00O\0e \00A\0e\1c\0eH\0e\19\0e\14\0e4\0e\19\0e.\0e1\0eH\0e\19\0e@\0e*\0e7\0eH\0e-\0e!\0eB\0e\17\0e#\0e!\0eA\0e*\0e\19\0e*\0e1\0e\07\0e@\0e\'\0e\n\0e \00 \00\1e\0e#\0e0\0e\1b\0e\01\0e@\0e\01\0e(\0e\01\0e-\0e\07\0e\1a\0e9\0eJ\0e\01\0e9\0eI\0e\02\0e6\0eI\0e\19\0eC\0e+\0e!\0eH\0e\n\00*\0e4\0e\1a\0e*\0e-\0e\07\0e\01\0e)\0e1\0e\15\0e#\0e4\0e\"\0eL\0e\01\0eH\0e-\0e\19\0e+\0e\19\0eI\0e2\0eA\0e%\0e\16\0e1\0e\14\0eD\0e\1b\0e \00 \00 \00 \00 \00 \00 \00*\0e-\0e\07\0e-\0e\07\0e\04\0eL\0eD\0e\0b\0e#\0eI\0eB\0e\07\0eH\0e@\0e\02\0e%\0e2\0e@\0e\1a\0e2\0e\1b\0e1\0e\0d\0e\0d\0e2\0e\n\00 \00 \00\17\0e#\0e\07\0e\19\0e1\0e\1a\0e\16\0e7\0e-\0e\02\0e1\0e\19\0e\17\0e5\0e@\0e\1b\0eG\0e\19\0e\17\0e5\0eH\0e\1e\0e6\0eH\0e\07\0e \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00\1a\0eI\0e2\0e\19\0e@\0e!\0e7\0e-\0e\07\0e\08\0e6\0e\07\0e\'\0e4\0e\1b\0e#\0e4\0e\15\0e@\0e\1b\0eG\0e\19\0e\19\0e1\0e\01\0e+\0e\19\0e2\0e\n\00B\0e.\0e\08\0e4\0eK\0e\19\0e@\0e#\0e5\0e\"\0e\01\0e\17\0e1\0e\1e\0e\17\0e1\0eH\0e\'\0e+\0e1\0e\'\0e@\0e!\0e7\0e-\0e\07\0e!\0e2\0e \00 \00 \00 \00 \00 \00 \00 \00 \00+\0e!\0e2\0e\"\0e\08\0e0\0e\06\0eH\0e2\0e!\0e\14\0e\n\0e1\0eH\0e\'\0e\15\0e1\0e\'\0e*\0e3\0e\04\0e1\0e\0d\0e\n\00 \00 \00@\0e+\0e!\0e7\0e-\0e\19\0e\02\0e1\0e\1a\0eD\0e*\0eD\0e%\0eH\0e@\0e*\0e7\0e-\0e\08\0e2\0e\01\0e@\0e\04\0e+\0e2\0e \00 \00 \00 \00 \00 \00#\0e1\0e\1a\0e+\0e!\0e2\0e\1b\0eH\0e2\0e@\0e\02\0eI\0e2\0e!\0e2\0e@\0e%\0e\"\0e-\0e2\0e*\0e1\0e\0d\0e\n\00\1d\0eH\0e2\0e\"\0e-\0eI\0e-\0e\07\0e-\0e8\0eI\0e\19\0e\"\0e8\0eA\0e\"\0e\01\0eC\0e+\0eI\0eA\0e\15\0e\01\0e\01\0e1\0e\19\0e \00 \00 \00 \00 \00 \00 \00 \00 \00 \00C\0e\n\0eI\0e*\0e2\0e\'\0e\19\0e1\0eI\0e\19\0e@\0e\1b\0eG\0e\19\0e\n\0e\19\0e\'\0e\19\0e\n\0e7\0eH\0e\19\0e\n\0e\'\0e\19\0eC\0e\08\0e\n\00 \00 \00\1e\0e%\0e1\0e\19\0e%\0e4\0e\t\0e8\0e\"\0e\01\0e8\0e\"\0e\01\0e5\0e\01\0e%\0e1\0e\1a\0e\01\0eH\0e-\0e@\0e+\0e\15\0e8\0e \00 \00 \00 \00 \00 \00 \00 \00 \00 \00\n\0eH\0e2\0e\07\0e-\0e2\0e@\0e\1e\0e(\0e\08\0e#\0e4\0e\07\0e+\0e\19\0e2\0e\1f\0eI\0e2\0e#\0eI\0e-\0e\07\0eD\0e+\0eI\0e\n\00\15\0eI\0e-\0e\07\0e#\0e\1a\0e#\0e2\0e\06\0eH\0e2\0e\1f\0e1\0e\19\0e\08\0e\19\0e\1a\0e#\0e#\0e%\0e1\0e\"\0e \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00$\0eE\0e+\0e2\0eC\0e\04\0e#\0e\04\0eI\0e3\0e\n\0e9\0e\01\0e9\0eI\0e\1a\0e#\0e#\0e%\0e1\0e\07\0e\01\0eL\0e \00/\0e\n\00\n\00(\00T\00h\00e\00 \00a\00b\00o\00v\00e\00 \00i\00s\00 \00a\00 \00t\00w\00o\00-\00c\00o\00l\00u\00m\00n\00 \00t\00e\00x\00t\00.\00 \00I\00f\00 \00c\00o\00m\00b\00i\00n\00i\00n\00g\00 \00c\00h\00a\00r\00a\00c\00t\00e\00r\00s\00 \00a\00r\00e\00 \00h\00a\00n\00d\00l\00e\00d\00\n\00c\00o\00r\00r\00e\00c\00t\00l\00y\00,\00 \00t\00h\00e\00 \00l\00i\00n\00e\00s\00 \00o\00f\00 \00t\00h\00e\00 \00s\00e\00c\00o\00n\00d\00 \00c\00o\00l\00u\00m\00n\00 \00s\00h\00o\00u\00l\00d\00 \00b\00e\00 \00a\00l\00i\00g\00n\00e\00d\00 \00w\00i\00t\00h\00 \00t\00h\00e\00\n\00|\00 \00c\00h\00a\00r\00a\00c\00t\00e\00r\00 \00a\00b\00o\00v\00e\00.\00)\00\n\00\n\00E\00t\00h\00i\00o\00p\00i\00a\00n\00:\00\n\00\n\00P\00r\00o\00v\00e\00r\00b\00s\00 \00i\00n\00 \00t\00h\00e\00 \00A\00m\00h\00a\00r\00i\00c\00 \00l\00a\00n\00g\00u\00a\00g\00e\00:\00\n\00\n\000\12\1b\12\ed\12 \00\a0\12\ed\12s\12(\125\12 \00\95\12\t\13%\12 \00\a0\12\ed\12\a8\120\125\12b\13\n\00e\12\0b\12 \00\ab\12\08\12\9d\12 \00\a5\12\95\12\f0\12\a0\12c\12t\12 \00`\12F\12\18\12 \13\9d\12b\13\n\00\0c\13%\13 \00\eb\12\08\12d\12q\12 \00A\12\1d\12%\13\93\12 \00\90\12\cd\12b\13\n\00\f0\12\00\12 \00`\12\15\12\0d\12\19\12 \00E\12d\12 \00c\12\ed\12 \13#\13 \00\95\12#\13u\12 \00`\12\08\13\f0\12\08\12\cd\12b\13\n\00\e8\12\a0\12M\13 \00\c8\12\08\12\1d\12s\12 \00`\12E\12d\12 \00\a0\12\ed\12s\12=\12\1d\12b\13\n\00\a0\12\ed\12%\13 \00`\12`\12\0b\12 \00\f3\12\cb\12 \00p\12\18\12s\12b\13\n\002\12p\12(\12\t\13\19\12 \00\ed\12\f0\12(\12\0d\13\19\12b\13\n\00@\125\12 \00`\12@\125\12e\13 \00\d5\12\95\12A\12\0b\12\0d\12 \00`\12\a5\12\0d\13)\12 \00\ed\12\04\12\f3\12\0d\12b\13\n\00\f5\12-\12 \00b\12\eb\12e\12-\12 \00\a0\12\95\12`\123\12 \00\eb\125\12-\12b\13\n\000\12\cd\12 \00\a5\12\95\12\f0\12d\12q\12 \00\a5\12\95\12\05\13 \00\a5\12\95\12\f0\12 \00\t\13(\12d\12q\12 \00\a0\12\ed\12p\12\f3\12\f0\12-\12\1d\12b\13\n\00\a5\12\0d\13\dc\12-\12 \00\e8\12\a8\12H\13p\12\cd\12\95\12 \00\t\13.\12.\12 \003\12\ed\12\d8\12\0b\13\cd\12 \00\a0\12\ed\12\f5\12-\12\1d\12b\13\n\00\e8\12\0e\13(\12d\12u\12 \00\0c\12c\12e\13 \00b\12\eb\12\e9\12u\12 \00\ed\125\12E\12 \00c\12\eb\12\e9\12u\12 \00\eb\12 \13\0d\12E\12b\13\n\00%\12+\12 \00\a8\12\18\12M\13s\12u\12 \00\0d\12\04\13\95\12 \00\0b\12K\13s\12u\12b\13\n\00\d3\12c\12\ed\12 \00\1b\12\f0\12*\12\eb\12 \00\e8\12\08\12\cd\12e\13 \00\0d\13\95\12\f5\12 \00\ed\12\de\12 \00\ed\12\de\12+\12\0d\12b\13\n\00\e8\12\a5\125\12\0b\12\1d\12 \00\a0\12\08\13)\12 \00\18\12\ab\12 \00\e8\12\a0\12\1e\12+\12 \00\a0\12\08\13)\12 \00\cb\12-\12\ab\12b\13\n\00p\12\95\12\0b\13\0e\12 \00b\12p\12I\13 \00p\12\18\12\0d\126\12 \00c\12I\13b\13\n\00\c8\12\f3\12\05\13\05\12 \00\1b\12-\12 \00b\12\06\12\95\12 \00(\13-\125\12\05\12 \00\a0\12u\12\0b\120\12\cd\12b\13\n\00\a5\12\0d\13-\12\05\12\95\12 \00`\12M\13+\12=\12\05\12 \00\0d\12\ad\12 \00\d8\12-\12\0b\13b\13\n\00\n\00R\00u\00n\00e\00s\00:\00\n\00\n\00\bb\16\d6\16 \00\b3\16\b9\16\ab\16\a6\16 \00\a6\16\ab\16\cf\16 \00\bb\16\d6\16 \00\d2\16\a2\16\de\16\d6\16 \00\a9\16\be\16 \00\a6\16\ab\16\d7\16 \00\da\16\aa\16\be\16\de\16\d6\16 \00\be\16\a9\16\b1\16\a6\16\b9\16\d6\16\aa\16\b1\16\de\16\a2\16\d7\16 \00\b9\16\c1\16\a6\16 \00\a6\16\aa\16 \00\b9\16\d6\16\e5\16\ab\16\n\00\n\00(\00O\00l\00d\00 \00E\00n\00g\00l\00i\00s\00h\00,\00 \00w\00h\00i\00c\00h\00 \00t\00r\00a\00n\00s\00c\00r\00i\00b\00e\00d\00 \00i\00n\00t\00o\00 \00L\00a\00t\00i\00n\00 \00r\00e\00a\00d\00s\00 \00\'\00H\00e\00 \00c\00w\00a\00e\00t\00h\00 \00t\00h\00a\00t\00 \00h\00e\00\n\00b\00u\00d\00e\00 \00t\00h\00a\00e\00m\00 \00l\00a\00n\00d\00e\00 \00n\00o\00r\00t\00h\00w\00e\00a\00r\00d\00u\00m\00 \00w\00i\00t\00h\00 \00t\00h\00a\00 \00W\00e\00s\00t\00s\00a\00e\00.\00\'\00 \00a\00n\00d\00 \00m\00e\00a\00n\00s\00 \00\'\00H\00e\00 \00s\00a\00i\00d\00\n\00t\00h\00a\00t\00 \00h\00e\00 \00l\00i\00v\00e\00d\00 \00i\00n\00 \00t\00h\00e\00 \00n\00o\00r\00t\00h\00e\00r\00n\00 \00l\00a\00n\00d\00 \00n\00e\00a\00r\00 \00t\00h\00e\00 \00W\00e\00s\00t\00e\00r\00n\00 \00S\00e\00a\00.\00\'\00)\00\n\00\n\00B\00r\00a\00i\00l\00l\00e\00:\00\n\00\n\00L(\01(\'(\11( \00<(\01(\12( \00 \00M(\1c(\07(\11(9(0(\0e( \00c(\15(\0c(\n\00\n\00M(\1c(\07(\11(9( \00:(\01(\0e( \00\19(\11(\01(\19(\12( \00\1e(\15( \00\03(\11(\1b(\14( \00:(\n(9(2( \00y(;(\11( \00\n(\0e( \00\1d(\15( \00\19(3(\03(\1e(\n\001(\01(\1e(\11(\'(;( \00\01(\03(3(\1e( \009(\01(\1e(2( \00y(\11( \00\17(\11(\1b(\n(\0c(;( \00\15(\0b( \00\19(\n(\0e( \00\03(%(\17(\n(\01(\07( \00:(\01(\0e(\n\00\0e(\n(\1b(\1d(+( \00\03(9( \009(\11( \00\n(\07(;(\1b(9(\0d(\01(\1d(\02( \009(\11( \00\n(\07(;(\05(\02( \009(\11( \00%(\1d(\19(;(\1e(\01(\05(;(\02(\n\00\01(\1d(\19( \009(\11( \00!(\n(\11(\0b( \00\0d(3(\17(\1d(;(2( \00N(\n(\17(\15(\15(\1b(\11( \00\0e(\n(\1b(\1d(+( \00\n(\1e(2( \00A(\1d(\19(\n\00N(\n(\17(\15(\15(\1b(\11(0(\0e( \00\1d(\01(\0d(\11( \00:(\01(\0e( \00\1b(\15(\15(\19( \00%(\0f(\15(\1d( \000(a(\01(\1d(\1b(\11(\02( \00\0b(\15(\17( \00\01(\1d(9(9(\14(\1b( \00\19(\11(\n\00!(\15(\0e(\11( \00\1e(\15( \00\0f(%(\1e( \00\19(\n(\0e( \00\19(\01(\1d(\19( \00\1e(\15(2(\n\00\n\00U(\07(\19( \00M(\1c(\07(\11(9( \00:(\01(\0e( \00\01(\0e( \00\19(\11(\01(\19( \00\01(\0e( \00\01( \00\19(\15(\15(\17($(\1d(\01(\n(\07(2(\n\00\n\00M(\14(\19(\16( \00J( \00\19(\15(\1d(0(\1e( \00\0d(\11(\01(\1d( \00\1e(\15( \00\0e(\01(9( \009(\01(\1e( \00J( \00\05(\1d(*(\02( \00\15(\0b( \00\0d(9(\n\00*(\1d( \00\05(\1d(*(\07(+(\1b(\11(\02( \001(\01(\1e( \009(;(\11( \00\n(\0e( \00\0f(\1c(\1e(\n(\n(%(\07(\1c(\07(9( \00\19(\11(\01(\19( \00\01(\03(3(\1e(\n\00\01( \00\19(\15(\15(\17($(\1d(\01(\n(\07(2( \00J( \00\0d(\n(#(\1e( \00\19(\01(\'(\11( \00\03(\11(2( \00\14(\n(\07(\14(+(\02( \00\0d(9(\0e(\11(\07(\0b(\02( \00\1e(\15(\n\00\17(\11(\1b(\1c(\19( \00\01( \00\n(\15(\0b(\0b(\14($(\1d(\01(\n(\07( \00\01(\0e( \009(\11( \00\19(\11(\01(\19(\11(\0c( \00\0f(\n(\11(\n(\11( \00\15(\0b( \00\n(\17(\15(\1d(\0d(\15(\1d(\1b(;(9(\n\00\14( \009(\11( \00\1e(\17(\01(\19(\11(2( \00C(%(\1e( \009(\11( \00:(\n(\0e(\19(\15(\0d( \00\15(\0b( \003(\17( \00\01(\1d(\n(\11(\0c(\15(\17(\0e(\n\00\n(\0e( \00\14( \009(\11( \00\0e(\n(\0d(\n(\07(\11(\06( \00\01(\1d(\19( \00\0d(9( \00%(\1d(\19(\01(\07(\07(*(+( \00\19(\01(\1d(\19(\0e(\n\00)(\01(\07(\07( \00\1d(\15(\1e( \00\19(\n(\0c(%(\17(\03( \00\n(\1e(\02( \00\15(\17( \009(\11( \00J(3(\1d(\1e(\17(9(0(\0e( \00\19(\15(\1d(\11( \00\0b(\15(\17(2( \00y(3(\n\00:(\n(\07(\07( \009(;(\11(\0b(\15(\17(\11( \00\0f(;(\0d(\n(\1e( \00\0d(\11( \00\1e(\15( \00\17(\11(\0f(\11(\01(\1e(\02( \00\11(\0d(\0f(\19(\01(\1e(\n(\n(\01(\07(\07(9(\02( \009(\01(\1e(\n\00M(\1c(\07(\11(9( \00:(\01(\0e( \00\01(\0e( \00\19(\11(\01(\19( \00\01(\0e( \00\01( \00\19(\15(\15(\17($(\1d(\01(\n(\07(2(\n\00\n\00(\00T\00h\00e\00 \00f\00i\00r\00s\00t\00 \00c\00o\00u\00p\00l\00e\00 \00o\00f\00 \00p\00a\00r\00a\00g\00r\00a\00p\00h\00s\00 \00o\00f\00 \00\"\00A\00 \00C\00h\00r\00i\00s\00t\00m\00a\00s\00 \00C\00a\00r\00o\00l\00\"\00 \00b\00y\00 \00D\00i\00c\00k\00e\00n\00s\00)\00\n\00\n\00C\00o\00m\00p\00a\00c\00t\00 \00f\00o\00n\00t\00 \00s\00e\00l\00e\00c\00t\00i\00o\00n\00 \00e\00x\00a\00m\00p\00l\00e\00 \00t\00e\00x\00t\00:\00\n\00\n\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\00 \00/\000\001\002\003\004\005\006\007\008\009\00\n\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\00 \00\a3\00\a9\00\b5\00\c0\00\c6\00\d6\00\de\00\df\00\e9\00\f6\00\ff\00\n\00\13 \14 \18 \1c \1d \1e \" & 0 \"!S\01`\01x\01~\01\ac \00\91\03\92\03\93\03\94\03\a9\03\b1\03\b2\03\b3\03\b4\03\c9\03 \00\10\04\11\04\12\04\13\04\14\040\041\042\043\044\04\n\00\00\"\02\"\08\"\1d!\'\"*\"a\"\1e\" \00\91!\97!\a8!\bb!\e3! \00\10%<%T%X%\91%\ba%:&@& \00\01\fb\fd\ff@$\82 \1f\02\1e\e5\04\84\1eP\02\d0\02N#\d0\051\05\d0\10\n\00\n\00G\00r\00e\00e\00t\00i\00n\00g\00s\00 \00i\00n\00 \00v\00a\00r\00i\00o\00u\00s\00 \00l\00a\00n\00g\00u\00a\00g\00e\00s\00:\00\n\00\n\00H\00e\00l\00l\00o\00 \00w\00o\00r\00l\00d\00,\00 \00\9a\03\b1\03\bb\03\b7\03\bc\03s\1f\c1\03\b1\03 \00\ba\03y\1f\c3\03\bc\03\b5\03,\00 \00\b30\f30\cb0\c10\cf0\n\00\n\00B\00o\00x\00 \00d\00r\00a\00w\00i\00n\00g\00 \00a\00l\00i\00g\00n\00m\00e\00n\00t\00 \00t\00e\00s\00t\00s\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 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00\88%\n\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 \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 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00\89%\n\00T%P%P%f%P%P%W% \00 \00\0c%\00%\00%,%\00%\00%\10% \00 \00m%\00%\00%,%\00%\00%n% \00 \00m%\00%\00%,%\00%\00%n% \00 \00\0f%\01%\01%3%\01%\01%\13% \00 \00\0e%\12%\0f%\11% \00 \00 \00w% \00 \00{% \00\0f%/%\13% \00\0c%0%\10% \00 \00 \00 \00\8a% \00q%r%q%r%s%s%s%\n\00Q%\0c%\00%h%\00%\10%Q% \00 \00\02%T%P%g%P%W%\02% \00 \00\02%R%P%j%P%U%\02% \00 \00\02%S%\00%A%\00%V%\02% \00 \00\03%\0c%\00%B%\00%\10%\03% \00 \00\17%C%D%\19% \00 \00v%<%t%z%K%x% %<%(% \00\1d%K%%% \00 \00 \00 \00\8b% \00r%q%r%q%s%s%s%\n\00Q%\02%r% \00q%\02%Q% \00 \00\02%Q% \00 \00 \00Q%\02% \00 \00\02%\02% \00\02% \00\02%\02% \00 \00\02%Q% \00\03% \00Q%\02% \00 \00\03%\02% \00\7f% \00\02%\03% \00 \00\0d%E%F%\13% \00 \00 \00u% \00 \00y% \00\17%7%\1b% \00\14%8%\18% \00 \00 \00 \00\8c% \00q%r%q%r%s%s%s%\n\00`%a% \00s% \00^%c% \00 \00\1c%b% \00 \00 \00_%$% \00 \00\1c%<%\00%<%\00%<%$% \00 \00\1c%k%\00%B%\00%k%$% \00 \00#%?%~%<%|%?%+% \00 \00\15%\1b%\16%\1a% \00 \00 \00 \00 \00\0c%\04%\04%\10% \00N% \00\0f%\05%\05%\13% \00\0b% \00\8d% \00r%q%r%q%s%s%s%\n\00Q%\02%q% \00r%\02%Q% \00 \00\02%Q% \00 \00 \00Q%\02% \00 \00\02%\02% \00\02% \00\02%\02% \00 \00\02%Q% \00\03% \00Q%\02% \00 \00\03%\02% \00}% \00\02%\03% \00 \00\91%\91%\92%\92%\93%\93%\88%\88% \00\n% \00 \00\06% \00N% \00O% \00 \00\07% \00\0b% \00\8e%\n\00Q%\14%\00%e%\00%\18%Q% \00 \00\02%Z%P%d%P%]%\02% \00 \00\02%X%P%j%P%[%\02% \00 \00\02%Y%\00%@%\00%\\%\02% \00 \00\03%\14%\00%B%\00%\18%\03% \00 \00\91%\91%\92%\92%\93%\93%\88%\88% \00\n% \00 \00\06% \00N% \00O% \00 \00\07% \00\0b% \00\8f%\n\00Z%P%P%i%P%P%]% \00 \00\14%\00%\00%4%\00%\00%\18% \00 \00p%\00%\00%4%\00%\00%o% \00 \00p%\00%\00%4%\00%\00%o% \00 \00\17%\01%\01%;%\01%\01%\1b% \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00\14%L%L%\18% \00N% \00\17%M%M%\1b% \00\0b% \00 \00\81%\82%\83%\84%\85%\86%\87%\88%\n") (data (i32.const 14688) "\ba\1c\00\00\01\00\00\00\01\00\00\00\ba\1c\00\00S\00e\00n\00t\00e\00n\00c\00e\00s\00 \00t\00h\00a\00t\00 \00c\00o\00n\00t\00a\00i\00n\00 \00a\00l\00l\00 \00l\00e\00t\00t\00e\00r\00s\00 \00c\00o\00m\00m\00o\00n\00l\00y\00 \00u\00s\00e\00d\00 \00i\00n\00 \00a\00 \00l\00a\00n\00g\00u\00a\00g\00e\00\n\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-\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-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00M\00a\00r\00k\00u\00s\00 \00K\00u\00h\00n\00 \00<\00h\00t\00t\00p\00:\00/\00/\00w\00w\00w\00.\00c\00l\00.\00c\00a\00m\00.\00a\00c\00.\00u\00k\00/\00~\00m\00g\00k\002\005\00/\00>\00 \00-\00-\00 \002\000\001\002\00-\000\004\00-\001\001\00\n\00\n\00T\00h\00i\00s\00 \00i\00s\00 \00a\00n\00 \00e\00x\00a\00m\00p\00l\00e\00 \00o\00f\00 \00a\00 \00p\00l\00a\00i\00n\00-\00t\00e\00x\00t\00 \00f\00i\00l\00e\00 \00e\00n\00c\00o\00d\00e\00d\00 \00i\00n\00 \00U\00T\00F\00-\008\00.\00\n\00\n\00\n\00D\00a\00n\00i\00s\00h\00 \00(\00d\00a\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00Q\00u\00i\00z\00d\00e\00l\00t\00a\00g\00e\00r\00n\00e\00 \00s\00p\00i\00s\00t\00e\00 \00j\00o\00r\00d\00b\00\e6\00r\00 \00m\00e\00d\00 \00f\00l\00\f8\00d\00e\00,\00 \00m\00e\00n\00s\00 \00c\00i\00r\00k\00u\00s\00k\00l\00o\00v\00n\00e\00n\00\n\00 \00 \00W\00o\00l\00t\00h\00e\00r\00 \00s\00p\00i\00l\00l\00e\00d\00e\00 \00p\00\e5\00 \00x\00y\00l\00o\00f\00o\00n\00.\00\n\00 \00 \00(\00=\00 \00Q\00u\00i\00z\00 \00c\00o\00n\00t\00e\00s\00t\00a\00n\00t\00s\00 \00w\00e\00r\00e\00 \00e\00a\00t\00i\00n\00g\00 \00s\00t\00r\00a\00w\00b\00e\00r\00y\00 \00w\00i\00t\00h\00 \00c\00r\00e\00a\00m\00 \00w\00h\00i\00l\00e\00 \00W\00o\00l\00t\00h\00e\00r\00\n\00 \00 \00t\00h\00e\00 \00c\00i\00r\00c\00u\00s\00 \00c\00l\00o\00w\00n\00 \00p\00l\00a\00y\00e\00d\00 \00o\00n\00 \00x\00y\00l\00o\00p\00h\00o\00n\00e\00.\00)\00\n\00\n\00G\00e\00r\00m\00a\00n\00 \00(\00d\00e\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00F\00a\00l\00s\00c\00h\00e\00s\00 \00\dc\00b\00e\00n\00 \00v\00o\00n\00 \00X\00y\00l\00o\00p\00h\00o\00n\00m\00u\00s\00i\00k\00 \00q\00u\00\e4\00l\00t\00 \00j\00e\00d\00e\00n\00 \00g\00r\00\f6\00\df\00e\00r\00e\00n\00 \00Z\00w\00e\00r\00g\00\n\00 \00 \00(\00=\00 \00W\00r\00o\00n\00g\00f\00u\00l\00 \00p\00r\00a\00c\00t\00i\00c\00i\00n\00g\00 \00o\00f\00 \00x\00y\00l\00o\00p\00h\00o\00n\00e\00 \00m\00u\00s\00i\00c\00 \00t\00o\00r\00t\00u\00r\00e\00s\00 \00e\00v\00e\00r\00y\00 \00l\00a\00r\00g\00e\00r\00 \00d\00w\00a\00r\00f\00)\00\n\00\n\00 \00 \00Z\00w\00\f6\00l\00f\00 \00B\00o\00x\00k\00\e4\00m\00p\00f\00e\00r\00 \00j\00a\00g\00t\00e\00n\00 \00E\00v\00a\00 \00q\00u\00e\00r\00 \00\fc\00b\00e\00r\00 \00d\00e\00n\00 \00S\00y\00l\00t\00e\00r\00 \00D\00e\00i\00c\00h\00\n\00 \00 \00(\00=\00 \00T\00w\00e\00l\00v\00e\00 \00b\00o\00x\00i\00n\00g\00 \00f\00i\00g\00h\00t\00e\00r\00s\00 \00h\00u\00n\00t\00e\00d\00 \00E\00v\00a\00 \00a\00c\00r\00o\00s\00s\00 \00t\00h\00e\00 \00d\00i\00k\00e\00 \00o\00f\00 \00S\00y\00l\00t\00)\00\n\00\n\00 \00 \00H\00e\00i\00z\00\f6\00l\00r\00\fc\00c\00k\00s\00t\00o\00\df\00a\00b\00d\00\e4\00m\00p\00f\00u\00n\00g\00\n\00 \00 \00(\00=\00 \00f\00u\00e\00l\00 \00o\00i\00l\00 \00r\00e\00c\00o\00i\00l\00 \00a\00b\00s\00o\00r\00b\00e\00r\00)\00\n\00 \00 \00(\00j\00q\00v\00w\00x\00y\00 \00m\00i\00s\00s\00i\00n\00g\00,\00 \00b\00u\00t\00 \00a\00l\00l\00 \00n\00o\00n\00-\00A\00S\00C\00I\00I\00 \00l\00e\00t\00t\00e\00r\00s\00 \00i\00n\00 \00o\00n\00e\00 \00w\00o\00r\00d\00)\00\n\00\n\00G\00r\00e\00e\00k\00 \00(\00e\00l\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00\93\03\b1\03\b6\03\ad\03\b5\03\c2\03 \00\ba\03\b1\03v\1f \00\bc\03\c5\03\c1\03\c4\03\b9\03r\1f\c2\03 \00\b4\03r\1f\bd\03 \00\b8\03p\1f \00\b2\03\c1\03\f6\1f \00\c0\03\b9\03p\1f \00\c3\03\c4\03x\1f \00\c7\03\c1\03\c5\03\c3\03\b1\03\c6\03v\1f \00\be\03\ad\03\c6\03\c9\03\c4\03\bf\03\n\00 \00 \00(\00=\00 \00N\00o\00 \00m\00o\00r\00e\00 \00s\00h\00a\00l\00l\00 \00I\00 \00s\00e\00e\00 \00a\00c\00a\00c\00i\00a\00s\00 \00o\00r\00 \00m\00y\00r\00t\00l\00e\00s\00 \00i\00n\00 \00t\00h\00e\00 \00g\00o\00l\00d\00e\00n\00 \00c\00l\00e\00a\00r\00i\00n\00g\00)\00\n\00\n\00 \00 \00\9e\03\b5\03\c3\03\ba\03\b5\03\c0\03\ac\03\b6\03\c9\03 \00\c4\03t\1f\bd\03 \00\c8\03\c5\03\c7\03\bf\03\c6\03\b8\03\cc\03\c1\03\b1\03 \00\b2\03\b4\03\b5\03\bb\03\c5\03\b3\03\bc\03\af\03\b1\03\n\00 \00 \00(\00=\00 \00I\00 \00u\00n\00c\00o\00v\00e\00r\00 \00t\00h\00e\00 \00s\00o\00u\00l\00-\00d\00e\00s\00t\00r\00o\00y\00i\00n\00g\00 \00a\00b\00h\00o\00r\00r\00e\00n\00c\00e\00)\00\n\00\n\00E\00n\00g\00l\00i\00s\00h\00 \00(\00e\00n\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00T\00h\00e\00 \00q\00u\00i\00c\00k\00 \00b\00r\00o\00w\00n\00 \00f\00o\00x\00 \00j\00u\00m\00p\00s\00 \00o\00v\00e\00r\00 \00t\00h\00e\00 \00l\00a\00z\00y\00 \00d\00o\00g\00\n\00\n\00S\00p\00a\00n\00i\00s\00h\00 \00(\00e\00s\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00E\00l\00 \00p\00i\00n\00g\00\fc\00i\00n\00o\00 \00W\00e\00n\00c\00e\00s\00l\00a\00o\00 \00h\00i\00z\00o\00 \00k\00i\00l\00\f3\00m\00e\00t\00r\00o\00s\00 \00b\00a\00j\00o\00 \00e\00x\00h\00a\00u\00s\00t\00i\00v\00a\00 \00l\00l\00u\00v\00i\00a\00 \00y\00\n\00 \00 \00f\00r\00\ed\00o\00,\00 \00a\00\f1\00o\00r\00a\00b\00a\00 \00a\00 \00s\00u\00 \00q\00u\00e\00r\00i\00d\00o\00 \00c\00a\00c\00h\00o\00r\00r\00o\00.\00\n\00 \00 \00(\00C\00o\00n\00t\00a\00i\00n\00s\00 \00e\00v\00e\00r\00y\00 \00l\00e\00t\00t\00e\00r\00 \00a\00n\00d\00 \00e\00v\00e\00r\00y\00 \00a\00c\00c\00e\00n\00t\00,\00 \00b\00u\00t\00 \00n\00o\00t\00 \00e\00v\00e\00r\00y\00 \00c\00o\00m\00b\00i\00n\00a\00t\00i\00o\00n\00\n\00 \00 \00o\00f\00 \00v\00o\00w\00e\00l\00 \00+\00 \00a\00c\00u\00t\00e\00.\00)\00\n\00\n\00F\00r\00e\00n\00c\00h\00 \00(\00f\00r\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00P\00o\00r\00t\00e\00z\00 \00c\00e\00 \00v\00i\00e\00u\00x\00 \00w\00h\00i\00s\00k\00y\00 \00a\00u\00 \00j\00u\00g\00e\00 \00b\00l\00o\00n\00d\00 \00q\00u\00i\00 \00f\00u\00m\00e\00 \00s\00u\00r\00 \00s\00o\00n\00 \00\ee\00l\00e\00 \00i\00n\00t\00\e9\00r\00i\00e\00u\00r\00e\00,\00 \00\e0\00\n\00 \00 \00c\00\f4\00t\00\e9\00 \00d\00e\00 \00l\00\'\00a\00l\00c\00\f4\00v\00e\00 \00o\00v\00o\00\ef\00d\00e\00,\00 \00o\00\f9\00 \00l\00e\00s\00 \00b\00\fb\00c\00h\00e\00s\00 \00s\00e\00 \00c\00o\00n\00s\00u\00m\00e\00n\00t\00 \00d\00a\00n\00s\00 \00l\00\'\00\e2\00t\00r\00e\00,\00 \00c\00e\00\n\00 \00 \00q\00u\00i\00 \00l\00u\00i\00 \00p\00e\00r\00m\00e\00t\00 \00d\00e\00 \00p\00e\00n\00s\00e\00r\00 \00\e0\00 \00l\00a\00 \00c\00\e6\00n\00o\00g\00e\00n\00\e8\00s\00e\00 \00d\00e\00 \00l\00\'\00\ea\00t\00r\00e\00 \00d\00o\00n\00t\00 \00i\00l\00 \00e\00s\00t\00 \00q\00u\00e\00s\00t\00i\00o\00n\00\n\00 \00 \00d\00a\00n\00s\00 \00l\00a\00 \00c\00a\00u\00s\00e\00 \00a\00m\00b\00i\00g\00u\00\eb\00 \00e\00n\00t\00e\00n\00d\00u\00e\00 \00\e0\00 \00M\00o\00\ff\00,\00 \00d\00a\00n\00s\00 \00u\00n\00 \00c\00a\00p\00h\00a\00r\00n\00a\00\fc\00m\00 \00q\00u\00i\00,\00\n\00 \00 \00p\00e\00n\00s\00e\00-\00t\00-\00i\00l\00,\00 \00d\00i\00m\00i\00n\00u\00e\00 \00\e7\00\e0\00 \00e\00t\00 \00l\00\e0\00 \00l\00a\00 \00q\00u\00a\00l\00i\00t\00\e9\00 \00d\00e\00 \00s\00o\00n\00 \00S\01u\00v\00r\00e\00.\00\n\00\n\00 \00 \00l\00\'\00\ee\00l\00e\00 \00e\00x\00i\00g\00u\00\eb\00\n\00 \00 \00O\00\f9\00 \00l\00\'\00o\00b\00\e8\00s\00e\00 \00j\00u\00r\00y\00 \00m\00\fb\00r\00\n\00 \00 \00F\00\ea\00t\00e\00 \00l\00\'\00h\00a\00\ef\00 \00v\00o\00l\00a\00p\00\fc\00k\00,\00\n\00 \00 \00\c2\00n\00e\00 \00e\00x\00 \00a\00\e9\00q\00u\00o\00 \00a\00u\00 \00w\00h\00i\00s\00t\00,\00\n\00 \00 \00\d4\00t\00e\00z\00 \00c\00e\00 \00v\00S\01u\00 \00d\00\e9\00\e7\00u\00.\00\n\00\n\00 \00 \00L\00e\00 \00c\00S\01u\00r\00 \00d\00\e9\00\e7\00u\00 \00m\00a\00i\00s\00 \00l\00\'\00\e2\00m\00e\00 \00p\00l\00u\00t\00\f4\00t\00 \00n\00a\00\ef\00v\00e\00,\00 \00L\00o\00u\00\ff\00s\00 \00r\00\ea\00v\00a\00 \00d\00e\00 \00c\00r\00a\00p\00a\00\fc\00t\00e\00r\00 \00e\00n\00\n\00 \00 \00c\00a\00n\00o\00\eb\00 \00a\00u\00 \00d\00e\00l\00\e0\00 \00d\00e\00s\00 \00\ee\00l\00e\00s\00,\00 \00p\00r\00\e8\00s\00 \00d\00u\00 \00m\00\e4\00l\00s\00t\00r\00\f6\00m\00 \00o\00\f9\00 \00b\00r\00\fb\00l\00e\00n\00t\00 \00l\00e\00s\00 \00n\00o\00v\00\e6\00.\00\n\00\n\00I\00r\00i\00s\00h\00 \00G\00a\00e\00l\00i\00c\00 \00(\00g\00a\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00D\00\'\00f\00h\00u\00a\00s\00c\00a\00i\00l\00 \00\cd\00o\00s\00a\00,\00 \00\da\00r\00m\00h\00a\00c\00 \00n\00a\00 \00h\00\d3\00i\00g\00h\00e\00 \00B\00e\00a\00n\00n\00a\00i\00t\00h\00e\00,\00 \00p\00\f3\00r\00 \00\c9\00a\00v\00a\00 \00a\00g\00u\00s\00 \00\c1\00d\00h\00a\00i\00m\00h\00\n\00\n\00H\00u\00n\00g\00a\00r\00i\00a\00n\00 \00(\00h\00u\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00\c1\00r\00v\00\ed\00z\00t\00q\01r\00Q\01 \00t\00\fc\00k\00\f6\00r\00f\00\fa\00r\00\f3\00g\00\e9\00p\00\n\00 \00 \00(\00=\00 \00f\00l\00o\00o\00d\00-\00p\00r\00o\00o\00f\00 \00m\00i\00r\00r\00o\00r\00-\00d\00r\00i\00l\00l\00i\00n\00g\00 \00m\00a\00c\00h\00i\00n\00e\00,\00 \00o\00n\00l\00y\00 \00a\00l\00l\00 \00n\00o\00n\00-\00A\00S\00C\00I\00I\00 \00l\00e\00t\00t\00e\00r\00s\00)\00\n\00\n\00I\00c\00e\00l\00a\00n\00d\00i\00c\00 \00(\00i\00s\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00K\00\e6\00m\00i\00 \00n\00\fd\00 \00\f6\00x\00i\00 \00h\00\e9\00r\00 \00y\00k\00i\00s\00t\00 \00\fe\00j\00\f3\00f\00u\00m\00 \00n\00\fa\00 \00b\00\e6\00\f0\00i\00 \00v\00\ed\00l\00 \00o\00g\00 \00\e1\00d\00r\00e\00p\00a\00\n\00\n\00 \00 \00S\00\e6\00v\00\f6\00r\00 \00g\00r\00\e9\00t\00 \00\e1\00\f0\00a\00n\00 \00\fe\00v\00\ed\00 \00\fa\00l\00p\00a\00n\00 \00v\00a\00r\00 \00\f3\00n\00\fd\00t\00\n\00 \00 \00(\00s\00o\00m\00e\00 \00A\00S\00C\00I\00I\00 \00l\00e\00t\00t\00e\00r\00s\00 \00m\00i\00s\00s\00i\00n\00g\00)\00\n\00\n\00J\00a\00p\00a\00n\00e\00s\00e\00 \00(\00j\00p\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00H\00i\00r\00a\00g\00a\00n\00a\00:\00 \00(\00I\00r\00o\00h\00a\00)\00\n\00\n\00 \00 \00D0\8d0o0k0{0x0h0a0\8a0l0\8b0\920\n\00 \00 \00\8f0K0\880_0\8c0]0d0m0j0\890\800\n\00 \00 \00F0\900n0J0O0\840~0Q0u0S0H0f0\n\00 \00 \00B0U0M0\860\810\7f0W0\910r0\820[0Y0\n\00\n\00 \00 \00K\00a\00t\00a\00k\00a\00n\00a\00:\00\n\00\n\00 \00 \00\a40\ed0\cf0\cb0\db0\d80\c80 \00\c10\ea0\cc0\eb0\f20 \00\ef0\ab0\e80\bf0\ec0\bd0 \00\c40\cd0\ca0\e90\e00\n\00 \00 \00\a60\f00\ce0\aa0\af0\e40\de0 \00\b10\d50\b30\a80\c60 \00\a20\b50\ad0\e60\e10\df0\b70 \00\f10\d20\e20\bb0\b90\f30\n\00\n\00H\00e\00b\00r\00e\00w\00 \00(\00i\00w\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00?\00 \00\d3\05\d2\05 \00\e1\05\e7\05\e8\05\df\05 \00\e9\05\d8\05 \00\d1\05\d9\05\dd\05 \00\de\05\d0\05\d5\05\db\05\d6\05\d1\05 \00\d5\05\dc\05\e4\05\ea\05\e2\05 \00\de\05\e6\05\d0\05 \00\dc\05\d5\05 \00\d7\05\d1\05\e8\05\d4\05 \00\d0\05\d9\05\da\05 \00\d4\05\e7\05\dc\05\d9\05\d8\05\d4\05\n\00\n\00P\00o\00l\00i\00s\00h\00 \00(\00p\00l\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00P\00c\00h\00n\00\05\01\07\01 \00w\00 \00t\00\19\01 \00B\01\f3\00d\00z\01 \00j\00e\00|\01a\00 \00l\00u\00b\00 \00o\00[\01m\00 \00s\00k\00r\00z\00y\00D\01 \00f\00i\00g\00\n\00 \00 \00(\00=\00 \00T\00o\00 \00p\00u\00s\00h\00 \00a\00 \00h\00e\00d\00g\00e\00h\00o\00g\00 \00o\00r\00 \00e\00i\00g\00h\00t\00 \00b\00i\00n\00s\00 \00o\00f\00 \00f\00i\00g\00s\00 \00i\00n\00 \00t\00h\00i\00s\00 \00b\00o\00a\00t\00)\00\n\00\n\00R\00u\00s\00s\00i\00a\00n\00 \00(\00r\00u\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00\12\04 \00G\040\04I\040\04E\04 \00N\043\040\04 \006\048\04;\04 \001\04K\04 \00F\048\04B\04@\04C\04A\04?\00 \00\14\040\04,\00 \00=\04>\04 \00D\040\04;\04L\04H\048\042\04K\049\04 \00M\04:\047\045\04<\04?\04;\04O\04@\04!\00\n\00 \00 \00(\00=\00 \00W\00o\00u\00l\00d\00 \00a\00 \00c\00i\00t\00r\00u\00s\00 \00l\00i\00v\00e\00 \00i\00n\00 \00t\00h\00e\00 \00b\00u\00s\00h\00e\00s\00 \00o\00f\00 \00s\00o\00u\00t\00h\00?\00 \00Y\00e\00s\00,\00 \00b\00u\00t\00 \00o\00n\00l\00y\00 \00a\00 \00f\00a\00k\00e\00 \00o\00n\00e\00!\00)\00\n\00\n\00 \00 \00!\04J\045\04H\04L\04 \006\045\04 \005\04I\04Q\04 \00M\04B\048\04E\04 \00<\04O\043\04:\048\04E\04 \00D\04@\040\04=\04F\04C\047\04A\04:\048\04E\04 \001\04C\04;\04>\04:\04 \004\040\04 \002\04K\04?\045\049\04 \00G\040\04N\04\n\00 \00 \00(\00=\00 \00E\00a\00t\00 \00s\00o\00m\00e\00 \00m\00o\00r\00e\00 \00o\00f\00 \00t\00h\00e\00s\00e\00 \00f\00r\00e\00s\00h\00 \00F\00r\00e\00n\00c\00h\00 \00l\00o\00a\00f\00s\00 \00a\00n\00d\00 \00h\00a\00v\00e\00 \00s\00o\00m\00e\00 \00t\00e\00a\00)\00\n\00\n\00T\00h\00a\00i\00 \00(\00t\00h\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\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-\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-\00-\00-\00-\00-\00]\00\n\00 \00 \00O\0e \00@\0e\1b\0eG\0e\19\0e!\0e\19\0e8\0e)\0e\"\0eL\0e*\0e8\0e\14\0e\1b\0e#\0e0\0e@\0e*\0e#\0e4\0e\10\0e@\0e%\0e4\0e(\0e\04\0e8\0e\13\0e\04\0eH\0e2\0e \00 \00\01\0e\'\0eH\0e2\0e\1a\0e#\0e#\0e\14\0e2\0e\1d\0e9\0e\07\0e*\0e1\0e\15\0e\'\0eL\0e@\0e\14\0e#\0e1\0e\08\0e\t\0e2\0e\19\0e\n\00 \00 \00\08\0e\07\0e\1d\0eH\0e2\0e\1f\0e1\0e\19\0e\1e\0e1\0e\12\0e\19\0e2\0e\'\0e4\0e\n\0e2\0e\01\0e2\0e#\0e \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00-\0e\"\0eH\0e2\0e%\0eI\0e2\0e\07\0e\1c\0e%\0e2\0e\0d\0e$\0eE\0e@\0e\02\0eH\0e\19\0e\06\0eH\0e2\0e\1a\0e5\0e\11\0e2\0eC\0e\04\0e#\0e\n\00 \00 \00D\0e!\0eH\0e\16\0e7\0e-\0eB\0e\17\0e)\0eB\0e\01\0e#\0e\18\0eA\0e\n\0eH\0e\07\0e\0b\0e1\0e\14\0e.\0e6\0e\14\0e.\0e1\0e\14\0e\14\0eH\0e2\0e \00 \00 \00 \00 \00+\0e1\0e\14\0e-\0e \0e1\0e\"\0e@\0e+\0e!\0e7\0e-\0e\19\0e\01\0e5\0e,\0e2\0e-\0e1\0e\n\0e\0c\0e2\0e*\0e1\0e\"\0e\n\00 \00 \00\1b\0e\0f\0e4\0e\1a\0e1\0e\15\0e4\0e\1b\0e#\0e0\0e\1e\0e$\0e\15\0e4\0e\01\0e\0e\0e\01\0e3\0e+\0e\19\0e\14\0eC\0e\08\0e \00 \00 \00 \00 \00 \00 \00 \00\1e\0e9\0e\14\0e\08\0e2\0eC\0e+\0eI\0e\08\0eJ\0e0\0eF\0e \00\08\0eK\0e2\0eF\0e \00\19\0eH\0e2\0e\1f\0e1\0e\07\0e@\0e-\0e\"\0e \00/\0e\n\00\n\00 \00 \00[\00T\00h\00e\00 \00c\00o\00p\00y\00r\00i\00g\00h\00t\00 \00f\00o\00r\00 \00t\00h\00e\00 \00T\00h\00a\00i\00 \00e\00x\00a\00m\00p\00l\00e\00 \00i\00s\00 \00o\00w\00n\00e\00d\00 \00b\00y\00 \00T\00h\00e\00 \00C\00o\00m\00p\00u\00t\00e\00r\00\n\00 \00 \00A\00s\00s\00o\00c\00i\00a\00t\00i\00o\00n\00 \00o\00f\00 \00T\00h\00a\00i\00l\00a\00n\00d\00 \00u\00n\00d\00e\00r\00 \00t\00h\00e\00 \00R\00o\00y\00a\00l\00 \00P\00a\00t\00r\00o\00n\00a\00g\00e\00 \00o\00f\00 \00H\00i\00s\00 \00M\00a\00j\00e\00s\00t\00y\00 \00t\00h\00e\00\n\00 \00 \00K\00i\00n\00g\00.\00]\00\n\00\n\00T\00u\00r\00k\00i\00s\00h\00 \00(\00t\00r\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00P\00i\00j\00a\00m\00a\00l\001\01 \00h\00a\00s\00t\00a\00,\00 \00y\00a\00\1f\011\01z\00 \00_\01o\00f\00\f6\00r\00e\00 \00\e7\00a\00b\00u\00c\00a\00k\00 \00g\00\fc\00v\00e\00n\00d\00i\00.\00\n\00 \00 \00(\00=\00P\00a\00t\00i\00e\00n\00t\00 \00w\00i\00t\00h\00 \00p\00a\00j\00a\00m\00a\00s\00,\00 \00t\00r\00u\00s\00t\00e\00d\00 \00s\00w\00a\00r\00t\00h\00y\00 \00d\00r\00i\00v\00e\00r\00 \00q\00u\00i\00c\00k\00l\00y\00)\00\n") - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (export "memory" (memory $0)) (start $~start) (func $~lib/rt/pure/__retain (param $0 i32) (result i32) @@ -97,33 +95,33 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1184 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -133,42 +131,42 @@ if i32.const 0 i32.const 1184 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -176,235 +174,235 @@ if i32.const 0 i32.const 1184 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1184 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1184 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1184 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -414,62 +412,62 @@ if i32.const 0 i32.const 1184 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1184 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -477,82 +475,84 @@ if i32.const 0 i32.const 1184 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -560,112 +560,130 @@ if i32.const 0 i32.const 1184 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1184 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1184 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -676,48 +694,44 @@ end if unreachable - end - i32.const 22064 - local.tee $0 - i32.const 0 - i32.store - i32.const 23632 + end + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 22064 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 22064 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -728,16 +742,16 @@ br $for-loop|0 end end - i32.const 22064 - i32.const 23648 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 22064 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -746,7 +760,7 @@ if i32.const 1232 i32.const 1184 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -763,55 +777,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -819,144 +833,143 @@ if i32.const 0 i32.const 1184 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1184 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1184 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -967,60 +980,69 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1184 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -1031,18 +1053,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1050,62 +1072,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1184 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1184 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2333,121 +2351,115 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 22060 i32.ge_u if - local.get $1 - local.get $3 + local.get $0 + local.get $2 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/string/String.UTF8.decodeUnsafe (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -2666,7 +2678,7 @@ if i32.const 0 i32.const 1184 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -3063,6 +3075,8 @@ call $~lib/builtins/abort unreachable end + i32.const 22064 + global.set $~lib/rt/common/root call $std/string-encoding/testUTF16Encode i32.const 1040 call $~lib/string/String.UTF16.encode @@ -3210,7 +3224,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/string-encoding.untouched.wat b/tests/compiler/std/string-encoding.untouched.wat index 49ea1dfcdb..c8eb9aca16 100644 --- a/tests/compiler/std/string-encoding.untouched.wat +++ b/tests/compiler/std/string-encoding.untouched.wat @@ -1,13 +1,12 @@ (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -35,9 +34,9 @@ (data (i32.const 13680) "\ba\1c\00\00\01\00\00\00\01\00\00\00\ba\1c\00\00S\00e\00n\00t\00e\00n\00c\00e\00s\00 \00t\00h\00a\00t\00 \00c\00o\00n\00t\00a\00i\00n\00 \00a\00l\00l\00 \00l\00e\00t\00t\00e\00r\00s\00 \00c\00o\00m\00m\00o\00n\00l\00y\00 \00u\00s\00e\00d\00 \00i\00n\00 \00a\00 \00l\00a\00n\00g\00u\00a\00g\00e\00\n\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-\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-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00M\00a\00r\00k\00u\00s\00 \00K\00u\00h\00n\00 \00<\00h\00t\00t\00p\00:\00/\00/\00w\00w\00w\00.\00c\00l\00.\00c\00a\00m\00.\00a\00c\00.\00u\00k\00/\00~\00m\00g\00k\002\005\00/\00>\00 \00-\00-\00 \002\000\001\002\00-\000\004\00-\001\001\00\n\00\n\00T\00h\00i\00s\00 \00i\00s\00 \00a\00n\00 \00e\00x\00a\00m\00p\00l\00e\00 \00o\00f\00 \00a\00 \00p\00l\00a\00i\00n\00-\00t\00e\00x\00t\00 \00f\00i\00l\00e\00 \00e\00n\00c\00o\00d\00e\00d\00 \00i\00n\00 \00U\00T\00F\00-\008\00.\00\n\00\n\00\n\00D\00a\00n\00i\00s\00h\00 \00(\00d\00a\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00Q\00u\00i\00z\00d\00e\00l\00t\00a\00g\00e\00r\00n\00e\00 \00s\00p\00i\00s\00t\00e\00 \00j\00o\00r\00d\00b\00\e6\00r\00 \00m\00e\00d\00 \00f\00l\00\f8\00d\00e\00,\00 \00m\00e\00n\00s\00 \00c\00i\00r\00k\00u\00s\00k\00l\00o\00v\00n\00e\00n\00\n\00 \00 \00W\00o\00l\00t\00h\00e\00r\00 \00s\00p\00i\00l\00l\00e\00d\00e\00 \00p\00\e5\00 \00x\00y\00l\00o\00f\00o\00n\00.\00\n\00 \00 \00(\00=\00 \00Q\00u\00i\00z\00 \00c\00o\00n\00t\00e\00s\00t\00a\00n\00t\00s\00 \00w\00e\00r\00e\00 \00e\00a\00t\00i\00n\00g\00 \00s\00t\00r\00a\00w\00b\00e\00r\00y\00 \00w\00i\00t\00h\00 \00c\00r\00e\00a\00m\00 \00w\00h\00i\00l\00e\00 \00W\00o\00l\00t\00h\00e\00r\00\n\00 \00 \00t\00h\00e\00 \00c\00i\00r\00c\00u\00s\00 \00c\00l\00o\00w\00n\00 \00p\00l\00a\00y\00e\00d\00 \00o\00n\00 \00x\00y\00l\00o\00p\00h\00o\00n\00e\00.\00)\00\n\00\n\00G\00e\00r\00m\00a\00n\00 \00(\00d\00e\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00F\00a\00l\00s\00c\00h\00e\00s\00 \00\dc\00b\00e\00n\00 \00v\00o\00n\00 \00X\00y\00l\00o\00p\00h\00o\00n\00m\00u\00s\00i\00k\00 \00q\00u\00\e4\00l\00t\00 \00j\00e\00d\00e\00n\00 \00g\00r\00\f6\00\df\00e\00r\00e\00n\00 \00Z\00w\00e\00r\00g\00\n\00 \00 \00(\00=\00 \00W\00r\00o\00n\00g\00f\00u\00l\00 \00p\00r\00a\00c\00t\00i\00c\00i\00n\00g\00 \00o\00f\00 \00x\00y\00l\00o\00p\00h\00o\00n\00e\00 \00m\00u\00s\00i\00c\00 \00t\00o\00r\00t\00u\00r\00e\00s\00 \00e\00v\00e\00r\00y\00 \00l\00a\00r\00g\00e\00r\00 \00d\00w\00a\00r\00f\00)\00\n\00\n\00 \00 \00Z\00w\00\f6\00l\00f\00 \00B\00o\00x\00k\00\e4\00m\00p\00f\00e\00r\00 \00j\00a\00g\00t\00e\00n\00 \00E\00v\00a\00 \00q\00u\00e\00r\00 \00\fc\00b\00e\00r\00 \00d\00e\00n\00 \00S\00y\00l\00t\00e\00r\00 \00D\00e\00i\00c\00h\00\n\00 \00 \00(\00=\00 \00T\00w\00e\00l\00v\00e\00 \00b\00o\00x\00i\00n\00g\00 \00f\00i\00g\00h\00t\00e\00r\00s\00 \00h\00u\00n\00t\00e\00d\00 \00E\00v\00a\00 \00a\00c\00r\00o\00s\00s\00 \00t\00h\00e\00 \00d\00i\00k\00e\00 \00o\00f\00 \00S\00y\00l\00t\00)\00\n\00\n\00 \00 \00H\00e\00i\00z\00\f6\00l\00r\00\fc\00c\00k\00s\00t\00o\00\df\00a\00b\00d\00\e4\00m\00p\00f\00u\00n\00g\00\n\00 \00 \00(\00=\00 \00f\00u\00e\00l\00 \00o\00i\00l\00 \00r\00e\00c\00o\00i\00l\00 \00a\00b\00s\00o\00r\00b\00e\00r\00)\00\n\00 \00 \00(\00j\00q\00v\00w\00x\00y\00 \00m\00i\00s\00s\00i\00n\00g\00,\00 \00b\00u\00t\00 \00a\00l\00l\00 \00n\00o\00n\00-\00A\00S\00C\00I\00I\00 \00l\00e\00t\00t\00e\00r\00s\00 \00i\00n\00 \00o\00n\00e\00 \00w\00o\00r\00d\00)\00\n\00\n\00G\00r\00e\00e\00k\00 \00(\00e\00l\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00\93\03\b1\03\b6\03\ad\03\b5\03\c2\03 \00\ba\03\b1\03v\1f \00\bc\03\c5\03\c1\03\c4\03\b9\03r\1f\c2\03 \00\b4\03r\1f\bd\03 \00\b8\03p\1f \00\b2\03\c1\03\f6\1f \00\c0\03\b9\03p\1f \00\c3\03\c4\03x\1f \00\c7\03\c1\03\c5\03\c3\03\b1\03\c6\03v\1f \00\be\03\ad\03\c6\03\c9\03\c4\03\bf\03\n\00 \00 \00(\00=\00 \00N\00o\00 \00m\00o\00r\00e\00 \00s\00h\00a\00l\00l\00 \00I\00 \00s\00e\00e\00 \00a\00c\00a\00c\00i\00a\00s\00 \00o\00r\00 \00m\00y\00r\00t\00l\00e\00s\00 \00i\00n\00 \00t\00h\00e\00 \00g\00o\00l\00d\00e\00n\00 \00c\00l\00e\00a\00r\00i\00n\00g\00)\00\n\00\n\00 \00 \00\9e\03\b5\03\c3\03\ba\03\b5\03\c0\03\ac\03\b6\03\c9\03 \00\c4\03t\1f\bd\03 \00\c8\03\c5\03\c7\03\bf\03\c6\03\b8\03\cc\03\c1\03\b1\03 \00\b2\03\b4\03\b5\03\bb\03\c5\03\b3\03\bc\03\af\03\b1\03\n\00 \00 \00(\00=\00 \00I\00 \00u\00n\00c\00o\00v\00e\00r\00 \00t\00h\00e\00 \00s\00o\00u\00l\00-\00d\00e\00s\00t\00r\00o\00y\00i\00n\00g\00 \00a\00b\00h\00o\00r\00r\00e\00n\00c\00e\00)\00\n\00\n\00E\00n\00g\00l\00i\00s\00h\00 \00(\00e\00n\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00T\00h\00e\00 \00q\00u\00i\00c\00k\00 \00b\00r\00o\00w\00n\00 \00f\00o\00x\00 \00j\00u\00m\00p\00s\00 \00o\00v\00e\00r\00 \00t\00h\00e\00 \00l\00a\00z\00y\00 \00d\00o\00g\00\n\00\n\00S\00p\00a\00n\00i\00s\00h\00 \00(\00e\00s\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00E\00l\00 \00p\00i\00n\00g\00\fc\00i\00n\00o\00 \00W\00e\00n\00c\00e\00s\00l\00a\00o\00 \00h\00i\00z\00o\00 \00k\00i\00l\00\f3\00m\00e\00t\00r\00o\00s\00 \00b\00a\00j\00o\00 \00e\00x\00h\00a\00u\00s\00t\00i\00v\00a\00 \00l\00l\00u\00v\00i\00a\00 \00y\00\n\00 \00 \00f\00r\00\ed\00o\00,\00 \00a\00\f1\00o\00r\00a\00b\00a\00 \00a\00 \00s\00u\00 \00q\00u\00e\00r\00i\00d\00o\00 \00c\00a\00c\00h\00o\00r\00r\00o\00.\00\n\00 \00 \00(\00C\00o\00n\00t\00a\00i\00n\00s\00 \00e\00v\00e\00r\00y\00 \00l\00e\00t\00t\00e\00r\00 \00a\00n\00d\00 \00e\00v\00e\00r\00y\00 \00a\00c\00c\00e\00n\00t\00,\00 \00b\00u\00t\00 \00n\00o\00t\00 \00e\00v\00e\00r\00y\00 \00c\00o\00m\00b\00i\00n\00a\00t\00i\00o\00n\00\n\00 \00 \00o\00f\00 \00v\00o\00w\00e\00l\00 \00+\00 \00a\00c\00u\00t\00e\00.\00)\00\n\00\n\00F\00r\00e\00n\00c\00h\00 \00(\00f\00r\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00P\00o\00r\00t\00e\00z\00 \00c\00e\00 \00v\00i\00e\00u\00x\00 \00w\00h\00i\00s\00k\00y\00 \00a\00u\00 \00j\00u\00g\00e\00 \00b\00l\00o\00n\00d\00 \00q\00u\00i\00 \00f\00u\00m\00e\00 \00s\00u\00r\00 \00s\00o\00n\00 \00\ee\00l\00e\00 \00i\00n\00t\00\e9\00r\00i\00e\00u\00r\00e\00,\00 \00\e0\00\n\00 \00 \00c\00\f4\00t\00\e9\00 \00d\00e\00 \00l\00\'\00a\00l\00c\00\f4\00v\00e\00 \00o\00v\00o\00\ef\00d\00e\00,\00 \00o\00\f9\00 \00l\00e\00s\00 \00b\00\fb\00c\00h\00e\00s\00 \00s\00e\00 \00c\00o\00n\00s\00u\00m\00e\00n\00t\00 \00d\00a\00n\00s\00 \00l\00\'\00\e2\00t\00r\00e\00,\00 \00c\00e\00\n\00 \00 \00q\00u\00i\00 \00l\00u\00i\00 \00p\00e\00r\00m\00e\00t\00 \00d\00e\00 \00p\00e\00n\00s\00e\00r\00 \00\e0\00 \00l\00a\00 \00c\00\e6\00n\00o\00g\00e\00n\00\e8\00s\00e\00 \00d\00e\00 \00l\00\'\00\ea\00t\00r\00e\00 \00d\00o\00n\00t\00 \00i\00l\00 \00e\00s\00t\00 \00q\00u\00e\00s\00t\00i\00o\00n\00\n\00 \00 \00d\00a\00n\00s\00 \00l\00a\00 \00c\00a\00u\00s\00e\00 \00a\00m\00b\00i\00g\00u\00\eb\00 \00e\00n\00t\00e\00n\00d\00u\00e\00 \00\e0\00 \00M\00o\00\ff\00,\00 \00d\00a\00n\00s\00 \00u\00n\00 \00c\00a\00p\00h\00a\00r\00n\00a\00\fc\00m\00 \00q\00u\00i\00,\00\n\00 \00 \00p\00e\00n\00s\00e\00-\00t\00-\00i\00l\00,\00 \00d\00i\00m\00i\00n\00u\00e\00 \00\e7\00\e0\00 \00e\00t\00 \00l\00\e0\00 \00l\00a\00 \00q\00u\00a\00l\00i\00t\00\e9\00 \00d\00e\00 \00s\00o\00n\00 \00S\01u\00v\00r\00e\00.\00\n\00\n\00 \00 \00l\00\'\00\ee\00l\00e\00 \00e\00x\00i\00g\00u\00\eb\00\n\00 \00 \00O\00\f9\00 \00l\00\'\00o\00b\00\e8\00s\00e\00 \00j\00u\00r\00y\00 \00m\00\fb\00r\00\n\00 \00 \00F\00\ea\00t\00e\00 \00l\00\'\00h\00a\00\ef\00 \00v\00o\00l\00a\00p\00\fc\00k\00,\00\n\00 \00 \00\c2\00n\00e\00 \00e\00x\00 \00a\00\e9\00q\00u\00o\00 \00a\00u\00 \00w\00h\00i\00s\00t\00,\00\n\00 \00 \00\d4\00t\00e\00z\00 \00c\00e\00 \00v\00S\01u\00 \00d\00\e9\00\e7\00u\00.\00\n\00\n\00 \00 \00L\00e\00 \00c\00S\01u\00r\00 \00d\00\e9\00\e7\00u\00 \00m\00a\00i\00s\00 \00l\00\'\00\e2\00m\00e\00 \00p\00l\00u\00t\00\f4\00t\00 \00n\00a\00\ef\00v\00e\00,\00 \00L\00o\00u\00\ff\00s\00 \00r\00\ea\00v\00a\00 \00d\00e\00 \00c\00r\00a\00p\00a\00\fc\00t\00e\00r\00 \00e\00n\00\n\00 \00 \00c\00a\00n\00o\00\eb\00 \00a\00u\00 \00d\00e\00l\00\e0\00 \00d\00e\00s\00 \00\ee\00l\00e\00s\00,\00 \00p\00r\00\e8\00s\00 \00d\00u\00 \00m\00\e4\00l\00s\00t\00r\00\f6\00m\00 \00o\00\f9\00 \00b\00r\00\fb\00l\00e\00n\00t\00 \00l\00e\00s\00 \00n\00o\00v\00\e6\00.\00\n\00\n\00I\00r\00i\00s\00h\00 \00G\00a\00e\00l\00i\00c\00 \00(\00g\00a\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00D\00\'\00f\00h\00u\00a\00s\00c\00a\00i\00l\00 \00\cd\00o\00s\00a\00,\00 \00\da\00r\00m\00h\00a\00c\00 \00n\00a\00 \00h\00\d3\00i\00g\00h\00e\00 \00B\00e\00a\00n\00n\00a\00i\00t\00h\00e\00,\00 \00p\00\f3\00r\00 \00\c9\00a\00v\00a\00 \00a\00g\00u\00s\00 \00\c1\00d\00h\00a\00i\00m\00h\00\n\00\n\00H\00u\00n\00g\00a\00r\00i\00a\00n\00 \00(\00h\00u\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00\c1\00r\00v\00\ed\00z\00t\00q\01r\00Q\01 \00t\00\fc\00k\00\f6\00r\00f\00\fa\00r\00\f3\00g\00\e9\00p\00\n\00 \00 \00(\00=\00 \00f\00l\00o\00o\00d\00-\00p\00r\00o\00o\00f\00 \00m\00i\00r\00r\00o\00r\00-\00d\00r\00i\00l\00l\00i\00n\00g\00 \00m\00a\00c\00h\00i\00n\00e\00,\00 \00o\00n\00l\00y\00 \00a\00l\00l\00 \00n\00o\00n\00-\00A\00S\00C\00I\00I\00 \00l\00e\00t\00t\00e\00r\00s\00)\00\n\00\n\00I\00c\00e\00l\00a\00n\00d\00i\00c\00 \00(\00i\00s\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00K\00\e6\00m\00i\00 \00n\00\fd\00 \00\f6\00x\00i\00 \00h\00\e9\00r\00 \00y\00k\00i\00s\00t\00 \00\fe\00j\00\f3\00f\00u\00m\00 \00n\00\fa\00 \00b\00\e6\00\f0\00i\00 \00v\00\ed\00l\00 \00o\00g\00 \00\e1\00d\00r\00e\00p\00a\00\n\00\n\00 \00 \00S\00\e6\00v\00\f6\00r\00 \00g\00r\00\e9\00t\00 \00\e1\00\f0\00a\00n\00 \00\fe\00v\00\ed\00 \00\fa\00l\00p\00a\00n\00 \00v\00a\00r\00 \00\f3\00n\00\fd\00t\00\n\00 \00 \00(\00s\00o\00m\00e\00 \00A\00S\00C\00I\00I\00 \00l\00e\00t\00t\00e\00r\00s\00 \00m\00i\00s\00s\00i\00n\00g\00)\00\n\00\n\00J\00a\00p\00a\00n\00e\00s\00e\00 \00(\00j\00p\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00H\00i\00r\00a\00g\00a\00n\00a\00:\00 \00(\00I\00r\00o\00h\00a\00)\00\n\00\n\00 \00 \00D0\8d0o0k0{0x0h0a0\8a0l0\8b0\920\n\00 \00 \00\8f0K0\880_0\8c0]0d0m0j0\890\800\n\00 \00 \00F0\900n0J0O0\840~0Q0u0S0H0f0\n\00 \00 \00B0U0M0\860\810\7f0W0\910r0\820[0Y0\n\00\n\00 \00 \00K\00a\00t\00a\00k\00a\00n\00a\00:\00\n\00\n\00 \00 \00\a40\ed0\cf0\cb0\db0\d80\c80 \00\c10\ea0\cc0\eb0\f20 \00\ef0\ab0\e80\bf0\ec0\bd0 \00\c40\cd0\ca0\e90\e00\n\00 \00 \00\a60\f00\ce0\aa0\af0\e40\de0 \00\b10\d50\b30\a80\c60 \00\a20\b50\ad0\e60\e10\df0\b70 \00\f10\d20\e20\bb0\b90\f30\n\00\n\00H\00e\00b\00r\00e\00w\00 \00(\00i\00w\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00?\00 \00\d3\05\d2\05 \00\e1\05\e7\05\e8\05\df\05 \00\e9\05\d8\05 \00\d1\05\d9\05\dd\05 \00\de\05\d0\05\d5\05\db\05\d6\05\d1\05 \00\d5\05\dc\05\e4\05\ea\05\e2\05 \00\de\05\e6\05\d0\05 \00\dc\05\d5\05 \00\d7\05\d1\05\e8\05\d4\05 \00\d0\05\d9\05\da\05 \00\d4\05\e7\05\dc\05\d9\05\d8\05\d4\05\n\00\n\00P\00o\00l\00i\00s\00h\00 \00(\00p\00l\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00P\00c\00h\00n\00\05\01\07\01 \00w\00 \00t\00\19\01 \00B\01\f3\00d\00z\01 \00j\00e\00|\01a\00 \00l\00u\00b\00 \00o\00[\01m\00 \00s\00k\00r\00z\00y\00D\01 \00f\00i\00g\00\n\00 \00 \00(\00=\00 \00T\00o\00 \00p\00u\00s\00h\00 \00a\00 \00h\00e\00d\00g\00e\00h\00o\00g\00 \00o\00r\00 \00e\00i\00g\00h\00t\00 \00b\00i\00n\00s\00 \00o\00f\00 \00f\00i\00g\00s\00 \00i\00n\00 \00t\00h\00i\00s\00 \00b\00o\00a\00t\00)\00\n\00\n\00R\00u\00s\00s\00i\00a\00n\00 \00(\00r\00u\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00\12\04 \00G\040\04I\040\04E\04 \00N\043\040\04 \006\048\04;\04 \001\04K\04 \00F\048\04B\04@\04C\04A\04?\00 \00\14\040\04,\00 \00=\04>\04 \00D\040\04;\04L\04H\048\042\04K\049\04 \00M\04:\047\045\04<\04?\04;\04O\04@\04!\00\n\00 \00 \00(\00=\00 \00W\00o\00u\00l\00d\00 \00a\00 \00c\00i\00t\00r\00u\00s\00 \00l\00i\00v\00e\00 \00i\00n\00 \00t\00h\00e\00 \00b\00u\00s\00h\00e\00s\00 \00o\00f\00 \00s\00o\00u\00t\00h\00?\00 \00Y\00e\00s\00,\00 \00b\00u\00t\00 \00o\00n\00l\00y\00 \00a\00 \00f\00a\00k\00e\00 \00o\00n\00e\00!\00)\00\n\00\n\00 \00 \00!\04J\045\04H\04L\04 \006\045\04 \005\04I\04Q\04 \00M\04B\048\04E\04 \00<\04O\043\04:\048\04E\04 \00D\04@\040\04=\04F\04C\047\04A\04:\048\04E\04 \001\04C\04;\04>\04:\04 \004\040\04 \002\04K\04?\045\049\04 \00G\040\04N\04\n\00 \00 \00(\00=\00 \00E\00a\00t\00 \00s\00o\00m\00e\00 \00m\00o\00r\00e\00 \00o\00f\00 \00t\00h\00e\00s\00e\00 \00f\00r\00e\00s\00h\00 \00F\00r\00e\00n\00c\00h\00 \00l\00o\00a\00f\00s\00 \00a\00n\00d\00 \00h\00a\00v\00e\00 \00s\00o\00m\00e\00 \00t\00e\00a\00)\00\n\00\n\00T\00h\00a\00i\00 \00(\00t\00h\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\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-\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-\00-\00-\00-\00-\00]\00\n\00 \00 \00O\0e \00@\0e\1b\0eG\0e\19\0e!\0e\19\0e8\0e)\0e\"\0eL\0e*\0e8\0e\14\0e\1b\0e#\0e0\0e@\0e*\0e#\0e4\0e\10\0e@\0e%\0e4\0e(\0e\04\0e8\0e\13\0e\04\0eH\0e2\0e \00 \00\01\0e\'\0eH\0e2\0e\1a\0e#\0e#\0e\14\0e2\0e\1d\0e9\0e\07\0e*\0e1\0e\15\0e\'\0eL\0e@\0e\14\0e#\0e1\0e\08\0e\t\0e2\0e\19\0e\n\00 \00 \00\08\0e\07\0e\1d\0eH\0e2\0e\1f\0e1\0e\19\0e\1e\0e1\0e\12\0e\19\0e2\0e\'\0e4\0e\n\0e2\0e\01\0e2\0e#\0e \00 \00 \00 \00 \00 \00 \00 \00 \00 \00 \00-\0e\"\0eH\0e2\0e%\0eI\0e2\0e\07\0e\1c\0e%\0e2\0e\0d\0e$\0eE\0e@\0e\02\0eH\0e\19\0e\06\0eH\0e2\0e\1a\0e5\0e\11\0e2\0eC\0e\04\0e#\0e\n\00 \00 \00D\0e!\0eH\0e\16\0e7\0e-\0eB\0e\17\0e)\0eB\0e\01\0e#\0e\18\0eA\0e\n\0eH\0e\07\0e\0b\0e1\0e\14\0e.\0e6\0e\14\0e.\0e1\0e\14\0e\14\0eH\0e2\0e \00 \00 \00 \00 \00+\0e1\0e\14\0e-\0e \0e1\0e\"\0e@\0e+\0e!\0e7\0e-\0e\19\0e\01\0e5\0e,\0e2\0e-\0e1\0e\n\0e\0c\0e2\0e*\0e1\0e\"\0e\n\00 \00 \00\1b\0e\0f\0e4\0e\1a\0e1\0e\15\0e4\0e\1b\0e#\0e0\0e\1e\0e$\0e\15\0e4\0e\01\0e\0e\0e\01\0e3\0e+\0e\19\0e\14\0eC\0e\08\0e \00 \00 \00 \00 \00 \00 \00 \00\1e\0e9\0e\14\0e\08\0e2\0eC\0e+\0eI\0e\08\0eJ\0e0\0eF\0e \00\08\0eK\0e2\0eF\0e \00\19\0eH\0e2\0e\1f\0e1\0e\07\0e@\0e-\0e\"\0e \00/\0e\n\00\n\00 \00 \00[\00T\00h\00e\00 \00c\00o\00p\00y\00r\00i\00g\00h\00t\00 \00f\00o\00r\00 \00t\00h\00e\00 \00T\00h\00a\00i\00 \00e\00x\00a\00m\00p\00l\00e\00 \00i\00s\00 \00o\00w\00n\00e\00d\00 \00b\00y\00 \00T\00h\00e\00 \00C\00o\00m\00p\00u\00t\00e\00r\00\n\00 \00 \00A\00s\00s\00o\00c\00i\00a\00t\00i\00o\00n\00 \00o\00f\00 \00T\00h\00a\00i\00l\00a\00n\00d\00 \00u\00n\00d\00e\00r\00 \00t\00h\00e\00 \00R\00o\00y\00a\00l\00 \00P\00a\00t\00r\00o\00n\00a\00g\00e\00 \00o\00f\00 \00H\00i\00s\00 \00M\00a\00j\00e\00s\00t\00y\00 \00t\00h\00e\00\n\00 \00 \00K\00i\00n\00g\00.\00]\00\n\00\n\00T\00u\00r\00k\00i\00s\00h\00 \00(\00t\00r\00)\00\n\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00-\00\n\00\n\00 \00 \00P\00i\00j\00a\00m\00a\00l\001\01 \00h\00a\00s\00t\00a\00,\00 \00y\00a\00\1f\011\01z\00 \00_\01o\00f\00\f6\00r\00e\00 \00\e7\00a\00b\00u\00c\00a\00k\00 \00g\00\fc\00v\00e\00n\00d\00i\00.\00\n\00 \00 \00(\00=\00P\00a\00t\00i\00e\00n\00t\00 \00w\00i\00t\00h\00 \00p\00a\00j\00a\00m\00a\00s\00,\00 \00t\00r\00u\00s\00t\00e\00d\00 \00s\00w\00a\00r\00t\00h\00y\00 \00d\00r\00i\00v\00e\00r\00 \00q\00u\00i\00c\00k\00l\00y\00)\00\n\00") (table $0 1 funcref) (global $std/string-encoding/str (mut i32) (i32.const 32)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 21052)) @@ -148,7 +147,8 @@ unreachable end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -157,38 +157,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 176 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -198,29 +196,29 @@ if i32.const 0 i32.const 176 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -228,21 +226,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -252,119 +250,112 @@ if i32.const 0 i32.const 176 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -374,184 +365,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 176 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 176 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 176 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -561,52 +547,52 @@ if i32.const 0 i32.const 176 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 176 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -614,21 +600,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -638,109 +624,100 @@ if i32.const 0 i32.const 176 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -748,7 +725,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -759,24 +736,22 @@ if i32.const 0 i32.const 176 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -784,50 +759,50 @@ if i32.const 0 i32.const 176 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 176 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -838,53 +813,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -894,26 +866,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -923,13 +896,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -940,84 +913,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1025,20 +987,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1049,7 +1007,7 @@ if i32.const 224 i32.const 176 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1069,34 +1027,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1104,16 +1061,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1121,21 +1078,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1145,160 +1102,150 @@ if i32.const 0 i32.const 176 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 176 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl - i32.const 16 - i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + i32.const 16 + i32.sub + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1307,22 +1254,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1331,27 +1278,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1359,74 +1305,73 @@ if i32.const 0 i32.const 176 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1441,86 +1386,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 176 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 176 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 176 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1529,44 +1481,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 176 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -4214,46 +4164,45 @@ if i32.const 0 i32.const 176 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -4261,106 +4210,101 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 1 drop - local.get $1 - local.get $8 + local.get $0 + local.get $7 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -5014,6 +4958,14 @@ ) (func $start:std/string-encoding call $std/string-encoding/testUTF16Length + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $std/string-encoding/testUTF16Encode call $std/string-encoding/testUTF16Decode call $std/string-encoding/testUTF16DecodeUnsafe @@ -5087,7 +5039,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 05421d9639..f6ae3f3f62 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -1,14 +1,14 @@ (module (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) - (type $i64_=>_i32 (func (param i64) (result i32))) (type $none_=>_none (func)) + (type $i64_=>_i32 (func (param i64) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_=>_f64 (func (param i32) (result f64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) @@ -370,8 +370,7 @@ (data (i32.const 17840) "\0e\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004") (data (i32.const 17872) "\16\00\00\00\01\00\00\00\01\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009") (global $std/string/str (mut i32) (i32.const 1040)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/util/string/__fixmulShift (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) @@ -577,33 +576,33 @@ i32.const 1 end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1360 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -613,42 +612,42 @@ if i32.const 0 i32.const 1360 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -656,235 +655,235 @@ if i32.const 0 i32.const 1360 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1360 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1360 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1360 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -894,62 +893,62 @@ if i32.const 0 i32.const 1360 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1360 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -957,82 +956,84 @@ if i32.const 0 i32.const 1360 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -1040,112 +1041,130 @@ if i32.const 0 i32.const 1360 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1360 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1360 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -1157,47 +1176,43 @@ if unreachable end - i32.const 17920 - local.tee $0 + global.get $~lib/rt/common/root i32.const 0 - i32.store - i32.const 19488 - i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 17920 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 17920 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -1208,16 +1223,16 @@ br $for-loop|0 end end - i32.const 17920 - i32.const 19504 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 17920 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -1226,7 +1241,7 @@ if i32.const 1408 i32.const 1360 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1243,55 +1258,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -1299,144 +1314,143 @@ if i32.const 0 i32.const 1360 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1360 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1360 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -1447,60 +1461,69 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1360 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -1511,18 +1534,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1530,62 +1553,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1360 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1360 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -4300,128 +4319,122 @@ if i32.const 0 i32.const 1360 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 17912 i32.ge_u if - local.get $1 - local.get $3 + local.get $0 + local.get $2 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -7069,6 +7082,8 @@ call $~lib/builtins/abort unreachable end + i32.const 17920 + global.set $~lib/rt/common/root i32.const 1 global.set $~argumentsLength i32.const 0 @@ -14322,7 +14337,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index 031785e12e..5a35c3129d 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -1,18 +1,18 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_none (func)) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_=>_f64 (func (param i32) (result f64))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) @@ -376,9 +376,9 @@ (global $std/string/str (mut i32) (i32.const 32)) (global $std/string/nullStr (mut i32) (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/string/String.MAX_LENGTH i32 (i32.const 536870904)) @@ -725,7 +725,8 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -734,38 +735,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 352 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -775,29 +774,29 @@ if i32.const 0 i32.const 352 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -805,21 +804,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -829,119 +828,112 @@ if i32.const 0 i32.const 352 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -951,184 +943,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 352 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 352 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 352 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -1138,52 +1125,52 @@ if i32.const 0 i32.const 352 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 352 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -1191,21 +1178,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -1215,109 +1202,100 @@ if i32.const 0 i32.const 352 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -1325,7 +1303,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1336,24 +1314,22 @@ if i32.const 0 i32.const 352 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -1361,50 +1337,50 @@ if i32.const 0 i32.const 352 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 352 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -1415,53 +1391,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -1471,26 +1444,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -1500,13 +1474,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -1517,84 +1491,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1602,20 +1565,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1626,7 +1585,7 @@ if i32.const 400 i32.const 352 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1646,34 +1605,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1681,16 +1639,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1698,21 +1656,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1722,160 +1680,150 @@ if i32.const 0 i32.const 352 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 352 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1883,23 +1831,23 @@ i32.xor i32.and i32.const 16 - i32.shr_u - local.set $4 - local.get $2 + i32.shr_u + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1908,27 +1856,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1936,74 +1883,73 @@ if i32.const 0 i32.const 352 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -2018,86 +1964,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 352 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 352 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 352 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -2106,44 +2059,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 352 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -7250,46 +7201,45 @@ if i32.const 0 i32.const 352 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -7297,106 +7247,101 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 1 drop - local.get $1 - local.get $8 + local.get $0 + local.get $7 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -11059,6 +11004,14 @@ call $~lib/builtins/abort unreachable end + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 i32.const 1 global.set $~argumentsLength @@ -18670,7 +18623,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 4ec3ad891f..6b8abd189d 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -4,8 +4,8 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i64_i32_i32_=>_i32 (func (param i64 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32))) @@ -28,7 +28,6 @@ (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $f32_i32_i32_=>_none (func (param f32 i32 i32))) (type $f64_i32_i32_=>_none (func (param f64 i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) @@ -192,8 +191,7 @@ (data (i32.const 8304) "\n\00\00\00\01\00\00\00\00\00\00\00\n\00\00\00\01\ffd\ff\00\00d\n\ff") (table $0 123 funcref) (elem (i32.const 1) $~lib/util/sort/COMPARATOR~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1 $std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0 $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $std/typedarray/forEachCallCount (mut i32) (i32.const 0)) (global $std/typedarray/forEachSelf (mut i32) (i32.const 0)) @@ -217,33 +215,33 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -253,42 +251,42 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -296,235 +294,235 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1152 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1152 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -534,62 +532,62 @@ if i32.const 0 i32.const 1152 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1152 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -597,82 +595,84 @@ if i32.const 0 i32.const 1152 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -680,112 +680,130 @@ if i32.const 0 i32.const 1152 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1152 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -797,47 +815,43 @@ if unreachable end - i32.const 8336 - local.tee $0 - i32.const 0 - i32.store - i32.const 9904 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 8336 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 8336 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -848,16 +862,16 @@ br $for-loop|0 end end - i32.const 8336 - i32.const 9920 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 8336 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) local.get $0 @@ -866,7 +880,7 @@ if i32.const 1200 i32.const 1152 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -883,55 +897,55 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 i32.const 256 i32.lt_u if - local.get $1 + local.get $0 i32.const 4 i32.shr_u - local.set $1 + local.set $0 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.add i32.const 1 i32.sub - local.set $1 + local.set $0 end - local.get $1 + local.get $0 i32.const 31 - local.get $1 + local.get $0 i32.clz i32.sub - local.tee $2 + local.tee $1 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $1 - local.get $2 + local.set $0 + local.get $1 i32.const 7 i32.sub - local.set $2 + local.set $1 end - local.get $1 + local.get $0 i32.const 16 i32.lt_u i32.const 0 - local.get $2 + local.get $1 i32.const 23 i32.lt_u select @@ -939,144 +953,143 @@ if i32.const 0 i32.const 1152 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const -1 - local.get $1 + local.get $0 i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.get $2 + local.get $1 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -1 - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1152 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $1 + local.get $0 i32.load - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 15 i32.and if i32.const 0 i32.const 1152 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const -4 i32.and - local.get $2 + local.get $1 i32.sub - local.tee $4 + local.tee $3 i32.const 32 i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.tee $1 - local.get $4 + local.tee $0 + local.get $3 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 + local.get $0 + local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -1087,60 +1100,69 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1152 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end local.get $0 - local.get $1 call $~lib/rt/tlsf/prepareSize - local.tee $4 - call $~lib/rt/tlsf/searchBlock local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $2 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $4 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 16 memory.size - local.tee $3 + local.tee $2 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl - local.get $4 + local.get $3 i32.const 1 i32.const 27 - local.get $4 + local.get $3 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.get $4 - local.get $4 + local.get $3 + local.get $3 i32.const 536870904 i32.lt_u select @@ -1151,18 +1173,18 @@ i32.and i32.const 16 i32.shr_u - local.set $5 - local.get $3 - local.get $5 - local.get $3 - local.get $5 + local.set $4 + local.get $2 + local.get $4 + local.get $2 + local.get $4 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $5 + local.get $4 memory.grow i32.const 0 i32.lt_s @@ -1170,62 +1192,58 @@ unreachable end end - local.get $0 - local.get $3 + local.get $2 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/searchBlock - local.tee $3 + local.tee $2 i32.eqz if i32.const 0 i32.const 1152 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $3 + local.get $2 i32.load i32.const -4 i32.and - local.get $4 + local.get $3 i32.lt_u if i32.const 0 i32.const 1152 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 0 i32.store offset=4 - local.get $3 local.get $2 - i32.store offset=8 - local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $2 local.get $0 - local.get $3 + i32.store offset=12 + local.get $2 call $~lib/rt/tlsf/removeBlock - local.get $0 + local.get $2 local.get $3 - local.get $4 call $~lib/rt/tlsf/prepareBlock - local.get $3 + local.get $2 call $~lib/rt/rtrace/onalloc - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2449,26 +2467,31 @@ if i32.const 0 i32.const 1152 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - local.get $1 - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + local.get $0 + local.get $0 i32.load i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) + (func $~lib/rt/tlsf/__free (param $0 i32) + call $~lib/rt/tlsf/maybeInitialize + local.get $0 + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) (func $~lib/util/sort/weakHeapSort (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -2713,10 +2736,8 @@ br $for-loop|2 end end - call $~lib/rt/tlsf/maybeInitialize local.get $5 - call $~lib/rt/tlsf/checkUsedBlock - call $~lib/rt/tlsf/freeBlock + call $~lib/rt/tlsf/__free local.get $0 f64.load offset=8 local.set $4 @@ -4253,108 +4274,103 @@ i32.const 2 i32.gt_s ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.tee $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.tee $2 + local.get $0 i32.load - local.tee $5 + local.tee $4 i32.const -4 i32.and i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $6 + local.tee $5 i32.load - local.tee $4 + local.tee $3 i32.const 1 i32.and if - local.get $5 + local.get $4 i32.const -4 i32.and i32.const 16 i32.add - local.get $4 + local.get $3 i32.const -4 i32.and i32.add - local.tee $4 - local.get $3 + local.tee $3 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 - call $~lib/rt/tlsf/removeBlock - local.get $1 local.get $5 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $4 i32.const 3 i32.and - local.get $4 + local.get $3 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.tee $3 - local.get $1 + local.tee $2 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $3 + local.get $2 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 i32.const 8332 i32.ge_u if - local.get $1 - local.get $3 + local.get $0 + local.get $2 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $3 + local.get $2 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -19015,10 +19031,8 @@ local.get $1 local.get $2 call $~lib/string/String#substring - call $~lib/rt/tlsf/maybeInitialize local.get $1 - call $~lib/rt/tlsf/checkUsedBlock - call $~lib/rt/tlsf/freeBlock + call $~lib/rt/tlsf/__free ) (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 i32) (param $2 f64) (result i32) local.get $0 @@ -25923,6 +25937,8 @@ (local $28 i32) (local $29 i32) (local $30 i32) + i32.const 8336 + global.set $~lib/rt/common/root i32.const 0 call $std/typedarray/testInstantiate i32.const 5 @@ -32232,7 +32248,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index f73af30f0c..034a18095c 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -7,9 +7,9 @@ (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i64_i32_i32_=>_i32 (func (param i64 i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32))) (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32))) - (type $i32_=>_none (func (param i32))) (type $i64_i64_i32_i32_=>_i64 (func (param i64 i64 i32 i32) (result i64))) (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) @@ -37,7 +37,6 @@ (type $i32_i32_f64_=>_none (func (param i32 i32 f64))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) @@ -196,9 +195,9 @@ (global $~lib/typedarray/Uint64Array.BYTES_PER_ELEMENT i32 (i32.const 8)) (global $~lib/typedarray/Float32Array.BYTES_PER_ELEMENT i32 (i32.const 4)) (global $~lib/typedarray/Float64Array.BYTES_PER_ELEMENT i32 (i32.const 8)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) @@ -235,7 +234,8 @@ call $~lib/rt/pure/decrement end ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -244,38 +244,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -285,29 +283,29 @@ if i32.const 0 i32.const 144 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -315,21 +313,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -339,119 +337,112 @@ if i32.const 0 i32.const 144 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -461,184 +452,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 144 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 144 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -648,52 +634,52 @@ if i32.const 0 i32.const 144 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 144 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -701,21 +687,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -725,109 +711,100 @@ if i32.const 0 i32.const 144 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -835,7 +812,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -846,24 +823,22 @@ if i32.const 0 i32.const 144 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -871,50 +846,50 @@ if i32.const 0 i32.const 144 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -925,53 +900,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -981,26 +953,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -1010,13 +983,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -1027,84 +1000,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 i32.const 0 - i32.store - local.get $0 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1112,20 +1074,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1136,7 +1094,7 @@ if i32.const 192 i32.const 144 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1156,34 +1114,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1191,16 +1148,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1208,21 +1165,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1232,160 +1189,150 @@ if i32.const 0 i32.const 144 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 144 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1394,22 +1341,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1418,27 +1365,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1446,74 +1392,73 @@ if i32.const 0 i32.const 144 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1528,86 +1473,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 144 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 144 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1616,44 +1568,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 144 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -3213,29 +3163,28 @@ if i32.const 0 i32.const 144 - i32.const 581 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/tlsf/__free (param $0 i32) @@ -10611,21 +10560,21 @@ call $~lib/rt/pure/__release local.get $3 ) - (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/reallocateBlock (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 $2 - call $~lib/rt/tlsf/prepareSize - local.set $3 local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 i32.load - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 3 i32.const -1 i32.xor @@ -10633,106 +10582,101 @@ i32.le_u if local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock + local.get $0 local.get $1 - local.get $2 i32.store offset=12 - local.get $1 + local.get $0 return end - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $5 + local.get $5 + i32.load local.set $6 local.get $6 - i32.load - local.set $7 - local.get $7 i32.const 1 i32.and if - local.get $4 + local.get $3 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $7 + local.get $6 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $5 - local.get $5 - local.get $3 + local.set $4 + local.get $4 + local.get $2 i32.ge_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 3 i32.and - local.get $5 + local.get $4 i32.or i32.store + local.get $0 local.get $1 - local.get $2 i32.store offset=12 local.get $0 - local.get $1 - local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock - local.get $1 + local.get $0 return end end - local.get $0 - local.get $2 local.get $1 + local.get $0 i32.load offset=8 call $~lib/rt/tlsf/allocateBlock - local.set $8 - local.get $8 - local.get $1 + local.set $7 + local.get $7 + local.get $0 i32.load offset=4 i32.store offset=4 - local.get $8 + local.get $7 i32.const 16 i32.add - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 - call $~lib/memory/memory.copy local.get $1 + call $~lib/memory/memory.copy + local.get $0 global.get $~lib/heap/__heap_base i32.ge_u if i32.const 1 drop - local.get $1 - local.get $8 + local.get $0 + local.get $7 call $~lib/rt/rtrace/onrealloc local.get $0 - local.get $1 call $~lib/rt/tlsf/freeBlock end - local.get $8 + local.get $7 ) (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -53524,6 +53468,14 @@ i32.const 8 i32.eq drop + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root i32.const 0 call $std/typedarray/testInstantiate i32.const 5 @@ -55825,7 +55777,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/throw.untouched.wat b/tests/compiler/throw.untouched.wat index ea5e0ddf76..4fad12ff52 100644 --- a/tests/compiler/throw.untouched.wat +++ b/tests/compiler/throw.untouched.wat @@ -1,7 +1,7 @@ (module (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32))) @@ -19,7 +19,7 @@ (data (i32.const 336) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (data (i32.const 384) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00") (table $0 1 funcref) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 432)) (export "memory" (memory $0)) (export "doThrow" (func $throw/doThrow)) @@ -131,7 +131,8 @@ (func $~start call $start:throw ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -140,38 +141,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 400 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -181,29 +180,29 @@ if i32.const 0 i32.const 400 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -211,21 +210,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -235,119 +234,112 @@ if i32.const 0 i32.const 400 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -357,184 +349,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 400 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 400 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 400 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -544,52 +531,52 @@ if i32.const 0 i32.const 400 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 400 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -597,21 +584,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -621,110 +608,101 @@ if i32.const 0 i32.const 400 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -783,7 +761,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 9a365e4cff..b92e42e2fe 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -1,10 +1,8 @@ (module (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -17,8 +15,7 @@ (data (i32.const 1104) "(\00\00\00\01\00\00\00\01\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (data (i32.const 1168) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s") (global $while/ran (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) (global $~started (mut i32) (i32.const 0)) (export "_start" (func $~start)) (export "memory" (memory $0)) @@ -110,33 +107,33 @@ i32.const 1 global.set $while/ran ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -146,42 +143,42 @@ if i32.const 0 i32.const 1072 - i32.const 279 + i32.const 276 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $4 + local.tee $3 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $4 + local.set $1 + local.get $3 i32.const 7 i32.sub - local.set $4 + local.set $3 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $4 + local.get $3 i32.const 23 i32.lt_u select @@ -189,235 +186,235 @@ if i32.const 0 i32.const 1072 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=20 - local.set $3 - local.get $1 + local.set $2 + local.get $0 i32.load offset=16 - local.tee $5 + local.tee $4 if - local.get $5 - local.get $3 + local.get $4 + local.get $2 i32.store offset=20 end - local.get $3 + local.get $2 if - local.get $3 - local.get $5 + local.get $2 + local.get $4 i32.store offset=16 end - local.get $1 local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.get $2 - local.get $4 + global.get $~lib/rt/common/root + local.get $1 + local.get $3 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $3 - i32.store offset=96 - local.get $3 + local.get $2 + i32.store offset=128 + local.get $2 i32.eqz if - local.get $0 - local.get $4 + local.get $3 i32.const 2 i32.shl + local.tee $2 + global.get $~lib/rt/common/root i32.add - local.tee $3 - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.const -1 i32.xor i32.and - local.set $1 - local.get $3 - local.get $1 - i32.store offset=4 - local.get $1 + local.set $0 + local.get $2 + global.get $~lib/rt/common/root + i32.add + local.get $0 + i32.store offset=32 + local.get $0 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $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.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 1072 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.tee $3 + local.tee $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.tee $5 + local.tee $4 i32.const 1 i32.and if - local.get $3 + local.get $2 i32.const -4 i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const -4 i32.and i32.add - local.tee $2 + local.tee $1 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.tee $4 + local.tee $3 i32.load - local.set $5 + local.set $4 end end - local.get $3 + local.get $2 i32.const 2 i32.and if - local.get $1 + local.get $0 i32.const 4 i32.sub i32.load - local.tee $2 + local.tee $1 i32.load - local.tee $7 + local.tee $6 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 1072 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $7 + local.get $6 i32.const -4 i32.and i32.const 16 i32.add - local.get $3 + local.get $2 i32.const -4 i32.and i32.add - local.tee $8 + local.tee $7 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $2 - local.get $8 + local.get $1 local.get $7 + local.get $6 i32.const 3 i32.and i32.or - local.tee $3 + local.tee $2 i32.store - local.get $2 - local.set $1 + local.get $1 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $3 + local.get $2 i32.const -4 i32.and - local.tee $2 + local.tee $1 i32.const 16 i32.ge_u if (result i32) - local.get $2 + local.get $1 i32.const 1073741808 i32.lt_u else @@ -427,62 +424,62 @@ if i32.const 0 i32.const 1072 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 local.get $1 + local.get $0 i32.const 16 i32.add i32.add - local.get $4 + local.get $3 i32.ne if i32.const 0 i32.const 1072 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $2 + local.get $1 i32.const 256 i32.lt_u if - local.get $2 + local.get $1 i32.const 4 i32.shr_u - local.set $2 + local.set $1 else - local.get $2 + local.get $1 i32.const 31 - local.get $2 + local.get $1 i32.clz i32.sub - local.tee $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor - local.set $2 - local.get $3 + local.set $1 + local.get $2 i32.const 7 i32.sub - local.set $6 + local.set $5 end - local.get $2 + local.get $1 i32.const 16 i32.lt_u i32.const 0 - local.get $6 + local.get $5 i32.const 23 i32.lt_u select @@ -490,82 +487,84 @@ if i32.const 0 i32.const 1072 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $3 - local.get $1 + i32.load offset=128 + local.set $2 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 if - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.store offset=16 end - local.get $0 - local.get $2 - local.get $6 + global.get $~lib/rt/common/root + local.get $1 + local.get $5 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - local.get $1 - i32.store offset=96 - local.get $0 local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $6 + local.get $5 i32.shl i32.or - i32.store - local.get $0 - local.get $6 + i32.store offset=8 + local.get $5 i32.const 2 i32.shl - i32.add local.tee $0 + global.get $~lib/rt/common/root + i32.add local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.add + i32.load offset=32 i32.const 1 - local.get $2 + local.get $1 i32.shl i32.or - i32.store offset=4 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) - (local $4 i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz i32.const 0 - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz i32.const 0 + local.get $0 local.get $1 - local.get $2 i32.le_u select select @@ -573,112 +572,130 @@ if i32.const 0 i32.const 1072 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - i32.load offset=1568 - local.tee $3 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.tee $2 if - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 16 i32.add i32.lt_u if i32.const 0 i32.const 1072 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 - local.get $1 + local.get $2 + local.get $0 i32.const 16 i32.sub i32.eq if - local.get $3 + local.get $2 i32.load - local.set $4 - local.get $1 + local.set $3 + local.get $0 i32.const 16 i32.sub - local.set $1 + local.set $0 end else - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.lt_u if i32.const 0 i32.const 1072 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.tee $2 + local.tee $1 i32.const 48 i32.lt_u if return end - local.get $1 - local.get $4 + local.get $0 + local.get $3 i32.const 2 i32.and - local.get $2 + local.get $1 i32.const 32 i32.sub i32.const 1 i32.or i32.or i32.store - local.get $1 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 + local.get $0 i32.const 0 i32.store offset=20 + local.get $0 local.get $1 - local.get $2 i32.add i32.const 16 i32.sub - local.tee $2 + local.tee $1 i32.const 2 i32.store - local.get $0 - local.get $2 - i32.store offset=1568 - local.get $0 + global.get $~lib/rt/common/root local.get $1 + i32.store offset=1600 + local.get $0 call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) - global.get $~lib/rt/tlsf/ROOT - local.tee $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.tee $0 + local.set $0 + global.get $~lib/rt/common/root + i32.const 67139 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.tee $2 + local.get $0 i32.gt_s if (result i32) - i32.const 1 + local.get $2 local.get $0 i32.sub memory.grow @@ -690,47 +707,43 @@ if unreachable end - i32.const 1216 - local.tee $0 - i32.const 0 - i32.store - i32.const 2784 + global.get $~lib/rt/common/root i32.const 0 - i32.store + i32.store offset=1600 loop $for-loop|0 local.get $1 i32.const 23 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=4 + i32.store offset=32 i32.const 0 - local.set $2 + local.set $0 loop $for-loop|1 - local.get $2 + local.get $0 i32.const 16 i32.lt_u if + global.get $~lib/rt/common/root local.get $1 i32.const 4 i32.shl - local.get $2 + local.get $0 i32.add i32.const 2 i32.shl - i32.const 1216 i32.add i32.const 0 - i32.store offset=96 - local.get $2 + i32.store offset=128 + local.get $0 i32.const 1 i32.add - local.set $2 + local.set $0 br $for-loop|1 end end @@ -741,110 +754,119 @@ br $for-loop|0 end end - i32.const 1216 - i32.const 2800 + global.get $~lib/rt/common/root + i32.const 1619 + i32.add + i32.const -16 + i32.and memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 1216 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (result i32) + (local $0 i32) (local $1 i32) - (local $2 i32) - local.get $0 - i32.load offset=4 + global.get $~lib/rt/common/root + i32.load offset=32 i32.const -2 i32.and - local.tee $2 + local.tee $1 if (result i32) - local.get $0 - local.get $2 + global.get $~lib/rt/common/root + local.get $1 i32.ctz i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const -2 i32.and - local.tee $1 + local.tee $0 if (result i32) + global.get $~lib/rt/common/root local.get $0 - local.get $1 i32.ctz - local.tee $1 + local.tee $0 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.tee $2 + i32.load offset=32 + local.tee $1 i32.eqz if i32.const 0 i32.const 1072 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $2 - i32.ctz + global.get $~lib/rt/common/root local.get $1 + i32.ctz + local.get $0 i32.const 4 i32.shl i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 else i32.const 0 end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (result i32) + (local $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and if i32.const 0 i32.const 1072 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if - i32.const 1 - global.set $~lib/rt/tlsf/collectLock - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const -3 + i32.and + i32.store call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 16 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.const 65551 @@ -853,18 +875,18 @@ i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $0 local.get $1 - local.get $2 + local.get $0 local.get $1 + local.get $0 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $0 memory.grow i32.const 0 i32.lt_s @@ -872,29 +894,27 @@ unreachable end end - local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - local.get $0 call $~lib/rt/tlsf/searchBlock - local.tee $1 + local.tee $0 i32.eqz if i32.const 0 i32.const 1072 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end end - local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -903,71 +923,69 @@ if i32.const 0 i32.const 1072 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 0 i32.store offset=4 - local.get $1 + local.get $0 i32.const 3 i32.store offset=8 - local.get $1 + local.get $0 i32.const 0 i32.store offset=12 local.get $0 - local.get $1 call $~lib/rt/tlsf/removeBlock - local.get $1 + local.get $0 i32.load - local.tee $2 + local.tee $1 i32.const -4 i32.and i32.const 16 i32.sub - local.tee $3 + local.tee $2 i32.const 32 i32.ge_u if + local.get $0 local.get $1 - local.get $2 i32.const 2 i32.and i32.const 16 i32.or i32.store - local.get $1 + local.get $0 i32.const 32 i32.add - local.tee $2 - local.get $3 + local.tee $1 + local.get $2 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $2 + local.get $1 call $~lib/rt/tlsf/insertBlock else + local.get $0 local.get $1 - local.get $2 i32.const -2 i32.and i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.tee $0 - local.get $1 + local.tee $1 + local.get $0 i32.load i32.const -4 i32.and i32.add - local.get $0 local.get $1 + local.get $0 i32.load i32.const -4 i32.and @@ -977,9 +995,9 @@ i32.and i32.store end - local.get $1 + local.get $0 call $~lib/rt/rtrace/onalloc - local.get $1 + local.get $0 ) (func $while/Ref#constructor (result i32) (local $0 i32) @@ -1282,6 +1300,8 @@ global.set $while/ran i32.const 0 global.set $while/ran + i32.const 1216 + global.set $~lib/rt/common/root i32.const 0 local.set $3 call $while/Ref#constructor @@ -1527,7 +1547,6 @@ i32.const 1 i32.or i32.store - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/insertBlock local.get $0 diff --git a/tests/compiler/while.untouched.wat b/tests/compiler/while.untouched.wat index 7caedb7a8b..2935b4ade9 100644 --- a/tests/compiler/while.untouched.wat +++ b/tests/compiler/while.untouched.wat @@ -1,12 +1,10 @@ (module (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $none_=>_i32 (func (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32))) @@ -20,9 +18,9 @@ (data (i32.const 160) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00") (table $0 1 funcref) (global $while/ran (mut i32) (i32.const 0)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/rt/common/root (mut i32) (i32.const 0)) + (global $~lib/rt/common/main (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0)) (global $~lib/gc/gc.auto (mut i32) (i32.const 1)) (global $~started (mut i32) (i32.const 0)) (global $~lib/heap/__heap_base i32 (i32.const 208)) @@ -482,7 +480,8 @@ i32.const 1 global.set $while/ran ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -491,38 +490,36 @@ (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 277 + i32.const 274 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 16 i32.ge_u if (result i32) - local.get $3 + local.get $2 i32.const 1073741808 i32.lt_u else @@ -532,29 +529,29 @@ if i32.const 0 i32.const 64 - i32.const 279 + i32.const 276 i32.const 14 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 + local.set $3 + local.get $2 i32.const 4 i32.shr_u - local.set $5 + local.set $4 else i32.const 31 - local.get $3 + local.get $2 i32.clz i32.sub - local.set $4 + local.set $3 + local.get $2 local.get $3 - local.get $4 i32.const 4 i32.sub i32.shr_u @@ -562,21 +559,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $4 + local.get $3 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $3 end i32.const 1 drop - local.get $4 + local.get $3 i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $4 i32.const 16 i32.lt_u else @@ -586,119 +583,112 @@ if i32.const 0 i32.const 64 - i32.const 292 + i32.const 289 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load offset=16 - local.set $6 - local.get $1 + local.set $5 + local.get $0 i32.load offset=20 - local.set $7 - local.get $6 + local.set $6 + local.get $5 if + local.get $5 local.get $6 - local.get $7 i32.store offset=20 end - local.get $7 + local.get $6 if - local.get $7 local.get $6 + local.get $5 i32.store offset=16 end - local.get $1 local.get $0 - local.set $10 - local.get $4 - local.set $9 - local.get $5 + local.get $3 local.set $8 - local.get $10 - local.get $9 + local.get $4 + local.set $7 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $8 + local.get $7 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 + i32.load offset=128 i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 + local.get $3 local.set $9 - local.get $7 + local.get $4 local.set $8 - local.get $11 - local.get $10 + local.get $6 + local.set $7 + global.get $~lib/rt/common/root + local.get $9 i32.const 4 i32.shl - local.get $9 + local.get $8 i32.add i32.const 2 i32.shl i32.add - local.get $8 - i32.store offset=96 local.get $7 + i32.store offset=128 + local.get $6 i32.eqz if - local.get $0 - local.set $9 - local.get $4 - local.set $8 - local.get $9 - local.get $8 + local.get $3 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 + local.set $7 + local.get $3 local.set $9 - local.get $0 - local.set $8 - local.get $4 - local.set $11 - local.get $9 + local.get $7 i32.const 1 - local.get $5 + local.get $4 i32.shl i32.const -1 i32.xor i32.and - local.tee $9 - local.set $10 - local.get $8 - local.get $11 + local.tee $7 + local.set $8 + global.get $~lib/rt/common/root + local.get $9 i32.const 2 i32.shl i32.add - local.get $10 - i32.store offset=4 - local.get $9 + local.get $8 + i32.store offset=32 + local.get $7 i32.eqz if - local.get $0 - local.get $0 - i32.load + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $4 + local.get $3 i32.shl i32.const -1 i32.xor i32.and - i32.store + i32.store offset=8 end end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -708,184 +698,179 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) i32.const 1 drop - local.get $1 + local.get $0 i32.eqz if i32.const 0 i32.const 64 - i32.const 205 + i32.const 202 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.load - local.set $2 + local.set $1 i32.const 1 drop - local.get $2 + local.get $1 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 207 + i32.const 204 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 + local.get $0 + local.set $2 + local.get $2 i32.const 16 i32.add - local.get $3 + local.get $2 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add + local.set $3 + local.get $3 + i32.load local.set $4 local.get $4 - i32.load - local.set $5 - local.get $5 i32.const 1 i32.and if - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $5 + local.get $4 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $3 - local.get $3 + local.set $2 + local.get $2 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $4 + local.get $3 call $~lib/rt/tlsf/removeBlock + local.get $0 local.get $1 - local.get $2 i32.const 3 i32.and - local.get $3 + local.get $2 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 16 i32.add - local.get $6 + local.get $5 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.load - local.set $5 + local.set $4 end end - local.get $2 + local.get $1 i32.const 2 i32.and if - local.get $1 - local.set $6 - local.get $6 + local.get $0 + local.set $5 + local.get $5 i32.const 4 i32.sub i32.load - local.set $6 - local.get $6 + local.set $5 + local.get $5 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $3 + local.get $2 i32.const 1 i32.and i32.eqz if i32.const 0 i32.const 64 - i32.const 228 + i32.const 225 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and i32.const 16 i32.add - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $7 - local.get $7 + local.set $6 + local.get $6 i32.const 1073741808 i32.lt_u if - local.get $0 - local.get $6 + local.get $5 call $~lib/rt/tlsf/removeBlock - local.get $6 - local.get $3 + local.get $5 + local.get $2 i32.const 3 i32.and - local.get $7 + local.get $6 i32.or - local.tee $2 + local.tee $1 i32.store - local.get $6 - local.set $1 + local.get $5 + local.set $0 end end + local.get $3 local.get $4 - local.get $5 i32.const 2 i32.or i32.store - local.get $2 + local.get $1 i32.const 3 i32.const -1 i32.xor i32.and - local.set $8 + local.set $7 i32.const 1 drop - local.get $8 + local.get $7 i32.const 16 i32.ge_u if (result i32) - local.get $8 + local.get $7 i32.const 1073741808 i32.lt_u else @@ -895,52 +880,52 @@ if i32.const 0 i32.const 64 - i32.const 243 + i32.const 240 i32.const 14 call $~lib/builtins/abort unreachable end i32.const 1 drop - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $8 + local.get $7 i32.add - local.get $4 + local.get $3 i32.eq i32.eqz if i32.const 0 i32.const 64 - i32.const 244 + i32.const 241 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 4 i32.sub - local.get $1 + local.get $0 i32.store - local.get $8 + local.get $7 i32.const 256 i32.lt_u if i32.const 0 - local.set $9 - local.get $8 + local.set $8 + local.get $7 i32.const 4 i32.shr_u - local.set $10 + local.set $9 else i32.const 31 - local.get $8 + local.get $7 i32.clz i32.sub - local.set $9 + local.set $8 + local.get $7 local.get $8 - local.get $9 i32.const 4 i32.sub i32.shr_u @@ -948,21 +933,21 @@ i32.const 4 i32.shl i32.xor - local.set $10 - local.get $9 + local.set $9 + local.get $8 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $9 + local.set $8 end i32.const 1 drop - local.get $9 + local.get $8 i32.const 23 i32.lt_u if (result i32) - local.get $10 + local.get $9 i32.const 16 i32.lt_u else @@ -972,109 +957,100 @@ if i32.const 0 i32.const 64 - i32.const 260 + i32.const 257 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $7 + local.get $8 + local.set $2 local.get $9 - local.set $3 - local.get $10 - local.set $6 - local.get $7 - local.get $3 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $6 + local.get $5 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $11 - local.get $1 + i32.load offset=128 + local.set $10 + local.get $0 i32.const 0 i32.store offset=16 - local.get $1 - local.get $11 + local.get $0 + local.get $10 i32.store offset=20 - local.get $11 + local.get $10 if - local.get $11 - local.get $1 + local.get $10 + local.get $0 i32.store offset=16 end - local.get $0 - local.set $12 + local.get $8 + local.set $2 local.get $9 - local.set $7 - local.get $10 - local.set $3 - local.get $1 + local.set $5 + local.get $0 local.set $6 - local.get $12 - local.get $7 + global.get $~lib/rt/common/root + local.get $2 i32.const 4 i32.shl - local.get $3 + local.get $5 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load + i32.store offset=128 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 1 - local.get $9 + local.get $8 i32.shl i32.or - i32.store - local.get $0 - local.set $13 - local.get $9 - local.set $12 - local.get $0 - local.set $3 - local.get $9 + i32.store offset=8 + local.get $8 + local.set $2 + local.get $8 local.set $6 - local.get $3 + global.get $~lib/rt/common/root local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 1 - local.get $10 + local.get $9 i32.shl i32.or - local.set $7 - local.get $13 - local.get $12 + local.set $5 + global.get $~lib/rt/common/root + local.get $2 i32.const 2 i32.shl i32.add - local.get $7 - i32.store offset=4 + local.get $5 + i32.store offset=32 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/addMemory (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) i32.const 1 drop + local.get $0 local.get $1 - local.get $2 i32.le_u if (result i32) - local.get $1 + local.get $0 i32.const 15 i32.and i32.eqz @@ -1082,7 +1058,7 @@ i32.const 0 end if (result i32) - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1093,24 +1069,22 @@ if i32.const 0 i32.const 64 - i32.const 386 + i32.const 383 i32.const 5 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + global.get $~lib/rt/common/root + i32.load offset=1600 + local.set $2 i32.const 0 - local.set $5 - local.get $4 + local.set $3 + local.get $2 if i32.const 1 drop - local.get $1 - local.get $4 + local.get $0 + local.get $2 i32.const 16 i32.add i32.ge_u @@ -1118,50 +1092,50 @@ if i32.const 0 i32.const 64 - i32.const 396 + i32.const 393 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 i32.const 16 i32.sub - local.get $4 + local.get $2 i32.eq if - local.get $1 + local.get $0 i32.const 16 i32.sub - local.set $1 - local.get $4 + local.set $0 + local.get $2 i32.load - local.set $5 + local.set $3 else nop end else i32.const 1 drop - local.get $1 local.get $0 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.ge_u i32.eqz if i32.const 0 i32.const 64 - i32.const 408 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 local.get $1 + local.get $0 i32.sub - local.set $6 - local.get $6 + local.set $4 + local.get $4 i32.const 16 i32.const 16 i32.add @@ -1172,53 +1146,50 @@ i32.const 0 return end - local.get $6 + local.get $4 i32.const 16 i32.const 1 i32.shl i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $5 + local.get $0 + local.set $6 + local.get $6 + local.get $5 i32.const 1 i32.or - local.get $5 + local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $8 + local.get $6 i32.const 0 i32.store offset=16 - local.get $8 + local.get $6 i32.const 0 i32.store offset=20 - local.get $1 - local.get $6 + local.get $0 + local.get $4 i32.add i32.const 16 i32.sub - local.set $4 - local.get $4 + local.set $2 + local.get $2 i32.const 0 i32.const 2 i32.or i32.store - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 + local.get $2 + local.set $7 + global.get $~lib/rt/common/root + local.get $7 + i32.store offset=1600 + local.get $6 call $~lib/rt/tlsf/insertBlock i32.const 1 ) - (func $~lib/rt/tlsf/maybeInitialize (result i32) + (func $~lib/rt/tlsf/maybeInitialize (local $0 i32) (local $1 i32) (local $2 i32) @@ -1228,26 +1199,27 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - global.get $~lib/rt/tlsf/ROOT - local.set $0 - local.get $0 + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.and i32.eqz if - global.get $~lib/heap/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $1 + i32.const 1 + global.set $~lib/rt/common/main + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 1 + i32.or + i32.store + global.get $~lib/rt/common/root + i32.const 0 + i32.store offset=8 memory.size - local.set $2 - local.get $1 - i32.const 1572 + local.set $0 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 65535 i32.add @@ -1257,13 +1229,13 @@ i32.and i32.const 16 i32.shr_u - local.set $3 - local.get $3 - local.get $2 + local.set $1 + local.get $1 + local.get $0 i32.gt_s if (result i32) - local.get $3 - local.get $2 + local.get $1 + local.get $0 i32.sub memory.grow i32.const 0 @@ -1274,84 +1246,73 @@ if unreachable end - local.get $1 - local.set $0 - local.get $0 - i32.const 0 - i32.store - local.get $0 - local.set $5 i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 + local.set $2 + global.get $~lib/rt/common/root + local.get $2 + i32.store offset=1600 i32.const 0 - local.set $5 + local.set $2 loop $for-loop|0 - local.get $5 + local.get $2 i32.const 23 i32.lt_u - local.set $4 - local.get $4 + local.set $3 + local.get $3 if - local.get $0 - local.set $8 - local.get $5 - local.set $7 + local.get $2 + local.set $5 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $4 + global.get $~lib/rt/common/root + local.get $5 i32.const 2 i32.shl i32.add - local.get $6 - i32.store offset=4 + local.get $4 + i32.store offset=32 i32.const 0 - local.set $8 + local.set $5 loop $for-loop|1 - local.get $8 + local.get $5 i32.const 16 i32.lt_u - local.set $7 - local.get $7 + local.set $4 + local.get $4 if - local.get $0 - local.set $11 + local.get $2 + local.set $8 local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.set $7 i32.const 0 local.set $6 - local.get $11 - local.get $10 + global.get $~lib/rt/common/root + local.get $8 i32.const 4 i32.shl - local.get $9 + local.get $7 i32.add i32.const 2 i32.shl i32.add local.get $6 - i32.store offset=96 - local.get $8 + i32.store offset=128 + local.get $5 i32.const 1 i32.add - local.set $8 + local.set $5 br $for-loop|1 end end - local.get $5 + local.get $2 i32.const 1 i32.add - local.set $5 + local.set $2 br $for-loop|0 end end - local.get $1 - i32.const 1572 + global.get $~lib/rt/common/root + i32.const 1604 i32.add i32.const 15 i32.add @@ -1359,20 +1320,16 @@ i32.const -1 i32.xor i32.and - local.set $5 + local.set $2 i32.const 0 drop - local.get $0 - local.get $5 + local.get $2 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop - local.get $0 - global.set $~lib/rt/tlsf/ROOT end - local.get $0 ) (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) (local $1 i32) @@ -1383,7 +1340,7 @@ if i32.const 112 i32.const 64 - i32.const 461 + i32.const 458 i32.const 30 call $~lib/builtins/abort unreachable @@ -1403,34 +1360,33 @@ i32.gt_u select ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + local.get $0 i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 4 i32.shr_u - local.set $3 + local.set $2 else - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if (result i32) - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl @@ -1438,16 +1394,16 @@ i32.const 1 i32.sub else - local.get $1 + local.get $0 end - local.set $4 + local.set $3 i32.const 31 - local.get $4 + local.get $3 i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $1 + local.get $3 + local.get $1 i32.const 4 i32.sub i32.shr_u @@ -1455,21 +1411,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $2 + local.get $1 i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $1 end i32.const 1 drop - local.get $2 + local.get $1 i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $2 i32.const 16 i32.lt_u else @@ -1479,160 +1435,150 @@ if i32.const 0 i32.const 64 - i32.const 338 + i32.const 335 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 + local.get $1 + local.set $3 + global.get $~lib/rt/common/root + local.get $3 i32.const 2 i32.shl i32.add - i32.load offset=4 + i32.load offset=32 i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $2 i32.shl i32.and - local.set $6 + local.set $4 i32.const 0 - local.set $7 - local.get $6 + local.set $5 + local.get $4 i32.eqz if - local.get $0 - i32.load + global.get $~lib/rt/common/root + i32.load offset=8 i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $1 i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $3 + local.get $3 i32.eqz if i32.const 0 - local.set $7 + local.set $5 else - local.get $5 + local.get $3 i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 + local.set $1 + local.get $1 + local.set $6 + global.get $~lib/rt/common/root + local.get $6 i32.const 2 i32.shl i32.add - i32.load offset=4 - local.set $6 + i32.load offset=32 + local.set $4 i32.const 1 drop - local.get $6 + local.get $4 i32.eqz if i32.const 0 i32.const 64 - i32.const 351 + i32.const 348 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + local.get $1 + local.set $7 + local.get $4 i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $6 + global.get $~lib/rt/common/root + local.get $7 i32.const 4 i32.shl - local.get $4 + local.get $6 i32.add i32.const 2 i32.shl i32.add - i32.load offset=96 - local.set $7 + i32.load offset=128 + local.set $5 end - local.get $7 + local.get $5 ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/growMemory (param $0 i32) + (local $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) i32.const 0 drop - local.get $1 + local.get $0 i32.const 536870904 i32.lt_u if - local.get $1 + local.get $0 i32.const 1 i32.const 27 - local.get $1 + local.get $0 i32.clz i32.sub i32.shl i32.const 1 i32.sub i32.add - local.set $1 + local.set $0 end memory.size - local.set $2 - local.get $1 + local.set $1 + local.get $0 i32.const 16 - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + global.get $~lib/rt/common/root + i32.load offset=1600 i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $0 + local.get $0 i32.const 65535 i32.add i32.const 65535 @@ -1641,22 +1587,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 + local.set $2 + local.get $1 local.tee $3 - local.get $4 - local.tee $5 + local.get $2 + local.tee $4 local.get $3 - local.get $5 + local.get $4 i32.gt_s select - local.set $6 - local.get $6 + local.set $5 + local.get $5 memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -1665,27 +1611,26 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl - local.get $7 + local.get $6 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) - local.get $1 + local.get $0 i32.load - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 15 i32.and i32.eqz @@ -1693,74 +1638,73 @@ if i32.const 0 i32.const 64 - i32.const 365 + i32.const 362 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $2 i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $1 i32.sub - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.const 16 i32.const 16 i32.add i32.ge_u if + local.get $0 local.get $1 local.get $2 - local.get $3 i32.const 2 i32.and i32.or i32.store - local.get $1 + local.get $0 i32.const 16 i32.add - local.get $2 + local.get $1 i32.add - local.set $5 - local.get $5 + local.set $4 local.get $4 + local.get $3 i32.const 16 i32.sub i32.const 1 i32.or i32.store - local.get $0 - local.get $5 + local.get $4 call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $0 + local.get $2 i32.const 1 i32.const -1 i32.xor i32.and i32.store - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.get $1 - local.set $5 - local.get $5 + local.get $0 + local.set $4 + local.get $4 i32.const 16 i32.add - local.get $5 + local.get $4 i32.load i32.const 3 i32.const -1 @@ -1775,86 +1719,93 @@ i32.store end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) - (local $4 i32) i32.const 1 drop - global.get $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.and i32.eqz i32.eqz if i32.const 0 i32.const 64 - i32.const 501 + i32.const 492 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $0 call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $2 + call $~lib/rt/tlsf/searchBlock local.set $3 - local.get $0 local.get $3 - call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 i32.eqz if global.get $~lib/gc/gc.auto if i32.const 1 drop - i32.const 1 - global.set $~lib/rt/tlsf/collectLock + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.or + i32.store call $~lib/rt/pure/__collect i32.const 1 drop - i32.const 0 - global.set $~lib/rt/tlsf/collectLock - local.get $0 - local.get $3 + global.get $~lib/rt/common/root + global.get $~lib/rt/common/root + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + i32.store + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 - local.get $4 + local.set $3 + local.get $3 i32.eqz if - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 64 - i32.const 513 + i32.const 504 i32.const 20 call $~lib/builtins/abort unreachable end end else - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $3 + local.get $2 call $~lib/rt/tlsf/searchBlock - local.set $4 + local.set $3 i32.const 1 drop - local.get $4 + local.get $3 i32.eqz if i32.const 0 i32.const 64 - i32.const 518 + i32.const 509 i32.const 18 call $~lib/builtins/abort unreachable @@ -1863,44 +1814,42 @@ end i32.const 1 drop - local.get $4 + local.get $3 i32.load i32.const 3 i32.const -1 i32.xor i32.and - local.get $3 + local.get $2 i32.ge_u i32.eqz if i32.const 0 i32.const 64 - i32.const 521 + i32.const 512 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $4 + local.get $3 i32.const 0 i32.store offset=4 - local.get $4 - local.get $2 - i32.store offset=8 - local.get $4 + local.get $3 local.get $1 - i32.store offset=12 + i32.store offset=8 + local.get $3 local.get $0 - local.get $4 + i32.store offset=12 + local.get $3 call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $4 local.get $3 + local.get $2 call $~lib/rt/tlsf/prepareBlock i32.const 1 drop - local.get $4 + local.get $3 call $~lib/rt/rtrace/onalloc - local.get $4 + local.get $3 ) (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32) call $~lib/rt/tlsf/maybeInitialize @@ -2346,6 +2295,14 @@ end i32.const 0 global.set $while/ran + global.get $~lib/heap/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + global.set $~lib/rt/common/root call $while/testRef global.get $while/ran i32.eqz @@ -2412,22 +2369,21 @@ drop return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $1 + (func $~lib/rt/tlsf/freeBlock (param $0 i32) + (local $1 i32) + local.get $0 i32.load - local.set $2 + local.set $1 + local.get $0 local.get $1 - local.get $2 i32.const 1 i32.or i32.store local.get $0 - local.get $1 call $~lib/rt/tlsf/insertBlock i32.const 1 drop - local.get $1 + local.get $0 call $~lib/rt/rtrace/onfree ) (func $~lib/rt/pure/decrement (param $0 i32) @@ -2486,7 +2442,6 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 call $~lib/rt/tlsf/freeBlock else