diff --git a/package-lock.json b/package-lock.json index f070369bca..447c605a94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "license": "Apache-2.0", "dependencies": { - "binaryen": "110.0.0-nightly.20221006", + "binaryen": "110.0.0-nightly.20221018", "long": "^5.2.0" }, "bin": { @@ -398,9 +398,9 @@ "dev": true }, "node_modules/binaryen": { - "version": "110.0.0-nightly.20221006", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-110.0.0-nightly.20221006.tgz", - "integrity": "sha512-yC7ZLoaZmXhm5cB0+g3rZkz5ujPSlhX+FEQtgaQHVxcL78D8cTXdRSdajhgQD345BVPsooOrSxqhX6tnULgBWg==", + "version": "110.0.0-nightly.20221018", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-110.0.0-nightly.20221018.tgz", + "integrity": "sha512-8DxokPnpo+1bQNXJDB5clZjKd56P1+hsnH9oTfVhptVZr/vkgsRititl2eXNZ1wZ4kKwDJ8uKGdCTurMnJ52EQ==", "bin": { "wasm-opt": "bin/wasm-opt", "wasm2js": "bin/wasm2js" @@ -2117,9 +2117,9 @@ "dev": true }, "binaryen": { - "version": "110.0.0-nightly.20221006", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-110.0.0-nightly.20221006.tgz", - "integrity": "sha512-yC7ZLoaZmXhm5cB0+g3rZkz5ujPSlhX+FEQtgaQHVxcL78D8cTXdRSdajhgQD345BVPsooOrSxqhX6tnULgBWg==" + "version": "110.0.0-nightly.20221018", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-110.0.0-nightly.20221018.tgz", + "integrity": "sha512-8DxokPnpo+1bQNXJDB5clZjKd56P1+hsnH9oTfVhptVZr/vkgsRititl2eXNZ1wZ4kKwDJ8uKGdCTurMnJ52EQ==" }, "brace-expansion": { "version": "1.1.11", diff --git a/package.json b/package.json index a79ee60ef9..0e0bdedf7c 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ }, "engineStrict": true, "dependencies": { - "binaryen": "110.0.0-nightly.20221006", + "binaryen": "110.0.0-nightly.20221018", "long": "^5.2.0" }, "devDependencies": { diff --git a/src/glue/binaryen.d.ts b/src/glue/binaryen.d.ts index efaa030d5e..eb9a6189f5 100644 --- a/src/glue/binaryen.d.ts +++ b/src/glue/binaryen.d.ts @@ -61,6 +61,10 @@ export declare function _BinaryenTypeStringviewWTF8(): TypeRef; export declare function _BinaryenTypeStringviewWTF16(): TypeRef; export declare function _BinaryenTypeStringviewIter(): TypeRef; +export declare function _BinaryenTypeNullref(): TypeRef; +export declare function _BinaryenTypeNullExternref(): TypeRef; +export declare function _BinaryenTypeNullFuncref(): TypeRef; + export declare function _BinaryenHeapTypeFunc(): HeapTypeRef; export declare function _BinaryenHeapTypeExt(): HeapTypeRef; export declare function _BinaryenHeapTypeAny(): HeapTypeRef; @@ -594,7 +598,7 @@ export declare function _BinaryenStructSetSetValue(expr: ExpressionRef, valueExp export declare function _BinaryenArrayNew(module: ModuleRef, type: HeapTypeRef, size: ExpressionRef, init: ExpressionRef): ExpressionRef; export declare function _BinaryenArrayNewGetInit(expr: ExpressionRef): ExpressionRef; export declare function _BinaryenArrayNewSetInit(expr: ExpressionRef, initExpr: ExpressionRef): void; -export declare function _BinaryenArrayNewGetSize(expr: ExpressionRef): ExpressionRef; +export declare function _BinaryenArrayNewGetSize(expr: ExpressionRef): ExpressionRef; export declare function _BinaryenArrayNewSetSize(expr: ExpressionRef, sizeExpr: ExpressionRef): void; export declare function _BinaryenArrayInit(module: ModuleRef, type: HeapTypeRef, values: ArrayRef, numValues: Index): ExpressionRef; @@ -605,7 +609,7 @@ export declare function _BinaryenArrayInitAppendValue(expr: ExpressionRef, value export declare function _BinaryenArrayInitInsertValueAt(expr: ExpressionRef, index: Index, valueExpr: ExpressionRef): void; export declare function _BinaryenArrayInitRemoveValueAt(expr: ExpressionRef, index: Index): ExpressionRef; -export declare function _BinaryenArrayGet(module: ModuleRef, ref: ExpressionRef, index: ExpressionRef, signed: bool): ExpressionRef; +export declare function _BinaryenArrayGet(module: ModuleRef, ref: ExpressionRef, index: ExpressionRef, type: TypeRef, signed: bool): ExpressionRef; export declare function _BinaryenArrayGetGetRef(expr: ExpressionRef): ExpressionRef; export declare function _BinaryenArrayGetSetRef(expr: ExpressionRef, refExpr: ExpressionRef): void; export declare function _BinaryenArrayGetGetIndex(expr: ExpressionRef): ExpressionRef; diff --git a/src/glue/binaryen.js b/src/glue/binaryen.js index 89261592a9..7d801e6c84 100644 --- a/src/glue/binaryen.js +++ b/src/glue/binaryen.js @@ -35,6 +35,10 @@ export const { _BinaryenHeapTypeStringviewWTF16, _BinaryenHeapTypeStringviewIter, + _BinaryenTypeNullref, + _BinaryenTypeNullExternref, + _BinaryenTypeNullFuncref, + _BinaryenModuleCreate, _BinaryenModuleDispose, diff --git a/tests/compiler/class-overloading.release.wat b/tests/compiler/class-overloading.release.wat index 695f25a5b2..189b97b751 100644 --- a/tests/compiler/class-overloading.release.wat +++ b/tests/compiler/class-overloading.release.wat @@ -2726,7 +2726,7 @@ global.get $class-overloading/b2 local.tee $0 i32.store $0 - block $__inlined_func$class-overloading/A2#foo@virtual (result i32) + block $__inlined_func$class-overloading/A2#foo@virtual local.get $0 i32.const 8 i32.sub @@ -2816,7 +2816,6 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 3 br $__inlined_func$class-overloading/A2#foo@virtual end i32.const 1744 @@ -2826,16 +2825,6 @@ call $~lib/builtins/abort unreachable end - i32.const 3 - i32.ne - if - i32.const 0 - i32.const 1552 - i32.const 209 - i32.const 1 - call $~lib/builtins/abort - unreachable - end global.get $~lib/memory/__stack_pointer i32.const 8 i32.add diff --git a/tests/compiler/features/gc.debug.wat b/tests/compiler/features/gc.debug.wat index 00ca2b1702..4f8384fcd9 100644 --- a/tests/compiler/features/gc.debug.wat +++ b/tests/compiler/features/gc.debug.wat @@ -2,7 +2,6 @@ (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (global $features/gc/a anyref (ref.null any)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16444)) (global $~lib/memory/__heap_base i32 (i32.const 16444)) @@ -11,7 +10,6 @@ (data (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00g\00c\00.\00t\00s\00") (table $0 1 1 funcref) (elem $0 (i32.const 1)) - (export "a" (global $features/gc/a)) (export "memory" (memory $0)) (export "_start" (func $~start)) (func $features/gc/test_i31 diff --git a/tests/compiler/features/gc.release.wat b/tests/compiler/features/gc.release.wat index 1bc02d535f..c8b639951c 100644 --- a/tests/compiler/features/gc.release.wat +++ b/tests/compiler/features/gc.release.wat @@ -1,10 +1,8 @@ (module (type $none_=>_none (func)) - (global $features/gc/a anyref (ref.null any)) (memory $0 1) (data (i32.const 1036) ",") (data (i32.const 1048) "\01\00\00\00\1c\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00g\00c\00.\00t\00s") - (export "a" (global $features/gc/a)) (export "memory" (memory $0)) (export "_start" (func $~start)) (func $~start diff --git a/tests/compiler/features/gc.ts b/tests/compiler/features/gc.ts index 4346bd1ba0..d0b6568deb 100644 --- a/tests/compiler/features/gc.ts +++ b/tests/compiler/features/gc.ts @@ -9,6 +9,6 @@ test_i31(); // constant globals -export const a: anyref = null; +// export const a: anyref = null; // export const b: i31ref = null; // TODO: not yet nullable in Binaryen // export const c: dataref = null; // TODO: not yet nullable in Binaryen diff --git a/tests/compiler/features/reference-types.debug.wat b/tests/compiler/features/reference-types.debug.wat index bc99143f78..f779262355 100644 --- a/tests/compiler/features/reference-types.debug.wat +++ b/tests/compiler/features/reference-types.debug.wat @@ -1,369 +1,9 @@ (module - (type $none_=>_none (func)) - (type $none_=>_externref (func (result externref))) - (type $externref_=>_externref (func (param externref) (result externref))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (import "reference-types" "somethingReal" (func $features/reference-types/somethingReal (result externref))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "reference-types" "somethingNull" (func $features/reference-types/somethingNull (result externref))) - (import "reference-types" "external" (func $features/reference-types/external (param externref) (result externref))) - (global $features/reference-types/funcGlobal (mut funcref) (ref.null func)) - (global $features/reference-types/funcGlobalInit (mut funcref) (ref.null func)) - (global $features/reference-types/anyGlobal (mut externref) (ref.null extern)) - (global $features/reference-types/anyGlobalInit (mut externref) (ref.null extern)) - (global $features/reference-types/otherFuncGlobal (mut funcref) (ref.func $features/reference-types/someFunc)) - (global $features/reference-types/a externref (ref.null extern)) - (global $features/reference-types/b funcref (ref.null func)) - (global $features/reference-types/nonNullFunc (mut funcref) (ref.null func)) - (global $features/reference-types/nonNullReal (mut externref) (ref.null extern)) - (global $~lib/memory/__data_end i32 (i32.const 156)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16540)) - (global $~lib/memory/__heap_base i32 (i32.const 16540)) - (memory $0 1) - (data (i32.const 12) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00r\00e\00f\00e\00r\00e\00n\00c\00e\00-\00t\00y\00p\00e\00s\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 92) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00u\00n\00e\00x\00p\00e\00c\00t\00e\00d\00 \00n\00u\00l\00l\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (global $~lib/memory/__data_end i32 (i32.const 8)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16392)) + (global $~lib/memory/__heap_base i32 (i32.const 16392)) + (memory $0 0) (table $0 1 1 funcref) (elem $0 (i32.const 1)) - (elem declare func $features/reference-types/someFunc) - (export "external" (func $features/reference-types/external)) - (export "somethingReal" (func $features/reference-types/somethingReal)) - (export "somethingNull" (func $features/reference-types/somethingNull)) - (export "internal" (func $features/reference-types/internal)) - (export "a" (global $features/reference-types/a)) - (export "b" (global $features/reference-types/b)) - (export "nonNullFunc" (global $features/reference-types/nonNullFunc)) - (export "nonNullReal" (global $features/reference-types/nonNullReal)) (export "memory" (memory $0)) - (start $~start) - (func $features/reference-types/testLocal - (local $local funcref) - (local $localInit funcref) - local.get $local - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 70 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - ref.null func - local.set $local - local.get $local - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 72 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - ref.null func - local.set $localInit - local.get $localInit - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 74 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - ) - (func $features/reference-types/testLocal - (local $local externref) - (local $localInit externref) - local.get $local - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 70 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - ref.null extern - local.set $local - local.get $local - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 72 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - ref.null extern - local.set $localInit - local.get $localInit - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 74 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - ) - (func $features/reference-types/someFunc - nop - ) - (func $start:features/reference-types - (local $var$0 funcref) - (local $var$1 externref) - call $features/reference-types/somethingReal - ref.is_null - i32.eqz - i32.eqz - if - i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 16 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - end - call $features/reference-types/somethingNull - ref.is_null - i32.eqz - i32.eqz - if - nop - else - i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 21 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - end - call $features/reference-types/somethingReal - ref.is_null - i32.eqz - if - nop - else - i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 26 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - end - call $features/reference-types/somethingNull - ref.is_null - i32.eqz - if - i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 29 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - end - global.get $features/reference-types/funcGlobal - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 55 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ref.null func - global.set $features/reference-types/funcGlobal - global.get $features/reference-types/funcGlobal - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 57 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $features/reference-types/funcGlobalInit - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 59 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $features/reference-types/anyGlobal - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 62 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ref.null extern - global.set $features/reference-types/anyGlobal - global.get $features/reference-types/anyGlobal - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 64 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $features/reference-types/anyGlobalInit - ref.is_null - i32.eqz - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 66 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - call $features/reference-types/testLocal - call $features/reference-types/testLocal - ref.func $features/reference-types/someFunc - global.set $features/reference-types/funcGlobal - global.get $features/reference-types/funcGlobal - ref.is_null - if - i32.const 0 - i32.const 32 - i32.const 83 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $features/reference-types/otherFuncGlobal - ref.is_null - if - i32.const 0 - i32.const 32 - i32.const 85 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ref.func $features/reference-types/someFunc - local.set $var$0 - local.get $var$0 - ref.is_null - if - i32.const 0 - i32.const 32 - i32.const 88 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $features/reference-types/otherFuncGlobal - local.tee $var$0 - ref.is_null - if (result funcref) - i32.const 112 - i32.const 32 - i32.const 97 - i32.const 28 - call $~lib/builtins/abort - unreachable - else - local.get $var$0 - end - global.set $features/reference-types/nonNullFunc - call $features/reference-types/somethingReal - local.tee $var$1 - ref.is_null - if (result externref) - i32.const 112 - i32.const 32 - i32.const 98 - i32.const 28 - call $~lib/builtins/abort - unreachable - else - local.get $var$1 - end - global.set $features/reference-types/nonNullReal - ) - (func $features/reference-types/internal (param $a externref) (result externref) - (local $var$1 externref) - (local $var$2 externref) - (local $d externref) - local.get $a - call $features/reference-types/external - local.set $var$1 - local.get $var$1 - call $features/reference-types/external - local.set $var$2 - local.get $var$2 - call $features/reference-types/external - local.set $d - local.get $d - ) - (func $~start - call $start:features/reference-types - ) ) diff --git a/tests/compiler/features/reference-types.release.wat b/tests/compiler/features/reference-types.release.wat index df21dbb357..23da3862e2 100644 --- a/tests/compiler/features/reference-types.release.wat +++ b/tests/compiler/features/reference-types.release.wat @@ -1,115 +1,4 @@ (module - (type $none_=>_externref (func (result externref))) - (type $none_=>_none (func)) - (type $externref_=>_externref (func (param externref) (result externref))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (import "reference-types" "somethingReal" (func $features/reference-types/somethingReal (result externref))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "reference-types" "somethingNull" (func $features/reference-types/somethingNull (result externref))) - (import "reference-types" "external" (func $features/reference-types/external (param externref) (result externref))) - (global $features/reference-types/funcGlobal (mut funcref) (ref.null func)) - (global $features/reference-types/a externref (ref.null extern)) - (global $features/reference-types/b funcref (ref.null func)) - (global $features/reference-types/nonNullFunc (mut funcref) (ref.null func)) - (global $features/reference-types/nonNullReal (mut externref) (ref.null extern)) - (memory $0 1) - (data (i32.const 1036) "L") - (data (i32.const 1048) "\01\00\00\006\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00r\00e\00f\00e\00r\00e\00n\00c\00e\00-\00t\00y\00p\00e\00s\00.\00t\00s") - (data (i32.const 1116) "<") - (data (i32.const 1128) "\01\00\00\00\1e\00\00\00u\00n\00e\00x\00p\00e\00c\00t\00e\00d\00 \00n\00u\00l\00l") - (elem declare func $features/reference-types/someFunc) - (export "external" (func $features/reference-types/external)) - (export "somethingReal" (func $features/reference-types/somethingReal)) - (export "somethingNull" (func $features/reference-types/somethingNull)) - (export "internal" (func $features/reference-types/internal)) - (export "a" (global $features/reference-types/a)) - (export "b" (global $features/reference-types/b)) - (export "nonNullFunc" (global $features/reference-types/nonNullFunc)) - (export "nonNullReal" (global $features/reference-types/nonNullReal)) + (memory $0 0) (export "memory" (memory $0)) - (start $~start) - (func $features/reference-types/someFunc - unreachable - ) - (func $features/reference-types/internal (param $0 externref) (result externref) - local.get $0 - call $features/reference-types/external - call $features/reference-types/external - call $features/reference-types/external - ) - (func $~start - (local $0 externref) - call $features/reference-types/somethingReal - ref.is_null - if - i32.const 0 - i32.const 1056 - i32.const 16 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - call $features/reference-types/somethingNull - ref.is_null - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 21 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - call $features/reference-types/somethingReal - ref.is_null - if - i32.const 0 - i32.const 1056 - i32.const 26 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - call $features/reference-types/somethingNull - ref.is_null - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 29 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $features/reference-types/funcGlobal - ref.is_null - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 55 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ref.null func - global.set $features/reference-types/funcGlobal - ref.func $features/reference-types/someFunc - global.set $features/reference-types/funcGlobal - ref.func $features/reference-types/someFunc - global.set $features/reference-types/nonNullFunc - call $features/reference-types/somethingReal - local.tee $0 - ref.is_null - if - i32.const 1136 - i32.const 1056 - i32.const 98 - i32.const 28 - call $~lib/builtins/abort - unreachable - end - local.get $0 - global.set $features/reference-types/nonNullReal - ) ) diff --git a/tests/compiler/features/reference-types.ts b/tests/compiler/features/reference-types.ts index 0588399629..8a4985ac45 100644 --- a/tests/compiler/features/reference-types.ts +++ b/tests/compiler/features/reference-types.ts @@ -1,5 +1,7 @@ // can use anyref as a parameter or return type +/* + export declare function external(a: externref): externref; export declare function somethingReal(): externref; export declare function somethingNull(): externref; @@ -30,24 +32,24 @@ if (somethingNull()) { } // Explicit null checks (don’t work yet) -/* -if(somethingReal() != null) { - // nop -} else { - assert(false); -} -if(somethingReal() == null) { - assert(false); -} -if(somethingNull() == null) { - // nop -} else { - assert(false); -} -if(somethingNull() != null) { - assert(false); -} -*/ + +// if(somethingReal() != null) { +// // nop +// } else { +// assert(false); +// } +// if(somethingReal() == null) { +// assert(false); +// } +// if(somethingNull() == null) { +// // nop +// } else { +// assert(false); +// } +// if(somethingNull() != null) { +// assert(false); +// } + // can represent and recognize 'null' @@ -96,3 +98,5 @@ export const b: funcref = null; // non-null assertions export const nonNullFunc = otherFuncGlobal!; export const nonNullReal = somethingReal()!; + +*/ diff --git a/tests/compiler/resolve-binary.release.wat b/tests/compiler/resolve-binary.release.wat index dbcb2ebe0e..ecbe701b1d 100644 --- a/tests/compiler/resolve-binary.release.wat +++ b/tests/compiler/resolve-binary.release.wat @@ -1943,31 +1943,32 @@ (func $~lib/util/number/genDigits (param $0 i64) (param $1 i64) (param $2 i32) (param $3 i64) (result i32) (local $4 i32) (local $5 i32) - (local $6 i32) - (local $7 i64) - (local $8 i64) - (local $9 i32) - (local $10 i64) + (local $6 i64) + (local $7 i32) + (local $8 i32) + (local $9 i64) + (local $10 i32) (local $11 i64) + (local $12 i64) local.get $1 local.get $0 i64.sub - local.set $8 + local.set $9 i64.const 1 i32.const 0 local.get $2 i32.sub - local.tee $9 + local.tee $10 i64.extend_i32_s local.tee $0 i64.shl - local.tee $10 + local.tee $11 i64.const 1 i64.sub - local.tee $11 + local.tee $12 local.get $1 i64.and - local.set $7 + local.set $6 local.get $1 local.get $0 i64.shr_u @@ -2018,9 +2019,9 @@ i32.add end end - local.set $2 + local.set $8 loop $while-continue|0 - local.get $2 + local.get $8 i32.const 0 i32.gt_s if @@ -2036,7 +2037,7 @@ block $case2|1 block $case1|1 block $case0|1 - local.get $2 + local.get $8 i32.const 1 i32.sub br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 @@ -2044,7 +2045,7 @@ local.get $5 i32.const 1000000000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 1000000000 i32.rem_u @@ -2054,7 +2055,7 @@ local.get $5 i32.const 100000000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 100000000 i32.rem_u @@ -2064,7 +2065,7 @@ local.get $5 i32.const 10000000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 10000000 i32.rem_u @@ -2074,7 +2075,7 @@ local.get $5 i32.const 1000000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 1000000 i32.rem_u @@ -2084,7 +2085,7 @@ local.get $5 i32.const 100000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 100000 i32.rem_u @@ -2094,7 +2095,7 @@ local.get $5 i32.const 10000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 10000 i32.rem_u @@ -2104,7 +2105,7 @@ local.get $5 i32.const 1000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 1000 i32.rem_u @@ -2114,7 +2115,7 @@ local.get $5 i32.const 100 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 100 i32.rem_u @@ -2124,7 +2125,7 @@ local.get $5 i32.const 10 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 10 i32.rem_u @@ -2132,60 +2133,61 @@ br $break|1 end local.get $5 - local.set $6 + local.set $2 i32.const 0 local.set $5 br $break|1 end i32.const 0 - local.set $6 + local.set $2 end + local.get $2 local.get $4 - local.get $6 i32.or if local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 i32.const 1 i32.shl i32.const 9728 i32.add - local.get $6 + local.get $2 i32.const 65535 i32.and i32.const 48 i32.add i32.store16 $0 - local.get $4 - i32.const 1 - i32.add - local.set $4 end - local.get $2 + local.get $8 i32.const 1 i32.sub - local.set $2 + local.set $8 local.get $3 local.get $5 i64.extend_i32_u - local.get $9 + local.get $10 i64.extend_i32_s i64.shl - local.get $7 + local.get $6 i64.add local.tee $0 i64.ge_u if global.get $~lib/util/number/_K - local.get $2 + local.get $8 i32.add global.set $~lib/util/number/_K - local.get $2 + local.get $8 i32.const 2 i32.shl i32.const 10656 i32.add i64.load32_u $0 - local.get $9 + local.get $10 i64.extend_i32_s i64.shl local.set $1 @@ -2199,7 +2201,7 @@ local.set $2 loop $while-continue|3 local.get $0 - local.get $8 + local.get $9 i64.lt_u local.get $3 local.get $0 @@ -2211,14 +2213,14 @@ local.get $0 local.get $1 i64.add - local.tee $7 - local.get $8 + local.tee $6 + local.get $9 i64.lt_u - local.get $8 + local.get $9 local.get $0 i64.sub - local.get $7 - local.get $8 + local.get $6 + local.get $9 i64.sub i64.gt_u i32.or @@ -2251,11 +2253,11 @@ i64.const 10 i64.mul local.set $3 - local.get $7 + local.get $6 i64.const 10 i64.mul local.tee $0 - local.get $9 + local.get $10 i64.extend_i32_s i64.shr_u local.tee $1 @@ -2266,11 +2268,11 @@ i64.ne if local.get $4 - local.tee $5 + local.tee $2 i32.const 1 i32.add local.set $4 - local.get $5 + local.get $2 i32.const 1 i32.shl i32.const 9728 @@ -2283,27 +2285,27 @@ i32.add i32.store16 $0 end - local.get $2 + local.get $8 i32.const 1 i32.sub - local.set $2 + local.set $8 local.get $0 - local.get $11 + local.get $12 i64.and - local.tee $7 + local.tee $6 local.get $3 i64.ge_u br_if $while-continue|4 end global.get $~lib/util/number/_K - local.get $2 + local.get $8 i32.add global.set $~lib/util/number/_K - local.get $7 + local.get $6 local.set $0 - local.get $8 + local.get $9 i32.const 0 - local.get $2 + local.get $8 i32.sub i32.const 2 i32.shl @@ -2327,22 +2329,22 @@ local.get $3 local.get $0 i64.sub - local.get $10 + local.get $11 i64.ge_u i32.and if (result i32) - local.get $1 local.get $0 - i64.sub - local.get $0 - local.get $10 + local.get $11 i64.add - local.tee $7 + local.tee $6 local.get $1 + i64.lt_u + local.get $1 + local.get $0 i64.sub - i64.gt_u + local.get $6 local.get $1 - local.get $7 + i64.sub i64.gt_u i32.or else @@ -2354,7 +2356,7 @@ i32.sub local.set $2 local.get $0 - local.get $10 + local.get $11 i64.add local.set $0 br $while-continue|6 diff --git a/tests/compiler/resolve-elementaccess.release.wat b/tests/compiler/resolve-elementaccess.release.wat index 2deb36f4c6..a81db12b35 100644 --- a/tests/compiler/resolve-elementaccess.release.wat +++ b/tests/compiler/resolve-elementaccess.release.wat @@ -1623,16 +1623,17 @@ ) (func $~lib/util/number/genDigits (param $0 i64) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (result i32) (local $5 i32) - (local $6 i32) - (local $7 i64) - (local $8 i64) + (local $6 i64) + (local $7 i32) + (local $8 i32) (local $9 i32) (local $10 i64) (local $11 i64) + (local $12 i64) local.get $1 local.get $0 i64.sub - local.set $8 + local.set $11 i64.const 1 i32.const 0 local.get $2 @@ -1641,66 +1642,66 @@ i64.extend_i32_s local.tee $0 i64.shl - local.tee $10 + local.tee $12 i64.const 1 i64.sub - local.tee $11 + local.tee $10 local.get $1 i64.and - local.set $7 + local.set $6 local.get $1 local.get $0 i64.shr_u i32.wrap_i64 - local.tee $5 + local.tee $2 i32.const 100000 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 100 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 10 i32.ge_u i32.const 1 i32.add else - local.get $5 + local.get $2 i32.const 10000 i32.ge_u i32.const 3 i32.add - local.get $5 + local.get $2 i32.const 1000 i32.ge_u i32.add end else - local.get $5 + local.get $2 i32.const 10000000 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 1000000 i32.ge_u i32.const 6 i32.add else - local.get $5 + local.get $2 i32.const 1000000000 i32.ge_u i32.const 8 i32.add - local.get $5 + local.get $2 i32.const 100000000 i32.ge_u i32.add end end - local.set $2 + local.set $8 loop $while-continue|0 - local.get $2 + local.get $8 i32.const 0 i32.gt_s if @@ -1716,150 +1717,151 @@ block $case2|1 block $case1|1 block $case0|1 - local.get $2 + local.get $8 i32.const 1 i32.sub br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $5 + local.get $2 i32.const 1000000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 1000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 1000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 - local.set $6 - i32.const 0 + local.get $2 local.set $5 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $6 + local.set $5 end local.get $4 - local.get $6 + local.get $5 i32.or if local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 i32.const 1 i32.shl i32.const 1776 i32.add - local.get $6 + local.get $5 i32.const 65535 i32.and i32.const 48 i32.add i32.store16 $0 - local.get $4 - i32.const 1 - i32.add - local.set $4 end - local.get $2 + local.get $8 i32.const 1 i32.sub - local.set $2 + local.set $8 local.get $3 - local.get $5 + local.get $2 i64.extend_i32_u local.get $9 i64.extend_i32_s i64.shl - local.get $7 + local.get $6 i64.add local.tee $0 i64.ge_u if global.get $~lib/util/number/_K - local.get $2 + local.get $8 i32.add global.set $~lib/util/number/_K - local.get $2 + local.get $8 i32.const 2 i32.shl i32.const 2704 @@ -1874,12 +1876,12 @@ i32.shl i32.const 1774 i32.add - local.tee $5 + local.tee $2 i32.load16_u $0 - local.set $2 + local.set $5 loop $while-continue|3 local.get $0 - local.get $8 + local.get $11 i64.lt_u local.get $3 local.get $0 @@ -1888,17 +1890,17 @@ i64.ge_u i32.and if (result i32) - local.get $8 + local.get $11 local.get $0 local.get $1 i64.add - local.tee $7 + local.tee $6 i64.gt_u - local.get $8 + local.get $11 local.get $0 i64.sub - local.get $7 - local.get $8 + local.get $6 + local.get $11 i64.sub i64.gt_u i32.or @@ -1906,10 +1908,10 @@ i32.const 0 end if - local.get $2 + local.get $5 i32.const 1 i32.sub - local.set $2 + local.set $5 local.get $0 local.get $1 i64.add @@ -1917,8 +1919,8 @@ br $while-continue|3 end end - local.get $5 local.get $2 + local.get $5 i32.store16 $0 local.get $4 return @@ -1931,7 +1933,7 @@ i64.const 10 i64.mul local.set $3 - local.get $7 + local.get $6 i64.const 10 i64.mul local.tee $0 @@ -1946,11 +1948,11 @@ i64.ne if local.get $4 - local.tee $5 + local.tee $2 i32.const 1 i32.add local.set $4 - local.get $5 + local.get $2 i32.const 1 i32.shl i32.const 1776 @@ -1963,27 +1965,27 @@ i32.add i32.store16 $0 end - local.get $2 + local.get $8 i32.const 1 i32.sub - local.set $2 + local.set $8 local.get $0 - local.get $11 + local.get $10 i64.and - local.tee $7 + local.tee $6 local.get $3 i64.ge_u br_if $while-continue|4 end global.get $~lib/util/number/_K - local.get $2 + local.get $8 i32.add global.set $~lib/util/number/_K - local.get $7 + local.get $6 local.set $0 - local.get $8 + local.get $11 i32.const 0 - local.get $2 + local.get $8 i32.sub i32.const 2 i32.shl @@ -1997,9 +1999,9 @@ i32.shl i32.const 1774 i32.add - local.tee $5 + local.tee $2 i32.load16_u $0 - local.set $2 + local.set $5 loop $while-continue|6 local.get $0 local.get $1 @@ -2007,41 +2009,41 @@ local.get $3 local.get $0 i64.sub - local.get $10 + local.get $12 i64.ge_u i32.and if (result i32) local.get $1 local.get $0 - i64.sub - local.get $0 - local.get $10 + local.get $12 i64.add - local.tee $7 + local.tee $6 + i64.gt_u local.get $1 + local.get $0 i64.sub - i64.gt_u + local.get $6 local.get $1 - local.get $7 + i64.sub i64.gt_u i32.or else i32.const 0 end if - local.get $2 + local.get $5 i32.const 1 i32.sub - local.set $2 + local.set $5 local.get $0 - local.get $10 + local.get $12 i64.add local.set $0 br $while-continue|6 end end - local.get $5 local.get $2 + local.get $5 i32.store16 $0 local.get $4 ) diff --git a/tests/compiler/resolve-ternary.release.wat b/tests/compiler/resolve-ternary.release.wat index 6cf6af63f8..15ffe87692 100644 --- a/tests/compiler/resolve-ternary.release.wat +++ b/tests/compiler/resolve-ternary.release.wat @@ -1637,8 +1637,8 @@ (func $~lib/util/number/genDigits (param $0 i64) (param $1 i64) (param $2 i32) (param $3 i64) (result i32) (local $4 i32) (local $5 i32) - (local $6 i32) - (local $7 i64) + (local $6 i64) + (local $7 i32) (local $8 i64) (local $9 i32) (local $10 i64) @@ -1661,7 +1661,7 @@ local.tee $11 local.get $1 i64.and - local.set $7 + local.set $6 local.get $1 local.get $0 i64.shr_u @@ -1712,9 +1712,9 @@ i32.add end end - local.set $2 + local.set $7 loop $while-continue|0 - local.get $2 + local.get $7 i32.const 0 i32.gt_s if @@ -1730,7 +1730,7 @@ block $case2|1 block $case1|1 block $case0|1 - local.get $2 + local.get $7 i32.const 1 i32.sub br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 @@ -1738,7 +1738,7 @@ local.get $5 i32.const 1000000000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 1000000000 i32.rem_u @@ -1748,7 +1748,7 @@ local.get $5 i32.const 100000000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 100000000 i32.rem_u @@ -1758,7 +1758,7 @@ local.get $5 i32.const 10000000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 10000000 i32.rem_u @@ -1768,7 +1768,7 @@ local.get $5 i32.const 1000000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 1000000 i32.rem_u @@ -1778,7 +1778,7 @@ local.get $5 i32.const 100000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 100000 i32.rem_u @@ -1788,7 +1788,7 @@ local.get $5 i32.const 10000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 10000 i32.rem_u @@ -1798,7 +1798,7 @@ local.get $5 i32.const 1000 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 1000 i32.rem_u @@ -1808,7 +1808,7 @@ local.get $5 i32.const 100 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 100 i32.rem_u @@ -1818,7 +1818,7 @@ local.get $5 i32.const 10 i32.div_u - local.set $6 + local.set $2 local.get $5 i32.const 10 i32.rem_u @@ -1826,16 +1826,16 @@ br $break|1 end local.get $5 - local.set $6 + local.set $2 i32.const 0 local.set $5 br $break|1 end i32.const 0 - local.set $6 + local.set $2 end + local.get $2 local.get $4 - local.get $6 i32.or if local.get $4 @@ -1843,7 +1843,7 @@ i32.shl i32.const 3472 i32.add - local.get $6 + local.get $2 i32.const 65535 i32.and i32.const 48 @@ -1854,26 +1854,26 @@ i32.add local.set $4 end - local.get $2 + local.get $7 i32.const 1 i32.sub - local.set $2 + local.set $7 local.get $3 local.get $5 i64.extend_i32_u local.get $9 i64.extend_i32_s i64.shl - local.get $7 + local.get $6 i64.add local.tee $0 i64.ge_u if global.get $~lib/util/number/_K - local.get $2 + local.get $7 i32.add global.set $~lib/util/number/_K - local.get $2 + local.get $7 i32.const 2 i32.shl i32.const 4400 @@ -1906,12 +1906,12 @@ local.get $0 local.get $1 i64.add - local.tee $7 + local.tee $6 i64.gt_u local.get $8 local.get $0 i64.sub - local.get $7 + local.get $6 local.get $8 i64.sub i64.gt_u @@ -1945,7 +1945,7 @@ i64.const 10 i64.mul local.set $3 - local.get $7 + local.get $6 i64.const 10 i64.mul local.tee $0 @@ -1960,11 +1960,6 @@ i64.ne if local.get $4 - local.tee $5 - i32.const 1 - i32.add - local.set $4 - local.get $5 i32.const 1 i32.shl i32.const 3472 @@ -1976,28 +1971,32 @@ i32.const 48 i32.add i32.store16 $0 + local.get $4 + i32.const 1 + i32.add + local.set $4 end - local.get $2 + local.get $7 i32.const 1 i32.sub - local.set $2 + local.set $7 local.get $0 local.get $11 i64.and - local.tee $7 + local.tee $6 local.get $3 i64.ge_u br_if $while-continue|4 end global.get $~lib/util/number/_K - local.get $2 + local.get $7 i32.add global.set $~lib/util/number/_K - local.get $7 + local.get $6 local.set $0 local.get $8 i32.const 0 - local.get $2 + local.get $7 i32.sub i32.const 2 i32.shl @@ -2031,12 +2030,12 @@ local.get $0 local.get $10 i64.add - local.tee $7 + local.tee $6 local.get $1 i64.sub i64.gt_u local.get $1 - local.get $7 + local.get $6 i64.gt_u i32.or else diff --git a/tests/compiler/std/string.release.wat b/tests/compiler/std/string.release.wat index f0257c6ccf..2e2f8db744 100644 --- a/tests/compiler/std/string.release.wat +++ b/tests/compiler/std/string.release.wat @@ -5474,16 +5474,17 @@ ) (func $~lib/util/number/genDigits (param $0 i64) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (result i32) (local $5 i32) - (local $6 i32) - (local $7 i64) - (local $8 i64) + (local $6 i64) + (local $7 i32) + (local $8 i32) (local $9 i32) (local $10 i64) (local $11 i64) + (local $12 i64) local.get $1 local.get $0 i64.sub - local.set $8 + local.set $11 i64.const 1 i32.const 0 local.get $2 @@ -5492,66 +5493,66 @@ i64.extend_i32_s local.tee $0 i64.shl - local.tee $10 + local.tee $12 i64.const 1 i64.sub - local.tee $11 + local.tee $10 local.get $1 i64.and - local.set $7 + local.set $6 local.get $1 local.get $0 i64.shr_u i32.wrap_i64 - local.tee $5 + local.tee $2 i32.const 100000 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 100 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 10 i32.ge_u i32.const 1 i32.add else - local.get $5 + local.get $2 i32.const 10000 i32.ge_u i32.const 3 i32.add - local.get $5 + local.get $2 i32.const 1000 i32.ge_u i32.add end else - local.get $5 + local.get $2 i32.const 10000000 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 1000000 i32.ge_u i32.const 6 i32.add else - local.get $5 + local.get $2 i32.const 1000000000 i32.ge_u i32.const 8 i32.add - local.get $5 + local.get $2 i32.const 100000000 i32.ge_u i32.add end end - local.set $2 + local.set $8 loop $while-continue|0 - local.get $2 + local.get $8 i32.const 0 i32.gt_s if @@ -5567,150 +5568,151 @@ block $case2|1 block $case1|1 block $case0|1 - local.get $2 + local.get $8 i32.const 1 i32.sub br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $5 + local.get $2 i32.const 1000000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 1000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 1000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 - local.set $6 - i32.const 0 + local.get $2 local.set $5 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $6 + local.set $5 end local.get $4 - local.get $6 + local.get $5 i32.or if local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 i32.const 1 i32.shl i32.const 23344 i32.add - local.get $6 + local.get $5 i32.const 65535 i32.and i32.const 48 i32.add i32.store16 $0 - local.get $4 - i32.const 1 - i32.add - local.set $4 end - local.get $2 + local.get $8 i32.const 1 i32.sub - local.set $2 + local.set $8 local.get $3 - local.get $5 + local.get $2 i64.extend_i32_u local.get $9 i64.extend_i32_s i64.shl - local.get $7 + local.get $6 i64.add local.tee $0 i64.ge_u if global.get $~lib/util/number/_K - local.get $2 + local.get $8 i32.add global.set $~lib/util/number/_K - local.get $2 + local.get $8 i32.const 2 i32.shl i32.const 24272 @@ -5725,12 +5727,12 @@ i32.shl i32.const 23342 i32.add - local.tee $5 + local.tee $2 i32.load16_u $0 - local.set $2 + local.set $5 loop $while-continue|3 local.get $0 - local.get $8 + local.get $11 i64.lt_u local.get $3 local.get $0 @@ -5739,17 +5741,17 @@ i64.ge_u i32.and if (result i32) - local.get $8 + local.get $11 local.get $0 local.get $1 i64.add - local.tee $7 + local.tee $6 i64.gt_u - local.get $8 + local.get $11 local.get $0 i64.sub - local.get $7 - local.get $8 + local.get $6 + local.get $11 i64.sub i64.gt_u i32.or @@ -5757,10 +5759,10 @@ i32.const 0 end if - local.get $2 + local.get $5 i32.const 1 i32.sub - local.set $2 + local.set $5 local.get $0 local.get $1 i64.add @@ -5768,8 +5770,8 @@ br $while-continue|3 end end - local.get $5 local.get $2 + local.get $5 i32.store16 $0 local.get $4 return @@ -5782,7 +5784,7 @@ i64.const 10 i64.mul local.set $3 - local.get $7 + local.get $6 i64.const 10 i64.mul local.tee $0 @@ -5797,11 +5799,11 @@ i64.ne if local.get $4 - local.tee $5 + local.tee $2 i32.const 1 i32.add local.set $4 - local.get $5 + local.get $2 i32.const 1 i32.shl i32.const 23344 @@ -5814,27 +5816,27 @@ i32.add i32.store16 $0 end - local.get $2 + local.get $8 i32.const 1 i32.sub - local.set $2 + local.set $8 local.get $0 - local.get $11 + local.get $10 i64.and - local.tee $7 + local.tee $6 local.get $3 i64.ge_u br_if $while-continue|4 end global.get $~lib/util/number/_K - local.get $2 + local.get $8 i32.add global.set $~lib/util/number/_K - local.get $7 + local.get $6 local.set $0 - local.get $8 + local.get $11 i32.const 0 - local.get $2 + local.get $8 i32.sub i32.const 2 i32.shl @@ -5848,9 +5850,9 @@ i32.shl i32.const 23342 i32.add - local.tee $5 + local.tee $2 i32.load16_u $0 - local.set $2 + local.set $5 loop $while-continue|6 local.get $0 local.get $1 @@ -5858,41 +5860,41 @@ local.get $3 local.get $0 i64.sub - local.get $10 + local.get $12 i64.ge_u i32.and if (result i32) local.get $1 local.get $0 - i64.sub - local.get $0 - local.get $10 + local.get $12 i64.add - local.tee $7 + local.tee $6 + i64.gt_u local.get $1 + local.get $0 i64.sub - i64.gt_u + local.get $6 local.get $1 - local.get $7 + i64.sub i64.gt_u i32.or else i32.const 0 end if - local.get $2 + local.get $5 i32.const 1 i32.sub - local.set $2 + local.set $5 local.get $0 - local.get $10 + local.get $12 i64.add local.set $0 br $while-continue|6 end end - local.get $5 local.get $2 + local.get $5 i32.store16 $0 local.get $4 ) diff --git a/tests/compiler/templateliteral.release.wat b/tests/compiler/templateliteral.release.wat index d7dec1224a..2247154b36 100644 --- a/tests/compiler/templateliteral.release.wat +++ b/tests/compiler/templateliteral.release.wat @@ -1960,16 +1960,17 @@ ) (func $~lib/util/number/genDigits (param $0 i64) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (result i32) (local $5 i32) - (local $6 i32) - (local $7 i64) - (local $8 i64) + (local $6 i64) + (local $7 i32) + (local $8 i32) (local $9 i32) (local $10 i64) (local $11 i64) + (local $12 i64) local.get $1 local.get $0 i64.sub - local.set $8 + local.set $11 i64.const 1 i32.const 0 local.get $2 @@ -1978,66 +1979,66 @@ i64.extend_i32_s local.tee $0 i64.shl - local.tee $10 + local.tee $12 i64.const 1 i64.sub - local.tee $11 + local.tee $10 local.get $1 i64.and - local.set $7 + local.set $6 local.get $1 local.get $0 i64.shr_u i32.wrap_i64 - local.tee $5 + local.tee $2 i32.const 100000 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 100 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 10 i32.ge_u i32.const 1 i32.add else - local.get $5 + local.get $2 i32.const 10000 i32.ge_u i32.const 3 i32.add - local.get $5 + local.get $2 i32.const 1000 i32.ge_u i32.add end else - local.get $5 + local.get $2 i32.const 10000000 i32.lt_u if (result i32) - local.get $5 + local.get $2 i32.const 1000000 i32.ge_u i32.const 6 i32.add else - local.get $5 + local.get $2 i32.const 1000000000 i32.ge_u i32.const 8 i32.add - local.get $5 + local.get $2 i32.const 100000000 i32.ge_u i32.add end end - local.set $2 + local.set $8 loop $while-continue|0 - local.get $2 + local.get $8 i32.const 0 i32.gt_s if @@ -2053,150 +2054,151 @@ block $case2|1 block $case1|1 block $case0|1 - local.get $2 + local.get $8 i32.const 1 i32.sub br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case0|1 $case10|1 end - local.get $5 + local.get $2 i32.const 1000000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 1000000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 1000 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 1000 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 100 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 100 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 + local.get $2 i32.const 10 i32.div_u - local.set $6 - local.get $5 + local.set $5 + local.get $2 i32.const 10 i32.rem_u - local.set $5 + local.set $2 br $break|1 end - local.get $5 - local.set $6 - i32.const 0 + local.get $2 local.set $5 + i32.const 0 + local.set $2 br $break|1 end i32.const 0 - local.set $6 + local.set $5 end local.get $4 - local.get $6 + local.get $5 i32.or if local.get $4 + local.tee $7 + i32.const 1 + i32.add + local.set $4 + local.get $7 i32.const 1 i32.shl i32.const 3920 i32.add - local.get $6 + local.get $5 i32.const 65535 i32.and i32.const 48 i32.add i32.store16 $0 - local.get $4 - i32.const 1 - i32.add - local.set $4 end - local.get $2 + local.get $8 i32.const 1 i32.sub - local.set $2 + local.set $8 local.get $3 - local.get $5 + local.get $2 i64.extend_i32_u local.get $9 i64.extend_i32_s i64.shl - local.get $7 + local.get $6 i64.add local.tee $0 i64.ge_u if global.get $~lib/util/number/_K - local.get $2 + local.get $8 i32.add global.set $~lib/util/number/_K - local.get $2 + local.get $8 i32.const 2 i32.shl i32.const 4848 @@ -2211,12 +2213,12 @@ i32.shl i32.const 3918 i32.add - local.tee $5 + local.tee $2 i32.load16_u $0 - local.set $2 + local.set $5 loop $while-continue|3 local.get $0 - local.get $8 + local.get $11 i64.lt_u local.get $3 local.get $0 @@ -2225,17 +2227,17 @@ i64.ge_u i32.and if (result i32) - local.get $8 + local.get $11 local.get $0 local.get $1 i64.add - local.tee $7 + local.tee $6 i64.gt_u - local.get $8 + local.get $11 local.get $0 i64.sub - local.get $7 - local.get $8 + local.get $6 + local.get $11 i64.sub i64.gt_u i32.or @@ -2243,10 +2245,10 @@ i32.const 0 end if - local.get $2 + local.get $5 i32.const 1 i32.sub - local.set $2 + local.set $5 local.get $0 local.get $1 i64.add @@ -2254,8 +2256,8 @@ br $while-continue|3 end end - local.get $5 local.get $2 + local.get $5 i32.store16 $0 local.get $4 return @@ -2268,7 +2270,7 @@ i64.const 10 i64.mul local.set $3 - local.get $7 + local.get $6 i64.const 10 i64.mul local.tee $0 @@ -2283,11 +2285,11 @@ i64.ne if local.get $4 - local.tee $5 + local.tee $2 i32.const 1 i32.add local.set $4 - local.get $5 + local.get $2 i32.const 1 i32.shl i32.const 3920 @@ -2300,27 +2302,27 @@ i32.add i32.store16 $0 end - local.get $2 + local.get $8 i32.const 1 i32.sub - local.set $2 + local.set $8 local.get $0 - local.get $11 + local.get $10 i64.and - local.tee $7 + local.tee $6 local.get $3 i64.ge_u br_if $while-continue|4 end global.get $~lib/util/number/_K - local.get $2 + local.get $8 i32.add global.set $~lib/util/number/_K - local.get $7 + local.get $6 local.set $0 - local.get $8 + local.get $11 i32.const 0 - local.get $2 + local.get $8 i32.sub i32.const 2 i32.shl @@ -2334,9 +2336,9 @@ i32.shl i32.const 3918 i32.add - local.tee $5 + local.tee $2 i32.load16_u $0 - local.set $2 + local.set $5 loop $while-continue|6 local.get $0 local.get $1 @@ -2344,41 +2346,41 @@ local.get $3 local.get $0 i64.sub - local.get $10 + local.get $12 i64.ge_u i32.and if (result i32) local.get $1 local.get $0 - i64.sub - local.get $0 - local.get $10 + local.get $12 i64.add - local.tee $7 + local.tee $6 + i64.gt_u local.get $1 + local.get $0 i64.sub - i64.gt_u + local.get $6 local.get $1 - local.get $7 + i64.sub i64.gt_u i32.or else i32.const 0 end if - local.get $2 + local.get $5 i32.const 1 i32.sub - local.set $2 + local.set $5 local.get $0 - local.get $10 + local.get $12 i64.add local.set $0 br $while-continue|6 end end - local.get $5 local.get $2 + local.get $5 i32.store16 $0 local.get $4 )