diff --git a/package-lock.json b/package-lock.json index 0ede35ea..7ce924bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -659,9 +659,9 @@ "dev": true }, "binaryen": { - "version": "42.0.0-nightly.20180213", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-42.0.0-nightly.20180213.tgz", - "integrity": "sha512-K+YMN7qLDUh3ULt5L33Nw/GOOhha4FBvaPMdPmjk+UjV3GsNqpjdi3FX0pG551cZnIZ0+eABrS9voR41QBcK+Q==" + "version": "44.0.0", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-44.0.0.tgz", + "integrity": "sha512-8teFxH0adnhbNv7aBS35scBzu9VIdIksxUPHN0p2ez+bg8VNQgAuizWZJohkejjuwiaC/ESP8Tfb0vD0BRJiqw==" }, "bn.js": { "version": "4.11.8", @@ -874,7 +874,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1539,910 +1538,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -3225,13 +2320,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", - "dev": true, - "optional": true - }, "nanomatch": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", diff --git a/package.json b/package.json index f24037a4..1e13ecca 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "url": "https://github.com/AssemblyScript/assemblyscript/issues" }, "dependencies": { - "binaryen": "42.0.0-nightly.20180213", + "binaryen": "44.0.0", "glob": "^7.1.2", "long": "^4.0.0", "minimist": "^1.2.0", diff --git a/tests/allocators/buddy/assembly/buddy.ts b/tests/allocators/buddy/assembly/buddy.ts index a65fc3bb..6cbadee8 100644 --- a/tests/allocators/buddy/assembly/buddy.ts +++ b/tests/allocators/buddy/assembly/buddy.ts @@ -89,12 +89,12 @@ class List { * for that size. The bucket at index 0 corresponds to an allocation size of * MAX_ALLOC (i.e. the whole address space). */ -var BUCKET_START: usize = HEAP_BASE; -var BUCKET_END: usize = BUCKET_START + BUCKET_COUNT * List.SIZE; +var BUCKETS_START: usize = HEAP_BASE; +var BUCKETS_END: usize = BUCKETS_START + BUCKET_COUNT * List.SIZE; -function get_bucket(index: usize): List { +function buckets$get(index: usize): List { assert(index < BUCKET_COUNT); - return changetype(BUCKET_START + index * List.SIZE); + return changetype(BUCKETS_START + index * List.SIZE); } /* @@ -135,17 +135,17 @@ var bucket_limit: usize; * since we only ever care about parent nodes. */ const SPLIT_COUNT: usize = (1 << (BUCKET_COUNT - 1)) / 8; -var SPLIT_START: usize = BUCKET_END; -var SPLIT_END: usize = SPLIT_START + SPLIT_COUNT * sizeof(); +var NODE_IS_SPLIT_START: usize = BUCKETS_END; +var NODE_IS_SPLIT_END: usize = NODE_IS_SPLIT_START + SPLIT_COUNT * sizeof(); -function node_is_split(index: usize): i32 { +function node_is_split$get(index: usize): i32 { assert(index < SPLIT_COUNT); - return load(SPLIT_START + index); + return load(NODE_IS_SPLIT_START + index); } -function node_set_split(index: usize, state: i32): void { +function node_is_split$set(index: usize, state: i32): void { assert(index < SPLIT_COUNT); - store(SPLIT_START + index, state); + store(NODE_IS_SPLIT_START + index, state); } /* @@ -166,15 +166,21 @@ var max_ptr: usize; * front. It's only reserved when it's needed by calling this function. This * will return false if the memory could not be reserved. */ -function update_max_ptr(new_value: usize): bool { +function update_max_ptr(new_value: usize): i32 { if (new_value > max_ptr) { - var pages = (((new_value - max_ptr) + 0xffff) & ~0xffff) >>> 16; - if (grow_memory(pages) < 0) { - return false; + // if (brk(new_value)) { + // return 0; + // } + var oldPages = current_memory(); + var newPages = (((new_value + 0xffff) & ~0xffff) >> 16); + assert(newPages > oldPages); + if (grow_memory(newPages - oldPages) < 0) { + return 0; } - max_ptr = new_value; + // max_ptr = new_value; + max_ptr = newPages << 16; } - return true; + return 1; } /* @@ -246,7 +252,7 @@ function node_for_ptr(ptr: usize, bucket: usize): usize { */ function parent_is_split(index: usize): i32 { index = (index - 1) / 2; - return (node_is_split(index / 8) >> (index % 8)) & 1; + return (node_is_split$get(index / 8) >>> (index % 8)) & 1; } /* @@ -255,7 +261,9 @@ function parent_is_split(index: usize): i32 { function flip_parent_is_split(index: usize): void { index = (index - 1) / 2; var indexDiv8 = index / 8; - node_set_split(indexDiv8, node_is_split(indexDiv8) ^ (1 << (index % 8))); + node_is_split$set(indexDiv8, + node_is_split$get(indexDiv8) ^ (1 << (index % 8)) + ); } /* @@ -292,8 +300,8 @@ function lower_bucket_limit(bucket: usize): u32 { */ if (!parent_is_split(root)) { list_remove(changetype(base_ptr)); - list_init(get_bucket(--bucket_limit)); - list_push(get_bucket(bucket_limit), changetype(base_ptr)); + list_init(buckets$get(--bucket_limit)); + list_push(buckets$get(bucket_limit), changetype(base_ptr)); continue; } @@ -309,8 +317,8 @@ function lower_bucket_limit(bucket: usize): u32 { if (!update_max_ptr(right_child + List.SIZE)) { return 0; } - list_push(get_bucket(bucket_limit), changetype(right_child)); - list_init(get_bucket(--bucket_limit)); + list_push(buckets$get(bucket_limit), changetype(right_child)); + list_init(buckets$get(--bucket_limit)); /* * Set the grandparent's SPLIT flag so if we need to lower the bucket limit @@ -325,8 +333,6 @@ function lower_bucket_limit(bucket: usize): u32 { return 1; } -declare function logi(i: i32): void; - @global function allocate_memory(request: usize): usize { var original_bucket: usize, bucket: usize; @@ -346,12 +352,15 @@ function allocate_memory(request: usize): usize { * possible allocation size. More memory will be reserved later as needed. */ if (base_ptr == 0) { - base_ptr = SPLIT_END; - max_ptr = current_memory() << 16; // differs, must grow first + // base_ptr = max_ptr = (uint8_t *)sbrk(0); + base_ptr = (NODE_IS_SPLIT_END + 7) & ~7; // must be aligned + max_ptr = current_memory() << 16; // must grow first bucket_limit = BUCKET_COUNT - 1; - update_max_ptr(base_ptr + List.SIZE); - list_init(get_bucket(BUCKET_COUNT - 1)); - list_push(get_bucket(BUCKET_COUNT - 1), changetype(base_ptr)); + if (!update_max_ptr(base_ptr + List.SIZE)) { + return 0; + } + list_init(buckets$get(BUCKET_COUNT - 1)); + list_push(buckets$get(BUCKET_COUNT - 1), changetype(base_ptr)); } /* @@ -382,7 +391,7 @@ function allocate_memory(request: usize): usize { * Try to pop a block off the free list for this bucket. If the free list * is empty, we're going to have to split a larger block instead. */ - ptr = changetype(list_pop(get_bucket(bucket))); + ptr = changetype(list_pop(buckets$get(bucket))); if (!ptr) { /* * If we're not at the root of the tree or it's impossible to grow the @@ -403,7 +412,7 @@ function allocate_memory(request: usize): usize { if (!lower_bucket_limit(bucket - 1)) { return 0; } - ptr = changetype(list_pop(get_bucket(bucket))); + ptr = changetype(list_pop(buckets$get(bucket))); } /* @@ -413,7 +422,7 @@ function allocate_memory(request: usize): usize { size = 1 << (MAX_ALLOC_LOG2 - bucket); bytes_needed = bucket < original_bucket ? size / 2 + List.SIZE : size; if (!update_max_ptr(ptr + bytes_needed)) { - list_push(get_bucket(bucket), changetype(ptr)); + list_push(buckets$get(bucket), changetype(ptr)); return 0; } @@ -444,7 +453,10 @@ function allocate_memory(request: usize): usize { i = i * 2 + 1; bucket++; flip_parent_is_split(i); - list_push(get_bucket(bucket), changetype(ptr_for_node(i + 1, bucket))); + list_push( + buckets$get(bucket), + changetype(ptr_for_node(i + 1, bucket)) + ); } /* @@ -521,5 +533,5 @@ function free_memory(ptr: usize): void { * followed by a "malloc" of the same size to ideally use the same address * for better memory locality. */ - list_push(get_bucket(bucket), changetype(ptr_for_node(i, bucket))); + list_push(buckets$get(bucket), changetype(ptr_for_node(i, bucket))); } diff --git a/tests/allocators/buddy/buddy.optimized.wat b/tests/allocators/buddy/buddy.optimized.wat index 41cebdf2..1691a8b0 100644 --- a/tests/allocators/buddy/buddy.optimized.wat +++ b/tests/allocators/buddy/buddy.optimized.wat @@ -5,11 +5,11 @@ (type $iii (func (param i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) (type $v (func)) - (global $assembly/buddy/BUCKET_START (mut i32) (i32.const 0)) - (global $assembly/buddy/BUCKET_END (mut i32) (i32.const 0)) + (global $assembly/buddy/BUCKETS_START (mut i32) (i32.const 0)) + (global $assembly/buddy/BUCKETS_END (mut i32) (i32.const 0)) (global $assembly/buddy/bucket_limit (mut i32) (i32.const 0)) - (global $assembly/buddy/SPLIT_START (mut i32) (i32.const 0)) - (global $assembly/buddy/SPLIT_END (mut i32) (i32.const 0)) + (global $assembly/buddy/NODE_IS_SPLIT_START (mut i32) (i32.const 0)) + (global $assembly/buddy/NODE_IS_SPLIT_END (mut i32) (i32.const 0)) (global $assembly/buddy/base_ptr (mut i32) (i32.const 0)) (global $assembly/buddy/max_ptr (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 4)) @@ -20,6 +20,7 @@ (export "memory" (memory $0)) (start $start) (func $assembly/buddy/update_max_ptr (; 0 ;) (type $ii) (param $0 i32) (result i32) + (local $1 i32) ;;@ assembly/buddy.ts:170:2 (if ;;@ assembly/buddy.ts:170:6 @@ -30,287 +31,295 @@ ) ;;@ assembly/buddy.ts:170:27 (block - ;;@ assembly/buddy.ts:172:4 + ;;@ assembly/buddy.ts:177:4 (if - ;;@ assembly/buddy.ts:172:8 + ;;@ assembly/buddy.ts:177:8 (i32.lt_s (grow_memory - ;;@ assembly/buddy.ts:171:16 - (i32.shr_u - (i32.and - ;;@ assembly/buddy.ts:171:17 - (i32.add - ;;@ assembly/buddy.ts:171:18 - (i32.sub - ;;@ assembly/buddy.ts:171:19 - (get_local $0) - ;;@ assembly/buddy.ts:171:31 - (get_global $assembly/buddy/max_ptr) + ;;@ assembly/buddy.ts:177:20 + (i32.sub + ;;@ assembly/buddy.ts:175:4 + (tee_local $1 + ;;@ assembly/buddy.ts:175:19 + (i32.shr_u + ;;@ assembly/buddy.ts:175:25 + (i32.and + ;;@ assembly/buddy.ts:175:26 + (i32.add + ;;@ assembly/buddy.ts:175:27 + (get_local $0) + ;;@ assembly/buddy.ts:175:39 + (i32.const 65535) + ) + (i32.const -65536) ) - ;;@ assembly/buddy.ts:171:42 - (i32.const 65535) + ;;@ assembly/buddy.ts:175:61 + (i32.const 16) ) - (i32.const -65536) ) - ;;@ assembly/buddy.ts:171:65 - (i32.const 16) + ;;@ assembly/buddy.ts:174:19 + (current_memory) ) ) - ;;@ assembly/buddy.ts:172:29 + ;;@ assembly/buddy.ts:177:43 (i32.const 0) ) - ;;@ assembly/buddy.ts:173:13 + ;;@ assembly/buddy.ts:178:13 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:175:4 + ;;@ assembly/buddy.ts:181:4 (set_global $assembly/buddy/max_ptr - ;;@ assembly/buddy.ts:175:14 - (get_local $0) + ;;@ assembly/buddy.ts:181:14 + (i32.shl + (get_local $1) + ;;@ assembly/buddy.ts:181:33 + (i32.const 16) + ) ) ) ) - ;;@ assembly/buddy.ts:177:9 + ;;@ assembly/buddy.ts:183:9 (i32.const 1) ) - (func $assembly/buddy/get_bucket (; 1 ;) (type $ii) (param $0 i32) (result i32) + (func $assembly/buddy/buckets$get (; 1 ;) (type $ii) (param $0 i32) (result i32) ;;@ assembly/buddy.ts:97:9 (i32.add ;;@ assembly/buddy.ts:97:26 - (get_global $assembly/buddy/BUCKET_START) - ;;@ assembly/buddy.ts:97:41 - (i32.mul + (get_global $assembly/buddy/BUCKETS_START) + ;;@ assembly/buddy.ts:97:42 + (i32.shl (get_local $0) - ;;@ assembly/buddy.ts:97:49 - (i32.const 8) + ;;@ assembly/buddy.ts:97:50 + (i32.const 3) ) ) ) (func $assembly/buddy/list_init (; 2 ;) (type $iv) (param $0 i32) - ;;@ assembly/buddy.ts:186:2 + ;;@ assembly/buddy.ts:192:2 (i32.store (get_local $0) - ;;@ assembly/buddy.ts:186:14 + ;;@ assembly/buddy.ts:192:14 (get_local $0) ) - ;;@ assembly/buddy.ts:187:2 + ;;@ assembly/buddy.ts:193:2 (i32.store offset=4 (get_local $0) - ;;@ assembly/buddy.ts:187:14 + ;;@ assembly/buddy.ts:193:14 (get_local $0) ) ) (func $assembly/buddy/list_push (; 3 ;) (type $iiv) (param $0 i32) (param $1 i32) (local $2 i32) - ;;@ assembly/buddy.ts:196:2 + ;;@ assembly/buddy.ts:202:2 (i32.store (get_local $1) - ;;@ assembly/buddy.ts:195:2 + ;;@ assembly/buddy.ts:201:2 (tee_local $2 - ;;@ assembly/buddy.ts:195:13 + ;;@ assembly/buddy.ts:201:13 (i32.load (get_local $0) ) ) ) - ;;@ assembly/buddy.ts:197:2 + ;;@ assembly/buddy.ts:203:2 (i32.store offset=4 (get_local $1) - ;;@ assembly/buddy.ts:197:15 + ;;@ assembly/buddy.ts:203:15 (get_local $0) ) - ;;@ assembly/buddy.ts:198:2 + ;;@ assembly/buddy.ts:204:2 (i32.store offset=4 (get_local $2) - ;;@ assembly/buddy.ts:198:14 + ;;@ assembly/buddy.ts:204:14 (get_local $1) ) - ;;@ assembly/buddy.ts:199:2 + ;;@ assembly/buddy.ts:205:2 (i32.store (get_local $0) - ;;@ assembly/buddy.ts:199:14 + ;;@ assembly/buddy.ts:205:14 (get_local $1) ) ) (func $assembly/buddy/bucket_for_request (; 4 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - ;;@ assembly/buddy.ts:266:2 + ;;@ assembly/buddy.ts:274:2 (set_local $1 - ;;@ assembly/buddy.ts:266:15 + ;;@ assembly/buddy.ts:274:15 (i32.const 27) ) - ;;@ assembly/buddy.ts:267:2 + ;;@ assembly/buddy.ts:275:2 (set_local $2 - ;;@ assembly/buddy.ts:267:13 + ;;@ assembly/buddy.ts:275:13 (i32.const 16) ) (loop $continue|0 (if - ;;@ assembly/buddy.ts:269:9 + ;;@ assembly/buddy.ts:277:9 (i32.lt_u (get_local $2) - ;;@ assembly/buddy.ts:269:16 + ;;@ assembly/buddy.ts:277:16 (get_local $0) ) (block - ;;@ assembly/buddy.ts:270:4 + ;;@ assembly/buddy.ts:278:4 (set_local $1 (i32.sub (get_local $1) (i32.const 1) ) ) - ;;@ assembly/buddy.ts:271:4 + ;;@ assembly/buddy.ts:279:4 (set_local $2 - (i32.mul + (i32.shl (get_local $2) - ;;@ assembly/buddy.ts:271:12 - (i32.const 2) + ;;@ assembly/buddy.ts:279:12 + (i32.const 1) ) ) (br $continue|0) ) ) ) - ;;@ assembly/buddy.ts:274:9 + ;;@ assembly/buddy.ts:282:9 (get_local $1) ) (func $assembly/buddy/node_for_ptr (; 5 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - ;;@ assembly/buddy.ts:241:9 + ;;@ assembly/buddy.ts:247:9 (i32.sub (i32.add (i32.shr_u - ;;@ assembly/buddy.ts:241:10 + ;;@ assembly/buddy.ts:247:10 (i32.sub - ;;@ assembly/buddy.ts:241:11 + ;;@ assembly/buddy.ts:247:11 (get_local $0) - ;;@ assembly/buddy.ts:241:17 + ;;@ assembly/buddy.ts:247:17 (get_global $assembly/buddy/base_ptr) ) - ;;@ assembly/buddy.ts:241:30 + ;;@ assembly/buddy.ts:247:30 (i32.sub - ;;@ assembly/buddy.ts:241:31 + ;;@ assembly/buddy.ts:247:31 (i32.const 31) - ;;@ assembly/buddy.ts:241:48 + ;;@ assembly/buddy.ts:247:48 (get_local $1) ) ) - ;;@ assembly/buddy.ts:241:59 + ;;@ assembly/buddy.ts:247:59 (i32.shl - ;;@ assembly/buddy.ts:241:60 + ;;@ assembly/buddy.ts:247:60 (i32.const 1) - ;;@ assembly/buddy.ts:241:65 + ;;@ assembly/buddy.ts:247:65 (get_local $1) ) ) - ;;@ assembly/buddy.ts:241:75 + ;;@ assembly/buddy.ts:247:75 (i32.const 1) ) ) - (func $assembly/buddy/node_is_split (; 6 ;) (type $ii) (param $0 i32) (result i32) + (func $assembly/buddy/node_is_split$get (; 6 ;) (type $ii) (param $0 i32) (result i32) ;;@ assembly/buddy.ts:143:9 (i32.load8_u ;;@ assembly/buddy.ts:143:18 (i32.add - (get_global $assembly/buddy/SPLIT_START) - ;;@ assembly/buddy.ts:143:32 + (get_global $assembly/buddy/NODE_IS_SPLIT_START) + ;;@ assembly/buddy.ts:143:40 (get_local $0) ) ) ) (func $assembly/buddy/parent_is_split (; 7 ;) (type $ii) (param $0 i32) (result i32) - ;;@ assembly/buddy.ts:249:9 + ;;@ assembly/buddy.ts:255:9 (i32.and - (i32.shr_s - ;;@ assembly/buddy.ts:249:10 - (call $assembly/buddy/node_is_split - ;;@ assembly/buddy.ts:249:24 + (i32.shr_u + ;;@ assembly/buddy.ts:255:10 + (call $assembly/buddy/node_is_split$get + ;;@ assembly/buddy.ts:255:28 (i32.div_u - ;;@ assembly/buddy.ts:248:2 + ;;@ assembly/buddy.ts:254:2 (tee_local $0 - ;;@ assembly/buddy.ts:248:10 + ;;@ assembly/buddy.ts:254:10 (i32.div_u (i32.sub - ;;@ assembly/buddy.ts:248:11 + ;;@ assembly/buddy.ts:254:11 (get_local $0) - ;;@ assembly/buddy.ts:248:19 + ;;@ assembly/buddy.ts:254:19 (i32.const 1) ) - ;;@ assembly/buddy.ts:248:24 + ;;@ assembly/buddy.ts:254:24 (i32.const 2) ) ) - ;;@ assembly/buddy.ts:249:32 + ;;@ assembly/buddy.ts:255:36 (i32.const 8) ) ) - ;;@ assembly/buddy.ts:249:38 - (i32.rem_u - ;;@ assembly/buddy.ts:249:44 + ;;@ assembly/buddy.ts:255:43 + (i32.and + ;;@ assembly/buddy.ts:255:49 (get_local $0) - ;;@ assembly/buddy.ts:249:52 - (i32.const 8) + ;;@ assembly/buddy.ts:255:57 + (i32.const 7) ) ) - ;;@ assembly/buddy.ts:249:58 + ;;@ assembly/buddy.ts:255:63 (i32.const 1) ) ) (func $assembly/buddy/list_remove (; 8 ;) (type $iv) (param $0 i32) (local $1 i32) - ;;@ assembly/buddy.ts:211:2 + ;;@ assembly/buddy.ts:217:2 (i32.store offset=4 - ;;@ assembly/buddy.ts:209:2 + ;;@ assembly/buddy.ts:215:2 (tee_local $1 - ;;@ assembly/buddy.ts:209:13 + ;;@ assembly/buddy.ts:215:13 (i32.load (get_local $0) ) ) - ;;@ assembly/buddy.ts:210:2 + ;;@ assembly/buddy.ts:216:2 (tee_local $0 - ;;@ assembly/buddy.ts:210:13 + ;;@ assembly/buddy.ts:216:13 (i32.load offset=4 (get_local $0) ) ) ) - ;;@ assembly/buddy.ts:212:2 + ;;@ assembly/buddy.ts:218:2 (i32.store (get_local $0) - ;;@ assembly/buddy.ts:212:14 + ;;@ assembly/buddy.ts:218:14 (get_local $1) ) ) (func $assembly/buddy/ptr_for_node (; 9 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - ;;@ assembly/buddy.ts:232:9 + ;;@ assembly/buddy.ts:238:9 (i32.add (get_global $assembly/buddy/base_ptr) - ;;@ assembly/buddy.ts:232:20 + ;;@ assembly/buddy.ts:238:20 (i32.shl - ;;@ assembly/buddy.ts:232:21 + ;;@ assembly/buddy.ts:238:21 (i32.add - ;;@ assembly/buddy.ts:232:22 + ;;@ assembly/buddy.ts:238:22 (i32.sub (get_local $0) - ;;@ assembly/buddy.ts:232:30 + ;;@ assembly/buddy.ts:238:30 (i32.shl - ;;@ assembly/buddy.ts:232:31 + ;;@ assembly/buddy.ts:238:31 (i32.const 1) - ;;@ assembly/buddy.ts:232:36 + ;;@ assembly/buddy.ts:238:36 (get_local $1) ) ) - ;;@ assembly/buddy.ts:232:46 + ;;@ assembly/buddy.ts:238:46 (i32.const 1) ) - ;;@ assembly/buddy.ts:232:52 + ;;@ assembly/buddy.ts:238:52 (i32.sub - ;;@ assembly/buddy.ts:232:53 + ;;@ assembly/buddy.ts:238:53 (i32.const 31) - ;;@ assembly/buddy.ts:232:70 + ;;@ assembly/buddy.ts:238:70 (get_local $1) ) ) @@ -320,53 +329,53 @@ (local $1 i32) (local $2 i32) (set_local $2 - ;;@ assembly/buddy.ts:257:2 + ;;@ assembly/buddy.ts:263:2 (tee_local $1 - ;;@ assembly/buddy.ts:257:18 + ;;@ assembly/buddy.ts:263:18 (i32.div_u - ;;@ assembly/buddy.ts:256:2 + ;;@ assembly/buddy.ts:262:2 (tee_local $0 - ;;@ assembly/buddy.ts:256:10 + ;;@ assembly/buddy.ts:262:10 (i32.div_u (i32.sub - ;;@ assembly/buddy.ts:256:11 + ;;@ assembly/buddy.ts:262:11 (get_local $0) - ;;@ assembly/buddy.ts:256:19 + ;;@ assembly/buddy.ts:262:19 (i32.const 1) ) - ;;@ assembly/buddy.ts:256:24 + ;;@ assembly/buddy.ts:262:24 (i32.const 2) ) ) - ;;@ assembly/buddy.ts:257:26 + ;;@ assembly/buddy.ts:263:26 (i32.const 8) ) ) ) (set_local $0 - ;;@ assembly/buddy.ts:258:28 + ;;@ assembly/buddy.ts:265:4 (i32.xor - (call $assembly/buddy/node_is_split - ;;@ assembly/buddy.ts:258:42 + (call $assembly/buddy/node_is_split$get + ;;@ assembly/buddy.ts:265:22 (get_local $1) ) - ;;@ assembly/buddy.ts:258:55 + ;;@ assembly/buddy.ts:265:35 (i32.shl - ;;@ assembly/buddy.ts:258:61 + ;;@ assembly/buddy.ts:265:41 (i32.const 1) - ;;@ assembly/buddy.ts:258:66 - (i32.rem_u - ;;@ assembly/buddy.ts:258:67 + ;;@ assembly/buddy.ts:265:46 + (i32.and + ;;@ assembly/buddy.ts:265:47 (get_local $0) - ;;@ assembly/buddy.ts:258:75 - (i32.const 8) + ;;@ assembly/buddy.ts:265:55 + (i32.const 7) ) ) ) ) (i32.store8 (i32.add - (get_global $assembly/buddy/SPLIT_START) + (get_global $assembly/buddy/NODE_IS_SPLIT_START) (get_local $2) ) (get_local $0) @@ -377,47 +386,47 @@ (local $2 i32) (loop $continue|0 (if - ;;@ assembly/buddy.ts:283:9 + ;;@ assembly/buddy.ts:291:9 (i32.lt_u (get_local $0) - ;;@ assembly/buddy.ts:283:18 + ;;@ assembly/buddy.ts:291:18 (get_global $assembly/buddy/bucket_limit) ) (block - ;;@ assembly/buddy.ts:293:4 + ;;@ assembly/buddy.ts:301:4 (if - ;;@ assembly/buddy.ts:293:8 + ;;@ assembly/buddy.ts:301:8 (i32.eqz - ;;@ assembly/buddy.ts:293:9 + ;;@ assembly/buddy.ts:301:9 (call $assembly/buddy/parent_is_split - ;;@ assembly/buddy.ts:284:4 + ;;@ assembly/buddy.ts:292:4 (tee_local $1 - ;;@ assembly/buddy.ts:284:15 + ;;@ assembly/buddy.ts:292:15 (call $assembly/buddy/node_for_ptr - ;;@ assembly/buddy.ts:284:28 + ;;@ assembly/buddy.ts:292:28 (get_global $assembly/buddy/base_ptr) - ;;@ assembly/buddy.ts:284:38 + ;;@ assembly/buddy.ts:292:38 (get_global $assembly/buddy/bucket_limit) ) ) ) ) - ;;@ assembly/buddy.ts:293:32 + ;;@ assembly/buddy.ts:301:32 (block - ;;@ assembly/buddy.ts:294:6 + ;;@ assembly/buddy.ts:302:6 (call $assembly/buddy/list_remove - ;;@ assembly/buddy.ts:294:18 + ;;@ assembly/buddy.ts:302:18 (get_global $assembly/buddy/base_ptr) ) - ;;@ assembly/buddy.ts:295:6 + ;;@ assembly/buddy.ts:303:6 (call $assembly/buddy/list_init - ;;@ assembly/buddy.ts:295:16 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:295:27 + ;;@ assembly/buddy.ts:303:16 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:303:28 (block (result i32) (set_global $assembly/buddy/bucket_limit (i32.sub - ;;@ assembly/buddy.ts:295:29 + ;;@ assembly/buddy.ts:303:30 (get_global $assembly/buddy/bucket_limit) (i32.const 1) ) @@ -426,71 +435,71 @@ ) ) ) - ;;@ assembly/buddy.ts:296:6 + ;;@ assembly/buddy.ts:304:6 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:296:16 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:296:27 + ;;@ assembly/buddy.ts:304:16 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:304:28 (get_global $assembly/buddy/bucket_limit) ) - ;;@ assembly/buddy.ts:296:42 + ;;@ assembly/buddy.ts:304:43 (get_global $assembly/buddy/base_ptr) ) - ;;@ assembly/buddy.ts:297:6 + ;;@ assembly/buddy.ts:305:6 (br $continue|0) ) ) - ;;@ assembly/buddy.ts:309:4 + ;;@ assembly/buddy.ts:317:4 (if - ;;@ assembly/buddy.ts:309:8 + ;;@ assembly/buddy.ts:317:8 (i32.eqz - ;;@ assembly/buddy.ts:309:9 + ;;@ assembly/buddy.ts:317:9 (call $assembly/buddy/update_max_ptr - ;;@ assembly/buddy.ts:309:24 + ;;@ assembly/buddy.ts:317:24 (i32.add - ;;@ assembly/buddy.ts:308:4 + ;;@ assembly/buddy.ts:316:4 (tee_local $2 - ;;@ assembly/buddy.ts:308:18 + ;;@ assembly/buddy.ts:316:18 (call $assembly/buddy/ptr_for_node - ;;@ assembly/buddy.ts:308:31 + ;;@ assembly/buddy.ts:316:31 (i32.add (get_local $1) - ;;@ assembly/buddy.ts:308:38 + ;;@ assembly/buddy.ts:316:38 (i32.const 1) ) - ;;@ assembly/buddy.ts:308:41 + ;;@ assembly/buddy.ts:316:41 (get_global $assembly/buddy/bucket_limit) ) ) - ;;@ assembly/buddy.ts:309:38 + ;;@ assembly/buddy.ts:317:38 (i32.const 8) ) ) ) - ;;@ assembly/buddy.ts:310:13 + ;;@ assembly/buddy.ts:318:13 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:312:4 + ;;@ assembly/buddy.ts:320:4 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:312:14 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:312:25 + ;;@ assembly/buddy.ts:320:14 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:320:26 (get_global $assembly/buddy/bucket_limit) ) - ;;@ assembly/buddy.ts:312:40 + ;;@ assembly/buddy.ts:320:41 (get_local $2) ) - ;;@ assembly/buddy.ts:313:4 + ;;@ assembly/buddy.ts:321:4 (call $assembly/buddy/list_init - ;;@ assembly/buddy.ts:313:14 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:313:25 + ;;@ assembly/buddy.ts:321:14 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:321:26 (block (result i32) (set_global $assembly/buddy/bucket_limit (i32.sub - ;;@ assembly/buddy.ts:313:27 + ;;@ assembly/buddy.ts:321:28 (get_global $assembly/buddy/bucket_limit) (i32.const 1) ) @@ -499,25 +508,25 @@ ) ) ) - ;;@ assembly/buddy.ts:320:4 + ;;@ assembly/buddy.ts:328:4 (if - ;;@ assembly/buddy.ts:319:4 + ;;@ assembly/buddy.ts:327:4 (tee_local $1 - ;;@ assembly/buddy.ts:319:11 + ;;@ assembly/buddy.ts:327:11 (i32.div_u (i32.sub - ;;@ assembly/buddy.ts:319:12 + ;;@ assembly/buddy.ts:327:12 (get_local $1) - ;;@ assembly/buddy.ts:319:19 + ;;@ assembly/buddy.ts:327:19 (i32.const 1) ) - ;;@ assembly/buddy.ts:319:24 + ;;@ assembly/buddy.ts:327:24 (i32.const 2) ) ) - ;;@ assembly/buddy.ts:321:6 + ;;@ assembly/buddy.ts:329:6 (call $assembly/buddy/flip_parent_is_split - ;;@ assembly/buddy.ts:321:27 + ;;@ assembly/buddy.ts:329:27 (get_local $1) ) ) @@ -525,36 +534,36 @@ ) ) ) - ;;@ assembly/buddy.ts:325:9 + ;;@ assembly/buddy.ts:333:9 (i32.const 1) ) (func $assembly/buddy/list_pop (; 12 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) - ;;@ assembly/buddy.ts:220:2 + ;;@ assembly/buddy.ts:226:2 (if - ;;@ assembly/buddy.ts:220:6 + ;;@ assembly/buddy.ts:226:6 (i32.eq - ;;@ assembly/buddy.ts:219:2 + ;;@ assembly/buddy.ts:225:2 (tee_local $1 - ;;@ assembly/buddy.ts:219:13 + ;;@ assembly/buddy.ts:225:13 (i32.load (get_local $0) ) ) - ;;@ assembly/buddy.ts:220:14 + ;;@ assembly/buddy.ts:226:14 (get_local $0) ) - ;;@ assembly/buddy.ts:220:27 + ;;@ assembly/buddy.ts:226:27 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:221:2 + ;;@ assembly/buddy.ts:227:2 (call $assembly/buddy/list_remove - ;;@ assembly/buddy.ts:221:14 + ;;@ assembly/buddy.ts:227:14 (get_local $1) ) - ;;@ assembly/buddy.ts:222:9 + ;;@ assembly/buddy.ts:228:9 (get_local $1) ) (func $assembly/buddy/allocate_memory (; 13 ;) (type $ii) (param $0 i32) (result i32) @@ -562,91 +571,107 @@ (local $2 i32) (local $3 i32) (local $4 i32) - ;;@ assembly/buddy.ts:339:2 + ;;@ assembly/buddy.ts:345:2 (if - ;;@ assembly/buddy.ts:339:6 + ;;@ assembly/buddy.ts:345:6 (i32.gt_u (i32.add (get_local $0) - ;;@ assembly/buddy.ts:339:16 + ;;@ assembly/buddy.ts:345:16 (i32.const 8) ) - ;;@ assembly/buddy.ts:339:30 + ;;@ assembly/buddy.ts:345:30 (i32.const -2147483648) ) - ;;@ assembly/buddy.ts:340:11 + ;;@ assembly/buddy.ts:346:11 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:348:2 + ;;@ assembly/buddy.ts:354:2 (if (i32.eqz - ;;@ assembly/buddy.ts:348:6 + ;;@ assembly/buddy.ts:354:6 (get_global $assembly/buddy/base_ptr) ) - ;;@ assembly/buddy.ts:348:21 + ;;@ assembly/buddy.ts:354:21 (block - ;;@ assembly/buddy.ts:349:4 + ;;@ assembly/buddy.ts:356:4 (set_global $assembly/buddy/base_ptr - ;;@ assembly/buddy.ts:349:15 - (get_global $assembly/buddy/SPLIT_END) + ;;@ assembly/buddy.ts:356:15 + (i32.and + (i32.add + ;;@ assembly/buddy.ts:356:16 + (get_global $assembly/buddy/NODE_IS_SPLIT_END) + ;;@ assembly/buddy.ts:356:36 + (i32.const 7) + ) + (i32.const -8) + ) ) - ;;@ assembly/buddy.ts:350:4 + ;;@ assembly/buddy.ts:357:4 (set_global $assembly/buddy/max_ptr - ;;@ assembly/buddy.ts:350:14 + ;;@ assembly/buddy.ts:357:14 (i32.shl (current_memory) - ;;@ assembly/buddy.ts:350:41 + ;;@ assembly/buddy.ts:357:41 (i32.const 16) ) ) - ;;@ assembly/buddy.ts:351:4 + ;;@ assembly/buddy.ts:358:4 (set_global $assembly/buddy/bucket_limit - ;;@ assembly/buddy.ts:351:19 + ;;@ assembly/buddy.ts:358:19 (i32.const 27) ) - ;;@ assembly/buddy.ts:352:4 - (drop - (call $assembly/buddy/update_max_ptr - ;;@ assembly/buddy.ts:352:19 - (i32.add - (get_global $assembly/buddy/base_ptr) - ;;@ assembly/buddy.ts:352:30 - (i32.const 8) + ;;@ assembly/buddy.ts:359:4 + (if + ;;@ assembly/buddy.ts:359:8 + (i32.eqz + ;;@ assembly/buddy.ts:359:9 + (call $assembly/buddy/update_max_ptr + ;;@ assembly/buddy.ts:359:24 + (i32.add + (get_global $assembly/buddy/base_ptr) + ;;@ assembly/buddy.ts:359:35 + (i32.const 8) + ) ) ) + ;;@ assembly/buddy.ts:360:13 + (return + (i32.const 0) + ) ) - ;;@ assembly/buddy.ts:353:4 + ;;@ assembly/buddy.ts:362:4 (call $assembly/buddy/list_init - ;;@ assembly/buddy.ts:353:14 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:353:25 + ;;@ assembly/buddy.ts:362:14 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:362:26 (i32.const 27) ) ) - ;;@ assembly/buddy.ts:354:4 + ;;@ assembly/buddy.ts:363:4 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:354:14 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:354:25 + ;;@ assembly/buddy.ts:363:14 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:363:26 (i32.const 27) ) - ;;@ assembly/buddy.ts:354:44 + ;;@ assembly/buddy.ts:363:45 (get_global $assembly/buddy/base_ptr) ) ) ) - ;;@ assembly/buddy.ts:362:2 + ;;@ assembly/buddy.ts:371:2 (set_local $4 - ;;@ assembly/buddy.ts:361:2 + ;;@ assembly/buddy.ts:370:2 (tee_local $1 - ;;@ assembly/buddy.ts:361:11 + ;;@ assembly/buddy.ts:370:11 (call $assembly/buddy/bucket_for_request - ;;@ assembly/buddy.ts:361:30 + ;;@ assembly/buddy.ts:370:30 (i32.add (get_local $0) - ;;@ assembly/buddy.ts:361:40 + ;;@ assembly/buddy.ts:370:40 (i32.const 8) ) ) @@ -654,224 +679,224 @@ ) (loop $continue|0 (if - ;;@ assembly/buddy.ts:369:9 + ;;@ assembly/buddy.ts:378:9 (i32.add (get_local $1) - ;;@ assembly/buddy.ts:369:18 + ;;@ assembly/buddy.ts:378:18 (i32.const 1) ) - ;;@ assembly/buddy.ts:369:26 + ;;@ assembly/buddy.ts:378:26 (block - ;;@ assembly/buddy.ts:377:4 - (if - ;;@ assembly/buddy.ts:377:8 - (i32.eqz - ;;@ assembly/buddy.ts:377:9 - (call $assembly/buddy/lower_bucket_limit - ;;@ assembly/buddy.ts:377:28 - (get_local $1) - ) - ) - ;;@ assembly/buddy.ts:378:13 - (return - (i32.const 0) - ) - ) ;;@ assembly/buddy.ts:386:4 (if ;;@ assembly/buddy.ts:386:8 (i32.eqz - ;;@ assembly/buddy.ts:385:4 + ;;@ assembly/buddy.ts:386:9 + (call $assembly/buddy/lower_bucket_limit + ;;@ assembly/buddy.ts:386:28 + (get_local $1) + ) + ) + ;;@ assembly/buddy.ts:387:13 + (return + (i32.const 0) + ) + ) + ;;@ assembly/buddy.ts:395:4 + (if + ;;@ assembly/buddy.ts:395:8 + (i32.eqz + ;;@ assembly/buddy.ts:394:4 (tee_local $2 - ;;@ assembly/buddy.ts:385:10 + ;;@ assembly/buddy.ts:394:10 (call $assembly/buddy/list_pop - ;;@ assembly/buddy.ts:385:37 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:385:48 + ;;@ assembly/buddy.ts:394:37 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:394:49 (get_local $1) ) ) ) ) - ;;@ assembly/buddy.ts:386:14 + ;;@ assembly/buddy.ts:395:14 (block - ;;@ assembly/buddy.ts:391:6 + ;;@ assembly/buddy.ts:400:6 (if - ;;@ assembly/buddy.ts:391:10 + ;;@ assembly/buddy.ts:400:10 (i32.and (if (result i32) (tee_local $2 (i32.ne (get_local $1) - ;;@ assembly/buddy.ts:391:20 + ;;@ assembly/buddy.ts:400:20 (get_global $assembly/buddy/bucket_limit) ) ) (get_local $2) (i32.eqz - ;;@ assembly/buddy.ts:391:36 + ;;@ assembly/buddy.ts:400:36 (get_local $1) ) ) (i32.const 1) ) - ;;@ assembly/buddy.ts:391:49 + ;;@ assembly/buddy.ts:400:49 (block - ;;@ assembly/buddy.ts:392:8 + ;;@ assembly/buddy.ts:401:8 (set_local $1 (i32.sub (get_local $1) (i32.const 1) ) ) - ;;@ assembly/buddy.ts:393:8 + ;;@ assembly/buddy.ts:402:8 (br $continue|0) ) ) - ;;@ assembly/buddy.ts:403:6 + ;;@ assembly/buddy.ts:412:6 (if - ;;@ assembly/buddy.ts:403:10 + ;;@ assembly/buddy.ts:412:10 (i32.eqz - ;;@ assembly/buddy.ts:403:11 + ;;@ assembly/buddy.ts:412:11 (call $assembly/buddy/lower_bucket_limit - ;;@ assembly/buddy.ts:403:30 + ;;@ assembly/buddy.ts:412:30 (i32.sub (get_local $1) - ;;@ assembly/buddy.ts:403:39 + ;;@ assembly/buddy.ts:412:39 (i32.const 1) ) ) ) - ;;@ assembly/buddy.ts:404:15 + ;;@ assembly/buddy.ts:413:15 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:406:6 + ;;@ assembly/buddy.ts:415:6 (set_local $2 - ;;@ assembly/buddy.ts:406:12 + ;;@ assembly/buddy.ts:415:12 (call $assembly/buddy/list_pop - ;;@ assembly/buddy.ts:406:39 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:406:50 + ;;@ assembly/buddy.ts:415:39 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:415:51 (get_local $1) ) ) ) ) ) - ;;@ assembly/buddy.ts:413:4 + ;;@ assembly/buddy.ts:422:4 (set_local $3 - ;;@ assembly/buddy.ts:413:11 + ;;@ assembly/buddy.ts:422:11 (i32.shl (i32.const 1) - ;;@ assembly/buddy.ts:413:16 + ;;@ assembly/buddy.ts:422:16 (i32.sub - ;;@ assembly/buddy.ts:413:17 + ;;@ assembly/buddy.ts:422:17 (i32.const 31) - ;;@ assembly/buddy.ts:413:34 + ;;@ assembly/buddy.ts:422:34 (get_local $1) ) ) ) - ;;@ assembly/buddy.ts:415:4 + ;;@ assembly/buddy.ts:424:4 (if - ;;@ assembly/buddy.ts:415:8 + ;;@ assembly/buddy.ts:424:8 (i32.eqz - ;;@ assembly/buddy.ts:415:9 + ;;@ assembly/buddy.ts:424:9 (call $assembly/buddy/update_max_ptr - ;;@ assembly/buddy.ts:415:24 + ;;@ assembly/buddy.ts:424:24 (i32.add (get_local $2) - ;;@ assembly/buddy.ts:414:19 + ;;@ assembly/buddy.ts:423:19 (if (result i32) (i32.lt_u (get_local $1) - ;;@ assembly/buddy.ts:414:28 + ;;@ assembly/buddy.ts:423:28 (get_local $4) ) - ;;@ assembly/buddy.ts:414:46 + ;;@ assembly/buddy.ts:423:46 (i32.add (i32.div_u (get_local $3) - ;;@ assembly/buddy.ts:414:53 + ;;@ assembly/buddy.ts:423:53 (i32.const 2) ) - ;;@ assembly/buddy.ts:414:57 + ;;@ assembly/buddy.ts:423:57 (i32.const 8) ) - ;;@ assembly/buddy.ts:414:69 + ;;@ assembly/buddy.ts:423:69 (get_local $3) ) ) ) ) - ;;@ assembly/buddy.ts:415:45 + ;;@ assembly/buddy.ts:424:45 (block - ;;@ assembly/buddy.ts:416:6 + ;;@ assembly/buddy.ts:425:6 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:416:16 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:416:27 + ;;@ assembly/buddy.ts:425:16 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:425:28 (get_local $1) ) - ;;@ assembly/buddy.ts:416:36 + ;;@ assembly/buddy.ts:425:37 (get_local $2) ) - ;;@ assembly/buddy.ts:417:13 + ;;@ assembly/buddy.ts:426:13 (return (i32.const 0) ) ) ) - ;;@ assembly/buddy.ts:432:4 + ;;@ assembly/buddy.ts:441:4 (if - ;;@ assembly/buddy.ts:431:4 + ;;@ assembly/buddy.ts:440:4 (tee_local $3 - ;;@ assembly/buddy.ts:431:8 + ;;@ assembly/buddy.ts:440:8 (call $assembly/buddy/node_for_ptr - ;;@ assembly/buddy.ts:431:21 + ;;@ assembly/buddy.ts:440:21 (get_local $2) - ;;@ assembly/buddy.ts:431:26 + ;;@ assembly/buddy.ts:440:26 (get_local $1) ) ) - ;;@ assembly/buddy.ts:433:6 + ;;@ assembly/buddy.ts:442:6 (call $assembly/buddy/flip_parent_is_split - ;;@ assembly/buddy.ts:433:27 + ;;@ assembly/buddy.ts:442:27 (get_local $3) ) ) (loop $continue|1 (if - ;;@ assembly/buddy.ts:443:11 + ;;@ assembly/buddy.ts:452:11 (i32.lt_u (get_local $1) - ;;@ assembly/buddy.ts:443:20 + ;;@ assembly/buddy.ts:452:20 (get_local $4) ) (block - ;;@ assembly/buddy.ts:446:6 + ;;@ assembly/buddy.ts:455:6 (call $assembly/buddy/flip_parent_is_split - ;;@ assembly/buddy.ts:444:6 + ;;@ assembly/buddy.ts:453:6 (tee_local $3 - ;;@ assembly/buddy.ts:444:10 + ;;@ assembly/buddy.ts:453:10 (i32.add - (i32.mul + (i32.shl (get_local $3) - ;;@ assembly/buddy.ts:444:14 - (i32.const 2) + ;;@ assembly/buddy.ts:453:14 + (i32.const 1) ) - ;;@ assembly/buddy.ts:444:18 + ;;@ assembly/buddy.ts:453:18 (i32.const 1) ) ) ) - ;;@ assembly/buddy.ts:447:6 + ;;@ assembly/buddy.ts:456:6 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:447:16 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:445:6 + ;;@ assembly/buddy.ts:457:8 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:454:6 (tee_local $1 (i32.add (get_local $1) @@ -879,15 +904,15 @@ ) ) ) - ;;@ assembly/buddy.ts:447:36 + ;;@ assembly/buddy.ts:458:8 (call $assembly/buddy/ptr_for_node - ;;@ assembly/buddy.ts:447:66 + ;;@ assembly/buddy.ts:458:38 (i32.add (get_local $3) - ;;@ assembly/buddy.ts:447:70 + ;;@ assembly/buddy.ts:458:42 (i32.const 1) ) - ;;@ assembly/buddy.ts:447:73 + ;;@ assembly/buddy.ts:458:45 (get_local $1) ) ) @@ -895,143 +920,143 @@ ) ) ) - ;;@ assembly/buddy.ts:454:4 + ;;@ assembly/buddy.ts:466:4 (i32.store - ;;@ assembly/buddy.ts:454:17 + ;;@ assembly/buddy.ts:466:17 (get_local $2) - ;;@ assembly/buddy.ts:454:22 + ;;@ assembly/buddy.ts:466:22 (get_local $0) ) - ;;@ assembly/buddy.ts:455:17 + ;;@ assembly/buddy.ts:467:17 (return - ;;@ assembly/buddy.ts:455:11 + ;;@ assembly/buddy.ts:467:11 (i32.add (get_local $2) - ;;@ assembly/buddy.ts:455:17 + ;;@ assembly/buddy.ts:467:17 (i32.const 8) ) ) ) ) ) - ;;@ assembly/buddy.ts:458:9 + ;;@ assembly/buddy.ts:470:9 (i32.const 0) ) (func $assembly/buddy/free_memory (; 14 ;) (type $iv) (param $0 i32) (local $1 i32) (local $2 i32) - ;;@ assembly/buddy.ts:468:2 + ;;@ assembly/buddy.ts:480:2 (if - ;;@ assembly/buddy.ts:468:6 + ;;@ assembly/buddy.ts:480:6 (i32.eqz - ;;@ assembly/buddy.ts:468:7 + ;;@ assembly/buddy.ts:480:7 (get_local $0) ) - ;;@ assembly/buddy.ts:469:4 + ;;@ assembly/buddy.ts:481:4 (return) ) - ;;@ assembly/buddy.ts:478:2 + ;;@ assembly/buddy.ts:490:2 (set_local $1 - ;;@ assembly/buddy.ts:478:11 + ;;@ assembly/buddy.ts:490:11 (call $assembly/buddy/bucket_for_request - ;;@ assembly/buddy.ts:478:30 + ;;@ assembly/buddy.ts:490:30 (i32.add (i32.load - ;;@ assembly/buddy.ts:477:2 + ;;@ assembly/buddy.ts:489:2 (tee_local $0 - ;;@ assembly/buddy.ts:477:8 + ;;@ assembly/buddy.ts:489:8 (i32.sub (get_local $0) - ;;@ assembly/buddy.ts:477:14 + ;;@ assembly/buddy.ts:489:14 (i32.const 8) ) ) ) - ;;@ assembly/buddy.ts:478:49 + ;;@ assembly/buddy.ts:490:49 (i32.const 8) ) ) ) - ;;@ assembly/buddy.ts:479:2 + ;;@ assembly/buddy.ts:491:2 (set_local $0 - ;;@ assembly/buddy.ts:479:6 + ;;@ assembly/buddy.ts:491:6 (call $assembly/buddy/node_for_ptr - ;;@ assembly/buddy.ts:479:19 + ;;@ assembly/buddy.ts:491:19 (get_local $0) - ;;@ assembly/buddy.ts:479:24 + ;;@ assembly/buddy.ts:491:24 (get_local $1) ) ) - ;;@ assembly/buddy.ts:485:2 + ;;@ assembly/buddy.ts:497:2 (block $break|0 (loop $continue|0 (if - ;;@ assembly/buddy.ts:485:9 + ;;@ assembly/buddy.ts:497:9 (get_local $0) (block - ;;@ assembly/buddy.ts:492:4 + ;;@ assembly/buddy.ts:504:4 (call $assembly/buddy/flip_parent_is_split - ;;@ assembly/buddy.ts:492:25 + ;;@ assembly/buddy.ts:504:25 (get_local $0) ) - ;;@ assembly/buddy.ts:503:6 + ;;@ assembly/buddy.ts:515:6 (br_if $break|0 - ;;@ assembly/buddy.ts:502:8 + ;;@ assembly/buddy.ts:514:8 (if (result i32) (tee_local $2 (call $assembly/buddy/parent_is_split - ;;@ assembly/buddy.ts:502:24 + ;;@ assembly/buddy.ts:514:24 (get_local $0) ) ) (get_local $2) - ;;@ assembly/buddy.ts:502:30 + ;;@ assembly/buddy.ts:514:30 (i32.eq (get_local $1) - ;;@ assembly/buddy.ts:502:40 + ;;@ assembly/buddy.ts:514:40 (get_global $assembly/buddy/bucket_limit) ) ) ) - ;;@ assembly/buddy.ts:513:4 + ;;@ assembly/buddy.ts:525:4 (call $assembly/buddy/list_remove - ;;@ assembly/buddy.ts:513:16 + ;;@ assembly/buddy.ts:525:16 (call $assembly/buddy/ptr_for_node - ;;@ assembly/buddy.ts:513:46 + ;;@ assembly/buddy.ts:525:46 (i32.add (i32.xor - ;;@ assembly/buddy.ts:513:47 + ;;@ assembly/buddy.ts:525:47 (i32.sub - ;;@ assembly/buddy.ts:513:48 + ;;@ assembly/buddy.ts:525:48 (get_local $0) - ;;@ assembly/buddy.ts:513:52 + ;;@ assembly/buddy.ts:525:52 (i32.const 1) ) - ;;@ assembly/buddy.ts:513:57 + ;;@ assembly/buddy.ts:525:57 (i32.const 1) ) - ;;@ assembly/buddy.ts:513:62 + ;;@ assembly/buddy.ts:525:62 (i32.const 1) ) - ;;@ assembly/buddy.ts:513:65 + ;;@ assembly/buddy.ts:525:65 (get_local $1) ) ) - ;;@ assembly/buddy.ts:514:4 + ;;@ assembly/buddy.ts:526:4 (set_local $0 - ;;@ assembly/buddy.ts:514:8 + ;;@ assembly/buddy.ts:526:8 (i32.div_u (i32.sub - ;;@ assembly/buddy.ts:514:9 + ;;@ assembly/buddy.ts:526:9 (get_local $0) - ;;@ assembly/buddy.ts:514:13 + ;;@ assembly/buddy.ts:526:13 (i32.const 1) ) - ;;@ assembly/buddy.ts:514:18 + ;;@ assembly/buddy.ts:526:18 (i32.const 2) ) ) - ;;@ assembly/buddy.ts:515:4 + ;;@ assembly/buddy.ts:527:4 (set_local $1 (i32.sub (get_local $1) @@ -1043,18 +1068,18 @@ ) ) ) - ;;@ assembly/buddy.ts:524:2 + ;;@ assembly/buddy.ts:536:2 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:524:12 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:524:23 + ;;@ assembly/buddy.ts:536:12 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:536:24 (get_local $1) ) - ;;@ assembly/buddy.ts:524:32 + ;;@ assembly/buddy.ts:536:33 (call $assembly/buddy/ptr_for_node - ;;@ assembly/buddy.ts:524:62 + ;;@ assembly/buddy.ts:536:63 (get_local $0) - ;;@ assembly/buddy.ts:524:65 + ;;@ assembly/buddy.ts:536:66 (get_local $1) ) ) @@ -1558,25 +1583,26 @@ ) ) (func $start (; 16 ;) (type $v) - (set_global $assembly/buddy/BUCKET_START - ;;@ assembly/buddy.ts:92:26 + (set_global $assembly/buddy/BUCKETS_START + ;;@ assembly/buddy.ts:92:27 (get_global $HEAP_BASE) ) - (set_global $assembly/buddy/BUCKET_END - ;;@ assembly/buddy.ts:93:24 + (set_global $assembly/buddy/BUCKETS_END + ;;@ assembly/buddy.ts:93:25 (i32.add - (get_global $assembly/buddy/BUCKET_START) + (get_global $assembly/buddy/BUCKETS_START) (i32.const 224) ) ) - (set_global $assembly/buddy/SPLIT_START - ;;@ assembly/buddy.ts:138:25 - (get_global $assembly/buddy/BUCKET_END) + (set_global $assembly/buddy/NODE_IS_SPLIT_START + ;;@ assembly/buddy.ts:138:33 + (get_global $assembly/buddy/BUCKETS_END) ) - (set_global $assembly/buddy/SPLIT_END - ;;@ assembly/buddy.ts:139:23 + (set_global $assembly/buddy/NODE_IS_SPLIT_END + ;;@ assembly/buddy.ts:139:31 (i32.add - (get_global $assembly/buddy/SPLIT_START) + (get_global $assembly/buddy/NODE_IS_SPLIT_START) + ;;@ assembly/buddy.ts:139:53 (i32.const 16777216) ) ) diff --git a/tests/allocators/buddy/buddy.untouched.wat b/tests/allocators/buddy/buddy.untouched.wat index 911fee09..ab9a3112 100644 --- a/tests/allocators/buddy/buddy.untouched.wat +++ b/tests/allocators/buddy/buddy.untouched.wat @@ -1,7 +1,7 @@ (module (type $i (func (result i32))) - (type $ii (func (param i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) + (type $ii (func (param i32) (result i32))) (type $iv (func (param i32))) (type $iiv (func (param i32 i32))) (type $iii (func (param i32 i32) (result i32))) @@ -14,12 +14,12 @@ (global $assembly/buddy/MAX_ALLOC_LOG2 i32 (i32.const 31)) (global $assembly/buddy/MAX_ALLOC i32 (i32.const -2147483648)) (global $assembly/buddy/BUCKET_COUNT i32 (i32.const 28)) - (global $assembly/buddy/BUCKET_START (mut i32) (i32.const 0)) - (global $assembly/buddy/BUCKET_END (mut i32) (i32.const 0)) + (global $assembly/buddy/BUCKETS_START (mut i32) (i32.const 0)) + (global $assembly/buddy/BUCKETS_END (mut i32) (i32.const 0)) (global $assembly/buddy/bucket_limit (mut i32) (i32.const 0)) (global $assembly/buddy/SPLIT_COUNT i32 (i32.const 16777216)) - (global $assembly/buddy/SPLIT_START (mut i32) (i32.const 0)) - (global $assembly/buddy/SPLIT_END (mut i32) (i32.const 0)) + (global $assembly/buddy/NODE_IS_SPLIT_START (mut i32) (i32.const 0)) + (global $assembly/buddy/NODE_IS_SPLIT_END (mut i32) (i32.const 0)) (global $assembly/buddy/base_ptr (mut i32) (i32.const 0)) (global $assembly/buddy/max_ptr (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 44)) @@ -32,6 +32,7 @@ (start $start) (func $assembly/buddy/update_max_ptr (; 1 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) + (local $2 i32) ;;@ assembly/buddy.ts:170:2 (if ;;@ assembly/buddy.ts:170:6 @@ -42,63 +43,92 @@ ) ;;@ assembly/buddy.ts:170:27 (block - ;;@ assembly/buddy.ts:171:4 + ;;@ assembly/buddy.ts:174:4 (set_local $1 - ;;@ assembly/buddy.ts:171:16 + ;;@ assembly/buddy.ts:174:19 + (current_memory) + ) + ;;@ assembly/buddy.ts:175:4 + (set_local $2 + ;;@ assembly/buddy.ts:175:19 (i32.shr_u + ;;@ assembly/buddy.ts:175:25 (i32.and - ;;@ assembly/buddy.ts:171:17 + ;;@ assembly/buddy.ts:175:26 (i32.add - ;;@ assembly/buddy.ts:171:18 - (i32.sub - ;;@ assembly/buddy.ts:171:19 - (get_local $0) - ;;@ assembly/buddy.ts:171:31 - (get_global $assembly/buddy/max_ptr) - ) - ;;@ assembly/buddy.ts:171:42 + ;;@ assembly/buddy.ts:175:27 + (get_local $0) + ;;@ assembly/buddy.ts:175:39 (i32.const 65535) ) - ;;@ assembly/buddy.ts:171:52 + ;;@ assembly/buddy.ts:175:49 (i32.xor - ;;@ assembly/buddy.ts:171:53 + ;;@ assembly/buddy.ts:175:50 (i32.const 65535) (i32.const -1) ) ) - ;;@ assembly/buddy.ts:171:65 + ;;@ assembly/buddy.ts:175:61 (i32.const 16) ) ) - ;;@ assembly/buddy.ts:172:4 + ;;@ assembly/buddy.ts:176:4 (if - ;;@ assembly/buddy.ts:172:8 - (i32.lt_s - (grow_memory - ;;@ assembly/buddy.ts:172:20 + (i32.eqz + ;;@ assembly/buddy.ts:176:11 + (i32.gt_u + (get_local $2) + ;;@ assembly/buddy.ts:176:22 (get_local $1) ) - ;;@ assembly/buddy.ts:172:29 + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 176) + (i32.const 4) + ) + (unreachable) + ) + ) + ;;@ assembly/buddy.ts:177:4 + (if + ;;@ assembly/buddy.ts:177:8 + (i32.lt_s + (grow_memory + ;;@ assembly/buddy.ts:177:20 + (i32.sub + (get_local $2) + ;;@ assembly/buddy.ts:177:31 + (get_local $1) + ) + ) + ;;@ assembly/buddy.ts:177:43 (i32.const 0) ) - ;;@ assembly/buddy.ts:173:13 + ;;@ assembly/buddy.ts:178:13 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:175:4 + ;;@ assembly/buddy.ts:181:4 (set_global $assembly/buddy/max_ptr - ;;@ assembly/buddy.ts:175:14 - (get_local $0) + ;;@ assembly/buddy.ts:181:14 + (i32.shl + (get_local $2) + ;;@ assembly/buddy.ts:181:33 + (i32.const 16) + ) ) ) ) - ;;@ assembly/buddy.ts:177:9 + ;;@ assembly/buddy.ts:183:9 (return (i32.const 1) ) ) - (func $assembly/buddy/get_bucket (; 2 ;) (type $ii) (param $0 i32) (result i32) + (func $assembly/buddy/buckets$get (; 2 ;) (type $ii) (param $0 i32) (result i32) ;;@ assembly/buddy.ts:96:2 (if (i32.eqz @@ -119,110 +149,110 @@ (unreachable) ) ) - ;;@ assembly/buddy.ts:97:58 + ;;@ assembly/buddy.ts:97:59 (return ;;@ assembly/buddy.ts:97:9 (i32.add ;;@ assembly/buddy.ts:97:26 - (get_global $assembly/buddy/BUCKET_START) - ;;@ assembly/buddy.ts:97:41 + (get_global $assembly/buddy/BUCKETS_START) + ;;@ assembly/buddy.ts:97:42 (i32.mul (get_local $0) - ;;@ assembly/buddy.ts:97:49 + ;;@ assembly/buddy.ts:97:50 (i32.const 8) ) ) ) ) (func $assembly/buddy/list_init (; 3 ;) (type $iv) (param $0 i32) - ;;@ assembly/buddy.ts:186:2 + ;;@ assembly/buddy.ts:192:2 (i32.store (get_local $0) - ;;@ assembly/buddy.ts:186:14 + ;;@ assembly/buddy.ts:192:14 (get_local $0) ) - ;;@ assembly/buddy.ts:187:2 + ;;@ assembly/buddy.ts:193:2 (i32.store offset=4 (get_local $0) - ;;@ assembly/buddy.ts:187:14 + ;;@ assembly/buddy.ts:193:14 (get_local $0) ) ) (func $assembly/buddy/list_push (; 4 ;) (type $iiv) (param $0 i32) (param $1 i32) (local $2 i32) - ;;@ assembly/buddy.ts:195:2 + ;;@ assembly/buddy.ts:201:2 (set_local $2 - ;;@ assembly/buddy.ts:195:13 + ;;@ assembly/buddy.ts:201:13 (i32.load (get_local $0) ) ) - ;;@ assembly/buddy.ts:196:2 + ;;@ assembly/buddy.ts:202:2 (i32.store (get_local $1) - ;;@ assembly/buddy.ts:196:15 + ;;@ assembly/buddy.ts:202:15 (get_local $2) ) - ;;@ assembly/buddy.ts:197:2 + ;;@ assembly/buddy.ts:203:2 (i32.store offset=4 (get_local $1) - ;;@ assembly/buddy.ts:197:15 + ;;@ assembly/buddy.ts:203:15 (get_local $0) ) - ;;@ assembly/buddy.ts:198:2 + ;;@ assembly/buddy.ts:204:2 (i32.store offset=4 (get_local $2) - ;;@ assembly/buddy.ts:198:14 + ;;@ assembly/buddy.ts:204:14 (get_local $1) ) - ;;@ assembly/buddy.ts:199:2 + ;;@ assembly/buddy.ts:205:2 (i32.store (get_local $0) - ;;@ assembly/buddy.ts:199:14 + ;;@ assembly/buddy.ts:205:14 (get_local $1) ) ) (func $assembly/buddy/bucket_for_request (; 5 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - ;;@ assembly/buddy.ts:266:2 + ;;@ assembly/buddy.ts:274:2 (set_local $1 - ;;@ assembly/buddy.ts:266:15 + ;;@ assembly/buddy.ts:274:15 (i32.sub (i32.const 28) - ;;@ assembly/buddy.ts:266:30 + ;;@ assembly/buddy.ts:274:30 (i32.const 1) ) ) - ;;@ assembly/buddy.ts:267:2 + ;;@ assembly/buddy.ts:275:2 (set_local $2 - ;;@ assembly/buddy.ts:267:13 + ;;@ assembly/buddy.ts:275:13 (i32.const 16) ) - ;;@ assembly/buddy.ts:269:2 + ;;@ assembly/buddy.ts:277:2 (block $break|0 (loop $continue|0 (if - ;;@ assembly/buddy.ts:269:9 + ;;@ assembly/buddy.ts:277:9 (i32.lt_u (get_local $2) - ;;@ assembly/buddy.ts:269:16 + ;;@ assembly/buddy.ts:277:16 (get_local $0) ) (block (block - ;;@ assembly/buddy.ts:270:4 + ;;@ assembly/buddy.ts:278:4 (set_local $1 (i32.sub (get_local $1) (i32.const 1) ) ) - ;;@ assembly/buddy.ts:271:4 + ;;@ assembly/buddy.ts:279:4 (set_local $2 (i32.mul (get_local $2) - ;;@ assembly/buddy.ts:271:12 + ;;@ assembly/buddy.ts:279:12 (i32.const 2) ) ) @@ -232,47 +262,47 @@ ) ) ) - ;;@ assembly/buddy.ts:274:9 + ;;@ assembly/buddy.ts:282:9 (return (get_local $1) ) ) (func $assembly/buddy/node_for_ptr (; 6 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - ;;@ assembly/buddy.ts:241:75 + ;;@ assembly/buddy.ts:247:75 (return - ;;@ assembly/buddy.ts:241:9 + ;;@ assembly/buddy.ts:247:9 (i32.sub (i32.add (i32.shr_u - ;;@ assembly/buddy.ts:241:10 + ;;@ assembly/buddy.ts:247:10 (i32.sub - ;;@ assembly/buddy.ts:241:11 + ;;@ assembly/buddy.ts:247:11 (get_local $0) - ;;@ assembly/buddy.ts:241:17 + ;;@ assembly/buddy.ts:247:17 (get_global $assembly/buddy/base_ptr) ) - ;;@ assembly/buddy.ts:241:30 + ;;@ assembly/buddy.ts:247:30 (i32.sub - ;;@ assembly/buddy.ts:241:31 + ;;@ assembly/buddy.ts:247:31 (i32.const 31) - ;;@ assembly/buddy.ts:241:48 + ;;@ assembly/buddy.ts:247:48 (get_local $1) ) ) - ;;@ assembly/buddy.ts:241:59 + ;;@ assembly/buddy.ts:247:59 (i32.shl - ;;@ assembly/buddy.ts:241:60 + ;;@ assembly/buddy.ts:247:60 (i32.const 1) - ;;@ assembly/buddy.ts:241:65 + ;;@ assembly/buddy.ts:247:65 (get_local $1) ) ) - ;;@ assembly/buddy.ts:241:75 + ;;@ assembly/buddy.ts:247:75 (i32.const 1) ) ) ) - (func $assembly/buddy/node_is_split (; 7 ;) (type $ii) (param $0 i32) (result i32) + (func $assembly/buddy/node_is_split$get (; 7 ;) (type $ii) (param $0 i32) (result i32) ;;@ assembly/buddy.ts:142:2 (if (i32.eqz @@ -293,57 +323,57 @@ (unreachable) ) ) - ;;@ assembly/buddy.ts:143:37 + ;;@ assembly/buddy.ts:143:45 (return ;;@ assembly/buddy.ts:143:9 (i32.load8_u ;;@ assembly/buddy.ts:143:18 (i32.add - (get_global $assembly/buddy/SPLIT_START) - ;;@ assembly/buddy.ts:143:32 + (get_global $assembly/buddy/NODE_IS_SPLIT_START) + ;;@ assembly/buddy.ts:143:40 (get_local $0) ) ) ) ) (func $assembly/buddy/parent_is_split (; 8 ;) (type $ii) (param $0 i32) (result i32) - ;;@ assembly/buddy.ts:248:2 + ;;@ assembly/buddy.ts:254:2 (set_local $0 - ;;@ assembly/buddy.ts:248:10 + ;;@ assembly/buddy.ts:254:10 (i32.div_u (i32.sub - ;;@ assembly/buddy.ts:248:11 + ;;@ assembly/buddy.ts:254:11 (get_local $0) - ;;@ assembly/buddy.ts:248:19 + ;;@ assembly/buddy.ts:254:19 (i32.const 1) ) - ;;@ assembly/buddy.ts:248:24 + ;;@ assembly/buddy.ts:254:24 (i32.const 2) ) ) - ;;@ assembly/buddy.ts:249:58 + ;;@ assembly/buddy.ts:255:63 (return - ;;@ assembly/buddy.ts:249:9 + ;;@ assembly/buddy.ts:255:9 (i32.and - (i32.shr_s - ;;@ assembly/buddy.ts:249:10 - (call $assembly/buddy/node_is_split - ;;@ assembly/buddy.ts:249:24 + (i32.shr_u + ;;@ assembly/buddy.ts:255:10 + (call $assembly/buddy/node_is_split$get + ;;@ assembly/buddy.ts:255:28 (i32.div_u (get_local $0) - ;;@ assembly/buddy.ts:249:32 + ;;@ assembly/buddy.ts:255:36 (i32.const 8) ) ) - ;;@ assembly/buddy.ts:249:38 + ;;@ assembly/buddy.ts:255:43 (i32.rem_u - ;;@ assembly/buddy.ts:249:44 + ;;@ assembly/buddy.ts:255:49 (get_local $0) - ;;@ assembly/buddy.ts:249:52 + ;;@ assembly/buddy.ts:255:57 (i32.const 8) ) ) - ;;@ assembly/buddy.ts:249:58 + ;;@ assembly/buddy.ts:255:63 (i32.const 1) ) ) @@ -351,69 +381,69 @@ (func $assembly/buddy/list_remove (; 9 ;) (type $iv) (param $0 i32) (local $1 i32) (local $2 i32) - ;;@ assembly/buddy.ts:209:2 + ;;@ assembly/buddy.ts:215:2 (set_local $1 - ;;@ assembly/buddy.ts:209:13 + ;;@ assembly/buddy.ts:215:13 (i32.load (get_local $0) ) ) - ;;@ assembly/buddy.ts:210:2 + ;;@ assembly/buddy.ts:216:2 (set_local $2 - ;;@ assembly/buddy.ts:210:13 + ;;@ assembly/buddy.ts:216:13 (i32.load offset=4 (get_local $0) ) ) - ;;@ assembly/buddy.ts:211:2 + ;;@ assembly/buddy.ts:217:2 (i32.store offset=4 (get_local $1) - ;;@ assembly/buddy.ts:211:14 + ;;@ assembly/buddy.ts:217:14 (get_local $2) ) - ;;@ assembly/buddy.ts:212:2 + ;;@ assembly/buddy.ts:218:2 (i32.store (get_local $2) - ;;@ assembly/buddy.ts:212:14 + ;;@ assembly/buddy.ts:218:14 (get_local $1) ) ) (func $assembly/buddy/ptr_for_node (; 10 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) - ;;@ assembly/buddy.ts:232:77 + ;;@ assembly/buddy.ts:238:77 (return - ;;@ assembly/buddy.ts:232:9 + ;;@ assembly/buddy.ts:238:9 (i32.add (get_global $assembly/buddy/base_ptr) - ;;@ assembly/buddy.ts:232:20 + ;;@ assembly/buddy.ts:238:20 (i32.shl - ;;@ assembly/buddy.ts:232:21 + ;;@ assembly/buddy.ts:238:21 (i32.add - ;;@ assembly/buddy.ts:232:22 + ;;@ assembly/buddy.ts:238:22 (i32.sub (get_local $0) - ;;@ assembly/buddy.ts:232:30 + ;;@ assembly/buddy.ts:238:30 (i32.shl - ;;@ assembly/buddy.ts:232:31 + ;;@ assembly/buddy.ts:238:31 (i32.const 1) - ;;@ assembly/buddy.ts:232:36 + ;;@ assembly/buddy.ts:238:36 (get_local $1) ) ) - ;;@ assembly/buddy.ts:232:46 + ;;@ assembly/buddy.ts:238:46 (i32.const 1) ) - ;;@ assembly/buddy.ts:232:52 + ;;@ assembly/buddy.ts:238:52 (i32.sub - ;;@ assembly/buddy.ts:232:53 + ;;@ assembly/buddy.ts:238:53 (i32.const 31) - ;;@ assembly/buddy.ts:232:70 + ;;@ assembly/buddy.ts:238:70 (get_local $1) ) ) ) ) ) - (func $assembly/buddy/node_set_split (; 11 ;) (type $iiv) (param $0 i32) (param $1 i32) + (func $assembly/buddy/node_is_split$set (; 11 ;) (type $iiv) (param $0 i32) (param $1 i32) ;;@ assembly/buddy.ts:147:2 (if (i32.eqz @@ -438,58 +468,58 @@ (i32.store8 ;;@ assembly/buddy.ts:148:12 (i32.add - (get_global $assembly/buddy/SPLIT_START) - ;;@ assembly/buddy.ts:148:26 + (get_global $assembly/buddy/NODE_IS_SPLIT_START) + ;;@ assembly/buddy.ts:148:34 (get_local $0) ) - ;;@ assembly/buddy.ts:148:33 + ;;@ assembly/buddy.ts:148:41 (get_local $1) ) ) (func $assembly/buddy/flip_parent_is_split (; 12 ;) (type $iv) (param $0 i32) (local $1 i32) - ;;@ assembly/buddy.ts:256:2 + ;;@ assembly/buddy.ts:262:2 (set_local $0 - ;;@ assembly/buddy.ts:256:10 + ;;@ assembly/buddy.ts:262:10 (i32.div_u (i32.sub - ;;@ assembly/buddy.ts:256:11 + ;;@ assembly/buddy.ts:262:11 (get_local $0) - ;;@ assembly/buddy.ts:256:19 + ;;@ assembly/buddy.ts:262:19 (i32.const 1) ) - ;;@ assembly/buddy.ts:256:24 + ;;@ assembly/buddy.ts:262:24 (i32.const 2) ) ) - ;;@ assembly/buddy.ts:257:2 + ;;@ assembly/buddy.ts:263:2 (set_local $1 - ;;@ assembly/buddy.ts:257:18 + ;;@ assembly/buddy.ts:263:18 (i32.div_u (get_local $0) - ;;@ assembly/buddy.ts:257:26 + ;;@ assembly/buddy.ts:263:26 (i32.const 8) ) ) - ;;@ assembly/buddy.ts:258:2 - (call $assembly/buddy/node_set_split - ;;@ assembly/buddy.ts:258:17 + ;;@ assembly/buddy.ts:264:2 + (call $assembly/buddy/node_is_split$set + ;;@ assembly/buddy.ts:264:20 (get_local $1) - ;;@ assembly/buddy.ts:258:28 + ;;@ assembly/buddy.ts:265:4 (i32.xor - (call $assembly/buddy/node_is_split - ;;@ assembly/buddy.ts:258:42 + (call $assembly/buddy/node_is_split$get + ;;@ assembly/buddy.ts:265:22 (get_local $1) ) - ;;@ assembly/buddy.ts:258:55 + ;;@ assembly/buddy.ts:265:35 (i32.shl - ;;@ assembly/buddy.ts:258:61 + ;;@ assembly/buddy.ts:265:41 (i32.const 1) - ;;@ assembly/buddy.ts:258:66 + ;;@ assembly/buddy.ts:265:46 (i32.rem_u - ;;@ assembly/buddy.ts:258:67 + ;;@ assembly/buddy.ts:265:47 (get_local $0) - ;;@ assembly/buddy.ts:258:75 + ;;@ assembly/buddy.ts:265:55 (i32.const 8) ) ) @@ -499,56 +529,56 @@ (func $assembly/buddy/lower_bucket_limit (; 13 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - ;;@ assembly/buddy.ts:283:2 + ;;@ assembly/buddy.ts:291:2 (block $break|0 (loop $continue|0 (if - ;;@ assembly/buddy.ts:283:9 + ;;@ assembly/buddy.ts:291:9 (i32.lt_u (get_local $0) - ;;@ assembly/buddy.ts:283:18 + ;;@ assembly/buddy.ts:291:18 (get_global $assembly/buddy/bucket_limit) ) (block (block - ;;@ assembly/buddy.ts:284:4 + ;;@ assembly/buddy.ts:292:4 (set_local $1 - ;;@ assembly/buddy.ts:284:15 + ;;@ assembly/buddy.ts:292:15 (call $assembly/buddy/node_for_ptr - ;;@ assembly/buddy.ts:284:28 + ;;@ assembly/buddy.ts:292:28 (get_global $assembly/buddy/base_ptr) - ;;@ assembly/buddy.ts:284:38 + ;;@ assembly/buddy.ts:292:38 (get_global $assembly/buddy/bucket_limit) ) ) - ;;@ assembly/buddy.ts:285:4 - (nop) ;;@ assembly/buddy.ts:293:4 + (nop) + ;;@ assembly/buddy.ts:301:4 (if - ;;@ assembly/buddy.ts:293:8 + ;;@ assembly/buddy.ts:301:8 (i32.eqz - ;;@ assembly/buddy.ts:293:9 + ;;@ assembly/buddy.ts:301:9 (call $assembly/buddy/parent_is_split - ;;@ assembly/buddy.ts:293:25 + ;;@ assembly/buddy.ts:301:25 (get_local $1) ) ) - ;;@ assembly/buddy.ts:293:32 + ;;@ assembly/buddy.ts:301:32 (block - ;;@ assembly/buddy.ts:294:6 + ;;@ assembly/buddy.ts:302:6 (call $assembly/buddy/list_remove - ;;@ assembly/buddy.ts:294:18 + ;;@ assembly/buddy.ts:302:18 (get_global $assembly/buddy/base_ptr) ) - ;;@ assembly/buddy.ts:295:6 + ;;@ assembly/buddy.ts:303:6 (call $assembly/buddy/list_init - ;;@ assembly/buddy.ts:295:16 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:295:27 + ;;@ assembly/buddy.ts:303:16 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:303:28 (block (result i32) (set_global $assembly/buddy/bucket_limit (i32.sub - ;;@ assembly/buddy.ts:295:29 + ;;@ assembly/buddy.ts:303:30 (get_global $assembly/buddy/bucket_limit) (i32.const 1) ) @@ -557,72 +587,72 @@ ) ) ) - ;;@ assembly/buddy.ts:296:6 + ;;@ assembly/buddy.ts:304:6 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:296:16 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:296:27 + ;;@ assembly/buddy.ts:304:16 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:304:28 (get_global $assembly/buddy/bucket_limit) ) - ;;@ assembly/buddy.ts:296:42 + ;;@ assembly/buddy.ts:304:43 (get_global $assembly/buddy/base_ptr) ) - ;;@ assembly/buddy.ts:297:6 + ;;@ assembly/buddy.ts:305:6 (br $continue|0) ) ) - ;;@ assembly/buddy.ts:308:4 + ;;@ assembly/buddy.ts:316:4 (set_local $2 - ;;@ assembly/buddy.ts:308:18 + ;;@ assembly/buddy.ts:316:18 (call $assembly/buddy/ptr_for_node - ;;@ assembly/buddy.ts:308:31 + ;;@ assembly/buddy.ts:316:31 (i32.add (get_local $1) - ;;@ assembly/buddy.ts:308:38 + ;;@ assembly/buddy.ts:316:38 (i32.const 1) ) - ;;@ assembly/buddy.ts:308:41 + ;;@ assembly/buddy.ts:316:41 (get_global $assembly/buddy/bucket_limit) ) ) - ;;@ assembly/buddy.ts:309:4 + ;;@ assembly/buddy.ts:317:4 (if - ;;@ assembly/buddy.ts:309:8 + ;;@ assembly/buddy.ts:317:8 (i32.eqz - ;;@ assembly/buddy.ts:309:9 + ;;@ assembly/buddy.ts:317:9 (call $assembly/buddy/update_max_ptr - ;;@ assembly/buddy.ts:309:24 + ;;@ assembly/buddy.ts:317:24 (i32.add (get_local $2) - ;;@ assembly/buddy.ts:309:38 + ;;@ assembly/buddy.ts:317:38 (i32.const 8) ) ) ) - ;;@ assembly/buddy.ts:310:13 + ;;@ assembly/buddy.ts:318:13 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:312:4 + ;;@ assembly/buddy.ts:320:4 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:312:14 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:312:25 + ;;@ assembly/buddy.ts:320:14 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:320:26 (get_global $assembly/buddy/bucket_limit) ) - ;;@ assembly/buddy.ts:312:40 + ;;@ assembly/buddy.ts:320:41 (get_local $2) ) - ;;@ assembly/buddy.ts:313:4 + ;;@ assembly/buddy.ts:321:4 (call $assembly/buddy/list_init - ;;@ assembly/buddy.ts:313:14 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:313:25 + ;;@ assembly/buddy.ts:321:14 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:321:26 (block (result i32) (set_global $assembly/buddy/bucket_limit (i32.sub - ;;@ assembly/buddy.ts:313:27 + ;;@ assembly/buddy.ts:321:28 (get_global $assembly/buddy/bucket_limit) (i32.const 1) ) @@ -631,31 +661,31 @@ ) ) ) - ;;@ assembly/buddy.ts:319:4 + ;;@ assembly/buddy.ts:327:4 (set_local $1 - ;;@ assembly/buddy.ts:319:11 + ;;@ assembly/buddy.ts:327:11 (i32.div_u (i32.sub - ;;@ assembly/buddy.ts:319:12 + ;;@ assembly/buddy.ts:327:12 (get_local $1) - ;;@ assembly/buddy.ts:319:19 + ;;@ assembly/buddy.ts:327:19 (i32.const 1) ) - ;;@ assembly/buddy.ts:319:24 + ;;@ assembly/buddy.ts:327:24 (i32.const 2) ) ) - ;;@ assembly/buddy.ts:320:4 + ;;@ assembly/buddy.ts:328:4 (if - ;;@ assembly/buddy.ts:320:8 + ;;@ assembly/buddy.ts:328:8 (i32.ne (get_local $1) - ;;@ assembly/buddy.ts:320:16 + ;;@ assembly/buddy.ts:328:16 (i32.const 0) ) - ;;@ assembly/buddy.ts:321:6 + ;;@ assembly/buddy.ts:329:6 (call $assembly/buddy/flip_parent_is_split - ;;@ assembly/buddy.ts:321:27 + ;;@ assembly/buddy.ts:329:27 (get_local $1) ) ) @@ -665,39 +695,39 @@ ) ) ) - ;;@ assembly/buddy.ts:325:9 + ;;@ assembly/buddy.ts:333:9 (return (i32.const 1) ) ) (func $assembly/buddy/list_pop (; 14 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) - ;;@ assembly/buddy.ts:219:2 + ;;@ assembly/buddy.ts:225:2 (set_local $1 - ;;@ assembly/buddy.ts:219:13 + ;;@ assembly/buddy.ts:225:13 (i32.load (get_local $0) ) ) - ;;@ assembly/buddy.ts:220:2 + ;;@ assembly/buddy.ts:226:2 (if - ;;@ assembly/buddy.ts:220:6 + ;;@ assembly/buddy.ts:226:6 (i32.eq (get_local $1) - ;;@ assembly/buddy.ts:220:14 + ;;@ assembly/buddy.ts:226:14 (get_local $0) ) - ;;@ assembly/buddy.ts:220:27 + ;;@ assembly/buddy.ts:226:27 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:221:2 + ;;@ assembly/buddy.ts:227:2 (call $assembly/buddy/list_remove - ;;@ assembly/buddy.ts:221:14 + ;;@ assembly/buddy.ts:227:14 (get_local $1) ) - ;;@ assembly/buddy.ts:222:9 + ;;@ assembly/buddy.ts:228:9 (return (get_local $1) ) @@ -710,385 +740,406 @@ (local $5 i32) (local $6 i32) (local $7 i32) - ;;@ assembly/buddy.ts:332:2 + ;;@ assembly/buddy.ts:338:2 (nop) - ;;@ assembly/buddy.ts:339:2 + ;;@ assembly/buddy.ts:345:2 (if - ;;@ assembly/buddy.ts:339:6 + ;;@ assembly/buddy.ts:345:6 (i32.gt_u (i32.add (get_local $0) - ;;@ assembly/buddy.ts:339:16 + ;;@ assembly/buddy.ts:345:16 (i32.const 8) ) - ;;@ assembly/buddy.ts:339:30 + ;;@ assembly/buddy.ts:345:30 (i32.const -2147483648) ) - ;;@ assembly/buddy.ts:340:11 + ;;@ assembly/buddy.ts:346:11 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:348:2 + ;;@ assembly/buddy.ts:354:2 (if - ;;@ assembly/buddy.ts:348:6 + ;;@ assembly/buddy.ts:354:6 (i32.eq (get_global $assembly/buddy/base_ptr) - ;;@ assembly/buddy.ts:348:18 + ;;@ assembly/buddy.ts:354:18 (i32.const 0) ) - ;;@ assembly/buddy.ts:348:21 + ;;@ assembly/buddy.ts:354:21 (block - ;;@ assembly/buddy.ts:349:4 + ;;@ assembly/buddy.ts:356:4 (set_global $assembly/buddy/base_ptr - ;;@ assembly/buddy.ts:349:15 - (get_global $assembly/buddy/SPLIT_END) + ;;@ assembly/buddy.ts:356:15 + (i32.and + (i32.add + ;;@ assembly/buddy.ts:356:16 + (get_global $assembly/buddy/NODE_IS_SPLIT_END) + ;;@ assembly/buddy.ts:356:36 + (i32.const 7) + ) + ;;@ assembly/buddy.ts:356:41 + (i32.xor + ;;@ assembly/buddy.ts:356:42 + (i32.const 7) + (i32.const -1) + ) + ) ) - ;;@ assembly/buddy.ts:350:4 + ;;@ assembly/buddy.ts:357:4 (set_global $assembly/buddy/max_ptr - ;;@ assembly/buddy.ts:350:14 + ;;@ assembly/buddy.ts:357:14 (i32.shl (current_memory) - ;;@ assembly/buddy.ts:350:41 + ;;@ assembly/buddy.ts:357:41 (i32.const 16) ) ) - ;;@ assembly/buddy.ts:351:4 + ;;@ assembly/buddy.ts:358:4 (set_global $assembly/buddy/bucket_limit - ;;@ assembly/buddy.ts:351:19 + ;;@ assembly/buddy.ts:358:19 (i32.sub (i32.const 28) - ;;@ assembly/buddy.ts:351:34 + ;;@ assembly/buddy.ts:358:34 (i32.const 1) ) ) - ;;@ assembly/buddy.ts:352:4 - (drop - (call $assembly/buddy/update_max_ptr - ;;@ assembly/buddy.ts:352:19 - (i32.add - (get_global $assembly/buddy/base_ptr) - ;;@ assembly/buddy.ts:352:30 - (i32.const 8) + ;;@ assembly/buddy.ts:359:4 + (if + ;;@ assembly/buddy.ts:359:8 + (i32.eqz + ;;@ assembly/buddy.ts:359:9 + (call $assembly/buddy/update_max_ptr + ;;@ assembly/buddy.ts:359:24 + (i32.add + (get_global $assembly/buddy/base_ptr) + ;;@ assembly/buddy.ts:359:35 + (i32.const 8) + ) ) ) + ;;@ assembly/buddy.ts:360:13 + (return + (i32.const 0) + ) ) - ;;@ assembly/buddy.ts:353:4 + ;;@ assembly/buddy.ts:362:4 (call $assembly/buddy/list_init - ;;@ assembly/buddy.ts:353:14 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:353:25 + ;;@ assembly/buddy.ts:362:14 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:362:26 (i32.sub (i32.const 28) - ;;@ assembly/buddy.ts:353:40 + ;;@ assembly/buddy.ts:362:41 (i32.const 1) ) ) ) - ;;@ assembly/buddy.ts:354:4 + ;;@ assembly/buddy.ts:363:4 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:354:14 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:354:25 + ;;@ assembly/buddy.ts:363:14 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:363:26 (i32.sub (i32.const 28) - ;;@ assembly/buddy.ts:354:40 + ;;@ assembly/buddy.ts:363:41 (i32.const 1) ) ) - ;;@ assembly/buddy.ts:354:44 + ;;@ assembly/buddy.ts:363:45 (get_global $assembly/buddy/base_ptr) ) ) ) - ;;@ assembly/buddy.ts:361:2 + ;;@ assembly/buddy.ts:370:2 (set_local $2 - ;;@ assembly/buddy.ts:361:11 + ;;@ assembly/buddy.ts:370:11 (call $assembly/buddy/bucket_for_request - ;;@ assembly/buddy.ts:361:30 + ;;@ assembly/buddy.ts:370:30 (i32.add (get_local $0) - ;;@ assembly/buddy.ts:361:40 + ;;@ assembly/buddy.ts:370:40 (i32.const 8) ) ) ) - ;;@ assembly/buddy.ts:362:2 + ;;@ assembly/buddy.ts:371:2 (set_local $1 - ;;@ assembly/buddy.ts:362:20 + ;;@ assembly/buddy.ts:371:20 (get_local $2) ) - ;;@ assembly/buddy.ts:369:2 + ;;@ assembly/buddy.ts:378:2 (block $break|0 (loop $continue|0 (if - ;;@ assembly/buddy.ts:369:9 + ;;@ assembly/buddy.ts:378:9 (i32.ne (i32.add (get_local $2) - ;;@ assembly/buddy.ts:369:18 + ;;@ assembly/buddy.ts:378:18 (i32.const 1) ) - ;;@ assembly/buddy.ts:369:23 + ;;@ assembly/buddy.ts:378:23 (i32.const 0) ) (block (block - ;;@ assembly/buddy.ts:370:4 + ;;@ assembly/buddy.ts:379:4 (nop) - ;;@ assembly/buddy.ts:371:4 + ;;@ assembly/buddy.ts:380:4 (nop) - ;;@ assembly/buddy.ts:377:4 - (if - ;;@ assembly/buddy.ts:377:8 - (i32.eqz - ;;@ assembly/buddy.ts:377:9 - (call $assembly/buddy/lower_bucket_limit - ;;@ assembly/buddy.ts:377:28 - (get_local $2) - ) - ) - ;;@ assembly/buddy.ts:378:13 - (return - (i32.const 0) - ) - ) - ;;@ assembly/buddy.ts:385:4 - (set_local $6 - ;;@ assembly/buddy.ts:385:10 - (call $assembly/buddy/list_pop - ;;@ assembly/buddy.ts:385:37 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:385:48 - (get_local $2) - ) - ) - ) ;;@ assembly/buddy.ts:386:4 (if ;;@ assembly/buddy.ts:386:8 (i32.eqz ;;@ assembly/buddy.ts:386:9 + (call $assembly/buddy/lower_bucket_limit + ;;@ assembly/buddy.ts:386:28 + (get_local $2) + ) + ) + ;;@ assembly/buddy.ts:387:13 + (return + (i32.const 0) + ) + ) + ;;@ assembly/buddy.ts:394:4 + (set_local $6 + ;;@ assembly/buddy.ts:394:10 + (call $assembly/buddy/list_pop + ;;@ assembly/buddy.ts:394:37 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:394:49 + (get_local $2) + ) + ) + ) + ;;@ assembly/buddy.ts:395:4 + (if + ;;@ assembly/buddy.ts:395:8 + (i32.eqz + ;;@ assembly/buddy.ts:395:9 (get_local $6) ) - ;;@ assembly/buddy.ts:386:14 + ;;@ assembly/buddy.ts:395:14 (block - ;;@ assembly/buddy.ts:391:6 + ;;@ assembly/buddy.ts:400:6 (if - ;;@ assembly/buddy.ts:391:10 + ;;@ assembly/buddy.ts:400:10 (i32.and (if (result i32) (i32.ne (tee_local $7 (i32.ne (get_local $2) - ;;@ assembly/buddy.ts:391:20 + ;;@ assembly/buddy.ts:400:20 (get_global $assembly/buddy/bucket_limit) ) ) (i32.const 0) ) (get_local $7) - ;;@ assembly/buddy.ts:391:36 + ;;@ assembly/buddy.ts:400:36 (i32.eq (get_local $2) - ;;@ assembly/buddy.ts:391:46 + ;;@ assembly/buddy.ts:400:46 (i32.const 0) ) ) (i32.const 1) ) - ;;@ assembly/buddy.ts:391:49 + ;;@ assembly/buddy.ts:400:49 (block - ;;@ assembly/buddy.ts:392:8 + ;;@ assembly/buddy.ts:401:8 (set_local $2 (i32.sub (get_local $2) (i32.const 1) ) ) - ;;@ assembly/buddy.ts:393:8 + ;;@ assembly/buddy.ts:402:8 (br $continue|0) ) ) - ;;@ assembly/buddy.ts:403:6 + ;;@ assembly/buddy.ts:412:6 (if - ;;@ assembly/buddy.ts:403:10 + ;;@ assembly/buddy.ts:412:10 (i32.eqz - ;;@ assembly/buddy.ts:403:11 + ;;@ assembly/buddy.ts:412:11 (call $assembly/buddy/lower_bucket_limit - ;;@ assembly/buddy.ts:403:30 + ;;@ assembly/buddy.ts:412:30 (i32.sub (get_local $2) - ;;@ assembly/buddy.ts:403:39 + ;;@ assembly/buddy.ts:412:39 (i32.const 1) ) ) ) - ;;@ assembly/buddy.ts:404:15 + ;;@ assembly/buddy.ts:413:15 (return (i32.const 0) ) ) - ;;@ assembly/buddy.ts:406:6 + ;;@ assembly/buddy.ts:415:6 (set_local $6 - ;;@ assembly/buddy.ts:406:12 + ;;@ assembly/buddy.ts:415:12 (call $assembly/buddy/list_pop - ;;@ assembly/buddy.ts:406:39 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:406:50 + ;;@ assembly/buddy.ts:415:39 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:415:51 (get_local $2) ) ) ) ) ) - ;;@ assembly/buddy.ts:413:4 + ;;@ assembly/buddy.ts:422:4 (set_local $3 - ;;@ assembly/buddy.ts:413:11 + ;;@ assembly/buddy.ts:422:11 (i32.shl (i32.const 1) - ;;@ assembly/buddy.ts:413:16 + ;;@ assembly/buddy.ts:422:16 (i32.sub - ;;@ assembly/buddy.ts:413:17 + ;;@ assembly/buddy.ts:422:17 (i32.const 31) - ;;@ assembly/buddy.ts:413:34 + ;;@ assembly/buddy.ts:422:34 (get_local $2) ) ) ) - ;;@ assembly/buddy.ts:414:4 + ;;@ assembly/buddy.ts:423:4 (set_local $4 - ;;@ assembly/buddy.ts:414:19 + ;;@ assembly/buddy.ts:423:19 (if (result i32) (i32.lt_u (get_local $2) - ;;@ assembly/buddy.ts:414:28 + ;;@ assembly/buddy.ts:423:28 (get_local $1) ) - ;;@ assembly/buddy.ts:414:46 + ;;@ assembly/buddy.ts:423:46 (i32.add (i32.div_u (get_local $3) - ;;@ assembly/buddy.ts:414:53 + ;;@ assembly/buddy.ts:423:53 (i32.const 2) ) - ;;@ assembly/buddy.ts:414:57 + ;;@ assembly/buddy.ts:423:57 (i32.const 8) ) - ;;@ assembly/buddy.ts:414:69 + ;;@ assembly/buddy.ts:423:69 (get_local $3) ) ) - ;;@ assembly/buddy.ts:415:4 + ;;@ assembly/buddy.ts:424:4 (if - ;;@ assembly/buddy.ts:415:8 + ;;@ assembly/buddy.ts:424:8 (i32.eqz - ;;@ assembly/buddy.ts:415:9 + ;;@ assembly/buddy.ts:424:9 (call $assembly/buddy/update_max_ptr - ;;@ assembly/buddy.ts:415:24 + ;;@ assembly/buddy.ts:424:24 (i32.add (get_local $6) - ;;@ assembly/buddy.ts:415:30 + ;;@ assembly/buddy.ts:424:30 (get_local $4) ) ) ) - ;;@ assembly/buddy.ts:415:45 + ;;@ assembly/buddy.ts:424:45 (block - ;;@ assembly/buddy.ts:416:6 + ;;@ assembly/buddy.ts:425:6 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:416:16 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:416:27 + ;;@ assembly/buddy.ts:425:16 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:425:28 (get_local $2) ) - ;;@ assembly/buddy.ts:416:36 + ;;@ assembly/buddy.ts:425:37 (get_local $6) ) - ;;@ assembly/buddy.ts:417:13 + ;;@ assembly/buddy.ts:426:13 (return (i32.const 0) ) ) ) - ;;@ assembly/buddy.ts:431:4 + ;;@ assembly/buddy.ts:440:4 (set_local $5 - ;;@ assembly/buddy.ts:431:8 + ;;@ assembly/buddy.ts:440:8 (call $assembly/buddy/node_for_ptr - ;;@ assembly/buddy.ts:431:21 + ;;@ assembly/buddy.ts:440:21 (get_local $6) - ;;@ assembly/buddy.ts:431:26 + ;;@ assembly/buddy.ts:440:26 (get_local $2) ) ) - ;;@ assembly/buddy.ts:432:4 + ;;@ assembly/buddy.ts:441:4 (if - ;;@ assembly/buddy.ts:432:8 + ;;@ assembly/buddy.ts:441:8 (i32.ne (get_local $5) - ;;@ assembly/buddy.ts:432:13 + ;;@ assembly/buddy.ts:441:13 (i32.const 0) ) - ;;@ assembly/buddy.ts:433:6 + ;;@ assembly/buddy.ts:442:6 (call $assembly/buddy/flip_parent_is_split - ;;@ assembly/buddy.ts:433:27 + ;;@ assembly/buddy.ts:442:27 (get_local $5) ) ) - ;;@ assembly/buddy.ts:443:4 + ;;@ assembly/buddy.ts:452:4 (block $break|1 (loop $continue|1 (if - ;;@ assembly/buddy.ts:443:11 + ;;@ assembly/buddy.ts:452:11 (i32.lt_u (get_local $2) - ;;@ assembly/buddy.ts:443:20 + ;;@ assembly/buddy.ts:452:20 (get_local $1) ) (block (block - ;;@ assembly/buddy.ts:444:6 + ;;@ assembly/buddy.ts:453:6 (set_local $5 - ;;@ assembly/buddy.ts:444:10 + ;;@ assembly/buddy.ts:453:10 (i32.add (i32.mul (get_local $5) - ;;@ assembly/buddy.ts:444:14 + ;;@ assembly/buddy.ts:453:14 (i32.const 2) ) - ;;@ assembly/buddy.ts:444:18 + ;;@ assembly/buddy.ts:453:18 (i32.const 1) ) ) - ;;@ assembly/buddy.ts:445:6 + ;;@ assembly/buddy.ts:454:6 (set_local $2 (i32.add (get_local $2) (i32.const 1) ) ) - ;;@ assembly/buddy.ts:446:6 + ;;@ assembly/buddy.ts:455:6 (call $assembly/buddy/flip_parent_is_split - ;;@ assembly/buddy.ts:446:27 + ;;@ assembly/buddy.ts:455:27 (get_local $5) ) - ;;@ assembly/buddy.ts:447:6 + ;;@ assembly/buddy.ts:456:6 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:447:16 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:447:27 + ;;@ assembly/buddy.ts:457:8 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:457:20 (get_local $2) ) - ;;@ assembly/buddy.ts:447:36 + ;;@ assembly/buddy.ts:458:8 (call $assembly/buddy/ptr_for_node - ;;@ assembly/buddy.ts:447:66 + ;;@ assembly/buddy.ts:458:38 (i32.add (get_local $5) - ;;@ assembly/buddy.ts:447:70 + ;;@ assembly/buddy.ts:458:42 (i32.const 1) ) - ;;@ assembly/buddy.ts:447:73 + ;;@ assembly/buddy.ts:458:45 (get_local $2) ) ) @@ -1098,19 +1149,19 @@ ) ) ) - ;;@ assembly/buddy.ts:454:4 + ;;@ assembly/buddy.ts:466:4 (i32.store - ;;@ assembly/buddy.ts:454:17 + ;;@ assembly/buddy.ts:466:17 (get_local $6) - ;;@ assembly/buddy.ts:454:22 + ;;@ assembly/buddy.ts:466:22 (get_local $0) ) - ;;@ assembly/buddy.ts:455:17 + ;;@ assembly/buddy.ts:467:17 (return - ;;@ assembly/buddy.ts:455:11 + ;;@ assembly/buddy.ts:467:11 (i32.add (get_local $6) - ;;@ assembly/buddy.ts:455:17 + ;;@ assembly/buddy.ts:467:17 (i32.const 8) ) ) @@ -1120,7 +1171,7 @@ ) ) ) - ;;@ assembly/buddy.ts:458:9 + ;;@ assembly/buddy.ts:470:9 (return (i32.const 0) ) @@ -1129,132 +1180,132 @@ (local $1 i32) (local $2 i32) (local $3 i32) - ;;@ assembly/buddy.ts:463:2 + ;;@ assembly/buddy.ts:475:2 (nop) - ;;@ assembly/buddy.ts:468:2 + ;;@ assembly/buddy.ts:480:2 (if - ;;@ assembly/buddy.ts:468:6 + ;;@ assembly/buddy.ts:480:6 (i32.eqz - ;;@ assembly/buddy.ts:468:7 + ;;@ assembly/buddy.ts:480:7 (get_local $0) ) - ;;@ assembly/buddy.ts:469:4 + ;;@ assembly/buddy.ts:481:4 (return) ) - ;;@ assembly/buddy.ts:477:2 + ;;@ assembly/buddy.ts:489:2 (set_local $0 - ;;@ assembly/buddy.ts:477:8 + ;;@ assembly/buddy.ts:489:8 (i32.sub (get_local $0) - ;;@ assembly/buddy.ts:477:14 + ;;@ assembly/buddy.ts:489:14 (i32.const 8) ) ) - ;;@ assembly/buddy.ts:478:2 + ;;@ assembly/buddy.ts:490:2 (set_local $1 - ;;@ assembly/buddy.ts:478:11 + ;;@ assembly/buddy.ts:490:11 (call $assembly/buddy/bucket_for_request - ;;@ assembly/buddy.ts:478:30 + ;;@ assembly/buddy.ts:490:30 (i32.add (i32.load - ;;@ assembly/buddy.ts:478:42 + ;;@ assembly/buddy.ts:490:42 (get_local $0) ) - ;;@ assembly/buddy.ts:478:49 + ;;@ assembly/buddy.ts:490:49 (i32.const 8) ) ) ) - ;;@ assembly/buddy.ts:479:2 + ;;@ assembly/buddy.ts:491:2 (set_local $2 - ;;@ assembly/buddy.ts:479:6 + ;;@ assembly/buddy.ts:491:6 (call $assembly/buddy/node_for_ptr - ;;@ assembly/buddy.ts:479:19 + ;;@ assembly/buddy.ts:491:19 (get_local $0) - ;;@ assembly/buddy.ts:479:24 + ;;@ assembly/buddy.ts:491:24 (get_local $1) ) ) - ;;@ assembly/buddy.ts:485:2 + ;;@ assembly/buddy.ts:497:2 (block $break|0 (loop $continue|0 (if - ;;@ assembly/buddy.ts:485:9 + ;;@ assembly/buddy.ts:497:9 (i32.ne (get_local $2) - ;;@ assembly/buddy.ts:485:14 + ;;@ assembly/buddy.ts:497:14 (i32.const 0) ) (block (block - ;;@ assembly/buddy.ts:492:4 + ;;@ assembly/buddy.ts:504:4 (call $assembly/buddy/flip_parent_is_split - ;;@ assembly/buddy.ts:492:25 + ;;@ assembly/buddy.ts:504:25 (get_local $2) ) - ;;@ assembly/buddy.ts:502:4 + ;;@ assembly/buddy.ts:514:4 (if - ;;@ assembly/buddy.ts:502:8 + ;;@ assembly/buddy.ts:514:8 (if (result i32) (i32.ne (tee_local $3 (call $assembly/buddy/parent_is_split - ;;@ assembly/buddy.ts:502:24 + ;;@ assembly/buddy.ts:514:24 (get_local $2) ) ) (i32.const 0) ) (get_local $3) - ;;@ assembly/buddy.ts:502:30 + ;;@ assembly/buddy.ts:514:30 (i32.eq (get_local $1) - ;;@ assembly/buddy.ts:502:40 + ;;@ assembly/buddy.ts:514:40 (get_global $assembly/buddy/bucket_limit) ) ) - ;;@ assembly/buddy.ts:503:6 + ;;@ assembly/buddy.ts:515:6 (br $break|0) ) - ;;@ assembly/buddy.ts:513:4 + ;;@ assembly/buddy.ts:525:4 (call $assembly/buddy/list_remove - ;;@ assembly/buddy.ts:513:16 + ;;@ assembly/buddy.ts:525:16 (call $assembly/buddy/ptr_for_node - ;;@ assembly/buddy.ts:513:46 + ;;@ assembly/buddy.ts:525:46 (i32.add (i32.xor - ;;@ assembly/buddy.ts:513:47 + ;;@ assembly/buddy.ts:525:47 (i32.sub - ;;@ assembly/buddy.ts:513:48 + ;;@ assembly/buddy.ts:525:48 (get_local $2) - ;;@ assembly/buddy.ts:513:52 + ;;@ assembly/buddy.ts:525:52 (i32.const 1) ) - ;;@ assembly/buddy.ts:513:57 + ;;@ assembly/buddy.ts:525:57 (i32.const 1) ) - ;;@ assembly/buddy.ts:513:62 + ;;@ assembly/buddy.ts:525:62 (i32.const 1) ) - ;;@ assembly/buddy.ts:513:65 + ;;@ assembly/buddy.ts:525:65 (get_local $1) ) ) - ;;@ assembly/buddy.ts:514:4 + ;;@ assembly/buddy.ts:526:4 (set_local $2 - ;;@ assembly/buddy.ts:514:8 + ;;@ assembly/buddy.ts:526:8 (i32.div_u (i32.sub - ;;@ assembly/buddy.ts:514:9 + ;;@ assembly/buddy.ts:526:9 (get_local $2) - ;;@ assembly/buddy.ts:514:13 + ;;@ assembly/buddy.ts:526:13 (i32.const 1) ) - ;;@ assembly/buddy.ts:514:18 + ;;@ assembly/buddy.ts:526:18 (i32.const 2) ) ) - ;;@ assembly/buddy.ts:515:4 + ;;@ assembly/buddy.ts:527:4 (set_local $1 (i32.sub (get_local $1) @@ -1267,18 +1318,18 @@ ) ) ) - ;;@ assembly/buddy.ts:524:2 + ;;@ assembly/buddy.ts:536:2 (call $assembly/buddy/list_push - ;;@ assembly/buddy.ts:524:12 - (call $assembly/buddy/get_bucket - ;;@ assembly/buddy.ts:524:23 + ;;@ assembly/buddy.ts:536:12 + (call $assembly/buddy/buckets$get + ;;@ assembly/buddy.ts:536:24 (get_local $1) ) - ;;@ assembly/buddy.ts:524:32 + ;;@ assembly/buddy.ts:536:33 (call $assembly/buddy/ptr_for_node - ;;@ assembly/buddy.ts:524:62 + ;;@ assembly/buddy.ts:536:63 (get_local $2) - ;;@ assembly/buddy.ts:524:65 + ;;@ assembly/buddy.ts:536:66 (get_local $1) ) ) @@ -1804,34 +1855,34 @@ ) ) (func $start (; 18 ;) (type $v) - (set_global $assembly/buddy/BUCKET_START - ;;@ assembly/buddy.ts:92:26 + (set_global $assembly/buddy/BUCKETS_START + ;;@ assembly/buddy.ts:92:27 (get_global $HEAP_BASE) ) - (set_global $assembly/buddy/BUCKET_END - ;;@ assembly/buddy.ts:93:24 + (set_global $assembly/buddy/BUCKETS_END + ;;@ assembly/buddy.ts:93:25 (i32.add - (get_global $assembly/buddy/BUCKET_START) - ;;@ assembly/buddy.ts:93:39 + (get_global $assembly/buddy/BUCKETS_START) + ;;@ assembly/buddy.ts:93:41 (i32.mul (i32.const 28) - ;;@ assembly/buddy.ts:93:54 + ;;@ assembly/buddy.ts:93:56 (i32.const 8) ) ) ) - (set_global $assembly/buddy/SPLIT_START - ;;@ assembly/buddy.ts:138:25 - (get_global $assembly/buddy/BUCKET_END) + (set_global $assembly/buddy/NODE_IS_SPLIT_START + ;;@ assembly/buddy.ts:138:33 + (get_global $assembly/buddy/BUCKETS_END) ) - (set_global $assembly/buddy/SPLIT_END - ;;@ assembly/buddy.ts:139:23 + (set_global $assembly/buddy/NODE_IS_SPLIT_END + ;;@ assembly/buddy.ts:139:31 (i32.add - (get_global $assembly/buddy/SPLIT_START) - ;;@ assembly/buddy.ts:139:37 + (get_global $assembly/buddy/NODE_IS_SPLIT_START) + ;;@ assembly/buddy.ts:139:53 (i32.mul (i32.const 16777216) - ;;@ assembly/buddy.ts:139:51 + ;;@ assembly/buddy.ts:139:67 (i32.const 1) ) ) diff --git a/tests/allocators/buddy/index.js b/tests/allocators/buddy/index.js index 615822e6..925076d0 100644 --- a/tests/allocators/buddy/index.js +++ b/tests/allocators/buddy/index.js @@ -19,7 +19,7 @@ function test(file) { return String.fromCharCode.apply(String, str); } - require("../runner")(exports, 20, 20000); + require("../runner")(exports, 50, 20000); console.log("mem final: " + exports.memory.buffer.byteLength); console.log(); diff --git a/tests/allocators/buddy/package.json b/tests/allocators/buddy/package.json index e459396e..136c5f7a 100644 --- a/tests/allocators/buddy/package.json +++ b/tests/allocators/buddy/package.json @@ -4,6 +4,7 @@ "build": "npm run build:untouched && npm run build:optimized", "build:untouched": "asc assembly/index.ts -t buddy.untouched.wat -b buddy.untouched.wasm --validate --sourceMap --measure", "build:optimized": "asc assembly/index.ts -t buddy.optimized.wat -b buddy.optimized.wasm --validate --sourceMap --measure --noDebug --noAssert --optimize", - "test": "node ./index" + "test": "node ./index", + "test:forever": "node ../forever buddy" } } diff --git a/tests/allocators/tlsf/forever.js b/tests/allocators/forever.js similarity index 62% rename from tests/allocators/tlsf/forever.js rename to tests/allocators/forever.js index 5cc16a25..63dd16e1 100644 --- a/tests/allocators/tlsf/forever.js +++ b/tests/allocators/forever.js @@ -5,7 +5,10 @@ var child_process = require("child_process"); var count = 0; while (true) { console.log("[ #" + ++count + " ]\n"); - var res = child_process.spawnSync("node", [ __dirname ], { stdio: "inherit" }); + var script = process.argv.length > 2 + ? __dirname + "/" + process.argv[2] + : __dirname; + var res = child_process.spawnSync("node", [ script ], { stdio: "inherit" }); if (res.status !== 0) throw Error("exited with " + res.status); if (res.error) diff --git a/tests/allocators/runner.js b/tests/allocators/runner.js index 6d7704eb..6272366c 100644 --- a/tests/allocators/runner.js +++ b/tests/allocators/runner.js @@ -35,7 +35,8 @@ function runner(allocator, runs, allocs) { var base = allocator.allocate_memory(64); console.log("base: " + base); allocator.free_memory(base); - console.log("mem initial: " + allocator.memory.buffer.byteLength); + var currentMem = allocator.memory.buffer.byteLength; + console.log("mem initial: " + currentMem); try { for (var j = 0; j < runs; ++j) { @@ -64,6 +65,10 @@ function runner(allocator, runs, allocs) { if (ptr !== base) throw Error("expected " + base + " but got " + ptr); allocator.free_memory(ptr); + if (allocator.memory.buffer.byteLength > currentMem) { + currentMem = allocator.memory.buffer.byteLength; + console.log("mem changed: " + currentMem); + } } } finally { // mem(allocator.memory, 0, 0x10000); diff --git a/tests/allocators/tlsf/index.js b/tests/allocators/tlsf/index.js index 7aadce9f..86e880c3 100644 --- a/tests/allocators/tlsf/index.js +++ b/tests/allocators/tlsf/index.js @@ -19,7 +19,7 @@ function test(file) { return String.fromCharCode.apply(String, str); } - require("../runner")(exports, 20, 20000); // picked so I/O isn't the bottleneck + require("../runner")(exports, 50, 20000); // picked so I/O isn't the bottleneck console.log("mem final: " + exports.memory.buffer.byteLength); console.log(); } diff --git a/tests/allocators/tlsf/package.json b/tests/allocators/tlsf/package.json index 451078ac..243b68d3 100644 --- a/tests/allocators/tlsf/package.json +++ b/tests/allocators/tlsf/package.json @@ -5,6 +5,6 @@ "build:untouched": "asc assembly/index.ts -t tlsf.untouched.wat -b tlsf.untouched.wasm --validate --sourceMap --measure", "build:optimized": "asc assembly/index.ts -t tlsf.optimized.wat -b tlsf.optimized.wasm --validate --sourceMap --measure --noDebug --noAssert --optimize", "test": "node ./index", - "test:forever": "node ./forever" + "test:forever": "node ../forever tlsf" } } diff --git a/tests/binaryen/asmjs.wat b/tests/binaryen/asmjs.wat index d2f2efe0..89fdedb9 100644 --- a/tests/binaryen/asmjs.wat +++ b/tests/binaryen/asmjs.wat @@ -2,16 +2,22 @@ (type $i (func (param i32) (result i32))) (memory $0 0) (export "test/switch/case/eval" (func $test/switch/case/eval)) + (export "const" (func $test/switch/case/eval)) (import "env" "switch" (func $switch (param i32 i32 i32 i32))) - (global $HEAP_BASE i32 (i32.const 4)) + (global $INT i32 (i32.const 4)) (global $FLT i32 (f32.const -4.0)) (global $DBL i32 (f64.const -4.0)) (func $test/switch/case/eval (; 0 ;) (type $i) (param $0 i32) (result i32) (if (result i32) - (i32.eqz - (get_global $HEAP_BASE) + (i32.eq + (get_global $INT) + (i32.load + (i32.const 0) + ) + ) + (i32.ctz + (i32.const 0) ) - (i32.const 0) (get_local $0) ) )