From 2e455996ce6211869e4128233c1a3df3ab187754 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 29 Jun 2022 13:18:04 +0300 Subject: [PATCH 1/4] wip --- src/builtins.ts | 100 + std/assembly/index.d.ts | 20 + tests/compiler/simd.debug.wat | 4803 --------------------------------- tests/compiler/simd.ts | 10 + 4 files changed, 130 insertions(+), 4803 deletions(-) diff --git a/src/builtins.ts b/src/builtins.ts index 6e8cd28d4e..b90dd3a8b5 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -540,6 +540,8 @@ export namespace BuiltinNames { export const i16x8_extmul_low_i8x16_u = "~lib/builtins/i16x8.extmul_low_i8x16_u"; export const i16x8_extmul_high_i8x16_s = "~lib/builtins/i16x8.extmul_high_i8x16_s"; export const i16x8_extmul_high_i8x16_u = "~lib/builtins/i16x8.extmul_high_i8x16_u"; + export const i16x8_shuffle = "~lib/builtins/i16x8.shuffle"; + export const i16x8_swizzle = "~lib/builtins/i16x8.swizzle"; export const i32x4_splat = "~lib/builtins/i32x4.splat"; export const i32x4_extract_lane = "~lib/builtins/i32x4.extract_lane"; @@ -583,6 +585,8 @@ export namespace BuiltinNames { export const i32x4_extmul_low_i16x8_u = "~lib/builtins/i32x4.extmul_low_i16x8_u"; export const i32x4_extmul_high_i16x8_s = "~lib/builtins/i32x4.extmul_high_i16x8_s"; export const i32x4_extmul_high_i16x8_u = "~lib/builtins/i32x4.extmul_high_i16x8_u"; + export const i32x4_shuffle = "~lib/builtins/i32x4.shuffle"; + export const i32x4_swizzle = "~lib/builtins/i32x4.swizzle"; export const i64x2_splat = "~lib/builtins/i64x2.splat"; export const i64x2_extract_lane = "~lib/builtins/i64x2.extract_lane"; @@ -615,6 +619,8 @@ export namespace BuiltinNames { export const i64x2_extmul_low_i32x4_u = "~lib/builtins/i64x2.extmul_low_i32x4_u"; export const i64x2_extmul_high_i32x4_s = "~lib/builtins/i64x2.extmul_high_i32x4_s"; export const i64x2_extmul_high_i32x4_u = "~lib/builtins/i64x2.extmul_high_i32x4_u"; + export const i64x2_shuffle = "~lib/builtins/i64x2.shuffle"; + export const i64x2_swizzle = "~lib/builtins/i64x2.swizzle"; export const f32x4_splat = "~lib/builtins/f32x4.splat"; export const f32x4_extract_lane = "~lib/builtins/f32x4.extract_lane"; @@ -643,6 +649,8 @@ export namespace BuiltinNames { export const f32x4_convert_i32x4_s = "~lib/builtins/f32x4.convert_i32x4_s"; export const f32x4_convert_i32x4_u = "~lib/builtins/f32x4.convert_i32x4_u"; export const f32x4_demote_f64x2_zero = "~lib/builtins/f32x4.demote_f64x2_zero"; + export const f32x4_shuffle = "~lib/builtins/f32x4.shuffle"; + export const f32x4_swizzle = "~lib/builtins/f32x4.swizzle"; export const f64x2_splat = "~lib/builtins/f64x2.splat"; export const f64x2_extract_lane = "~lib/builtins/f64x2.extract_lane"; @@ -671,6 +679,8 @@ export namespace BuiltinNames { export const f64x2_convert_low_i32x4_s = "~lib/builtins/f64x2.convert_low_i32x4_s"; export const f64x2_convert_low_i32x4_u = "~lib/builtins/f64x2.convert_low_i32x4_u"; export const f64x2_promote_low_f32x4 = "~lib/builtins/f64x2.promote_low_f32x4"; + export const f64x2_shuffle = "~lib/builtins/f64x2.shuffle"; + export const f64x2_swizzle = "~lib/builtins/f64x2.swizzle"; export const i31_new = "~lib/builtins/i31.new"; export const i31_get = "~lib/builtins/i31.get"; @@ -8770,6 +8780,24 @@ function builtin_i16x8_extmul_high_i8x16_u(ctx: BuiltinContext): ExpressionRef { } builtins.set(BuiltinNames.i16x8_extmul_high_i8x16_u, builtin_i16x8_extmul_high_i8x16_u); +// i16x8.shuffle -> v128.shuffle +function builtin_i16x8_shuffle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = [ Type.i16 ]; + ctx.contextualType = Type.v128; + return builtin_v128_shuffle(ctx); +} +builtins.set(BuiltinNames.i16x8_shuffle, builtin_i16x8_shuffle); + +// i16x8.swizzle -> v128.swizzle +function builtin_i16x8_swizzle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = null; + ctx.contextualType = Type.v128; + return builtin_v128_swizzle(ctx); +} +builtins.set(BuiltinNames.i16x8_swizzle, builtin_i16x8_swizzle); + // i32x4.splat -> v128.splat function builtin_i32x4_splat(ctx: BuiltinContext): ExpressionRef { checkTypeAbsent(ctx); @@ -9148,6 +9176,24 @@ function builtin_i32x4_extmul_high_i16x8_u(ctx: BuiltinContext): ExpressionRef { } builtins.set(BuiltinNames.i32x4_extmul_high_i16x8_u, builtin_i32x4_extmul_high_i16x8_u); +// i32x4.shuffle -> v128.shuffle +function builtin_i32x4_shuffle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = [ Type.i32 ]; + ctx.contextualType = Type.v128; + return builtin_v128_shuffle(ctx); +} +builtins.set(BuiltinNames.i32x4_shuffle, builtin_i32x4_shuffle); + +// i32x4.swizzle -> v128.swizzle +function builtin_i32x4_swizzle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = null; + ctx.contextualType = Type.v128; + return builtin_v128_swizzle(ctx); +} +builtins.set(BuiltinNames.i32x4_swizzle, builtin_i32x4_swizzle); + // i64x2.splat -> v128.splat function builtin_i64x2_splat(ctx: BuiltinContext): ExpressionRef { checkTypeAbsent(ctx); @@ -9391,6 +9437,24 @@ function builtin_i64x2_extmul_high_i32x4_u(ctx: BuiltinContext): ExpressionRef { } builtins.set(BuiltinNames.i64x2_extmul_high_i32x4_u, builtin_i64x2_extmul_high_i32x4_u); +// i64x2.shuffle -> v128.shuffle +function builtin_i64x2_shuffle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = [ Type.i64 ]; + ctx.contextualType = Type.v128; + return builtin_v128_shuffle(ctx); +} +builtins.set(BuiltinNames.i64x2_shuffle, builtin_i64x2_shuffle); + +// i64x2.swizzle -> v128.swizzle +function builtin_i64x2_swizzle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = null; + ctx.contextualType = Type.v128; + return builtin_v128_swizzle(ctx); +} +builtins.set(BuiltinNames.i64x2_swizzle, builtin_i64x2_swizzle); + // f32x4.splat -> v128.splat function builtin_f32x4_splat(ctx: BuiltinContext): ExpressionRef { checkTypeAbsent(ctx); @@ -9634,6 +9698,24 @@ function builtin_f32x4_demote_f64x2_zero(ctx: BuiltinContext): ExpressionRef { } builtins.set(BuiltinNames.f32x4_demote_f64x2_zero, builtin_f32x4_demote_f64x2_zero); +// f32x4.shuffle -> v128.shuffle +function builtin_f32x4_shuffle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = [ Type.f32 ]; + ctx.contextualType = Type.v128; + return builtin_v128_shuffle(ctx); +} +builtins.set(BuiltinNames.f32x4_shuffle, builtin_f32x4_shuffle); + +// f32x4.swizzle -> v128.swizzle +function builtin_f32x4_swizzle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = null; + ctx.contextualType = Type.v128; + return builtin_v128_swizzle(ctx); +} +builtins.set(BuiltinNames.f32x4_swizzle, builtin_f32x4_swizzle); + // f64x2.splat -> v128.splat function builtin_f64x2_splat(ctx: BuiltinContext): ExpressionRef { checkTypeAbsent(ctx); @@ -9877,6 +9959,24 @@ function builtin_f64x4_promote_low_f32x4(ctx: BuiltinContext): ExpressionRef { } builtins.set(BuiltinNames.f64x2_promote_low_f32x4, builtin_f64x4_promote_low_f32x4); +// f64x2.shuffle -> v128.shuffle +function builtin_f64x2_shuffle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = [ Type.f64 ]; + ctx.contextualType = Type.v128; + return builtin_v128_shuffle(ctx); +} +builtins.set(BuiltinNames.f64x2_shuffle, builtin_f64x2_shuffle); + +// f64x2.swizzle -> v128.swizzle +function builtin_f64x2_swizzle(ctx: BuiltinContext): ExpressionRef { + checkTypeAbsent(ctx); + ctx.typeArguments = null; + ctx.contextualType = Type.v128; + return builtin_v128_swizzle(ctx); +} +builtins.set(BuiltinNames.f64x2_swizzle, builtin_f64x2_swizzle); + // === Internal helpers ======================================================================= /** Compiles the `visit_globals` function. */ diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 7c741f027d..a787183482 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1073,6 +1073,10 @@ declare namespace i16x8 { export function extmul_high_i8x16_s(a: v128, b: v128): v128; /** Performs the lane-wise 8-bit unsigned integer extended multiplication of the eight higher lanes producing twice wider 16-bit integer results. */ export function extmul_high_i8x16_u(a: v128, b: v128): v128; + /** Selects 16-bit lanes from either vector according to the specified [0-7] respectively [8-15] lane indexes. */ + export function shuffle(a: v128, b: v128, l0: u8, l1: u8, l2: u8, l3: u8, l4: u8, l5: u8, l6: u8, l7: u8): v128; + /** Selects 8-bit lanes from the first vector according to the indexes [0-15] specified by the 8-bit lanes of the second vector. */ + export function swizzle(a: v128, s: v128): v128; } /** Initializes a 128-bit vector from four 32-bit integer values. Arguments must be compile-time constants. */ declare function i32x4(a: i32, b: i32, c: i32, d: i32): v128; @@ -1161,6 +1165,10 @@ declare namespace i32x4 { export function extmul_high_i16x8_s(a: v128, b: v128): v128; /** Performs the lane-wise 16-bit unsigned integer extended multiplication of the four higher lanes producing twice wider 32-bit integer results. */ export function extmul_high_i16x8_u(a: v128, b: v128): v128; + /** Selects 32-bit lanes from either vector according to the specified [0-3] respectively [4-7] lane indexes. */ + export function shuffle(a: v128, b: v128, l0: u8, l1: u8, l2: u8, l3: u8): v128; + /** Selects 8-bit lanes from the first vector according to the indexes [0-15] specified by the 8-bit lanes of the second vector. */ + export function swizzle(a: v128, s: v128): v128; } /** Initializes a 128-bit vector from two 64-bit integer values. Arguments must be compile-time constants. */ declare function i64x2(a: i64, b: i64): v128; @@ -1219,6 +1227,10 @@ declare namespace i64x2 { export function extmul_high_i32x4_s(a: v128, b: v128): v128; /** Performs the lane-wise 32-bit unsigned integer extended multiplication of the two higher lanes producing twice wider 64-bit integer results. */ export function extmul_high_i32x4_u(a: v128, b: v128): v128; + /** Selects 64-bit lanes from either vector according to the specified [0-1] respectively [2-3] lane indexes. */ + export function shuffle(a: v128, b: v128, l0: u8, l1: u8): v128; + /** Selects 8-bit lanes from the first vector according to the indexes [0-15] specified by the 8-bit lanes of the second vector. */ + export function swizzle(a: v128, s: v128): v128; } /** Initializes a 128-bit vector from four 32-bit float values. Arguments must be compile-time constants. */ declare function f32x4(a: f32, b: f32, c: f32, d: f32): v128; @@ -1277,6 +1289,10 @@ declare namespace f32x4 { export function convert_i32x4_u(a: v128): v128; /** Demotes each 64-bit float lane of a vector to single-precision. The higher lanes of the result are initialized to zero. */ export function demote_f64x2_zero(a: v128): v128; + /** Selects 32-bit lanes from either vector according to the specified [0-3] respectively [4-7] lane indexes. */ + export function shuffle(a: v128, b: v128, l0: u8, l1: u8, l2: u8, l3: u8, l4: u8): v128; + /** Selects 8-bit lanes from the first vector according to the indexes [0-15] specified by the 8-bit lanes of the second vector. */ + export function swizzle(a: v128, s: v128): v128; } /** Initializes a 128-bit vector from two 64-bit float values. Arguments must be compile-time constants. */ declare function f64x2(a: f64, b: f64): v128; @@ -1335,6 +1351,10 @@ declare namespace f64x2 { export function convert_low_i32x4_u(a: v128): v128; /** Promotes the low 32-bit float lanes of a vector to double-precision. */ export function promote_low_f32x4(a: v128): v128; + /** Selects 64-bit lanes from either vector according to the specified [0-1] respectively [2-3] lane indexes. */ + export function shuffle(a: v128, b: v128, l0: u8, l1: u8): v128; + /** Selects 8-bit lanes from the first vector according to the indexes [0-15] specified by the 8-bit lanes of the second vector. */ + export function swizzle(a: v128, s: v128): v128; } declare abstract class i31 { diff --git a/tests/compiler/simd.debug.wat b/tests/compiler/simd.debug.wat index 2c62812e5d..e69de29bb2 100644 --- a/tests/compiler/simd.debug.wat +++ b/tests/compiler/simd.debug.wat @@ -1,4803 +0,0 @@ -(module - (type $none_=>_none (func)) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_v128 (func (param i32 i32 i32) (result v128))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_=>_none (func (param i32))) - (type $none_=>_v128 (func (result v128))) - (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_v128 (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) (result v128))) - (type $i32_i32_i32_i32_i32_i32_i32_i32_=>_v128 (func (param i32 i32 i32 i32 i32 i32 i32 i32) (result v128))) - (type $i32_i32_i32_i32_=>_v128 (func (param i32 i32 i32 i32) (result v128))) - (type $i64_=>_v128 (func (param i64) (result v128))) - (type $i64_i64_=>_v128 (func (param i64 i64) (result v128))) - (type $f32_f32_f32_=>_v128 (func (param f32 f32 f32) (result v128))) - (type $f32_f32_f32_f32_=>_v128 (func (param f32 f32 f32 f32) (result v128))) - (type $f64_=>_v128 (func (param f64) (result v128))) - (type $f64_f64_=>_v128 (func (param f64 f64) (result v128))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (global $~lib/native/ASC_FEATURE_SIMD i32 (i32.const 1)) - (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $~lib/builtins/i16.MAX_VALUE i32 (i32.const 32767)) - (global $~lib/builtins/i8.MAX_VALUE i32 (i32.const 127)) - (global $~lib/builtins/u8.MAX_VALUE i32 (i32.const 255)) - (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/builtins/u16.MAX_VALUE i32 (i32.const 65535)) - (global $~lib/memory/__data_end i32 (i32.const 188)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16572)) - (global $~lib/memory/__heap_base i32 (i32.const 16572)) - (memory $0 1) - (data (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") - (data (i32.const 140) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\00s\00i\00m\00d\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (table $0 1 1 funcref) - (elem $0 (i32.const 1)) - (export "test_vars_i8x16_partial" (func $simd/test_vars_i8x16_partial)) - (export "test_vars_i8x16_full" (func $simd/test_vars_i8x16_full)) - (export "test_vars_i16x8_partial" (func $simd/test_vars_i16x8_partial)) - (export "test_vars_i16x8_full" (func $simd/test_vars_i16x8_full)) - (export "test_vars_i32x4_partial" (func $simd/test_vars_i32x4_partial)) - (export "test_vars_i32x4_full" (func $simd/test_vars_i32x4_full)) - (export "test_vars_i64x2_partial" (func $simd/test_vars_i64x2_partial)) - (export "test_vars_i64x2_full" (func $simd/test_vars_i64x2_full)) - (export "test_vars_f32x4_partial" (func $simd/test_vars_f32x4_partial)) - (export "test_vars_f32x4_full" (func $simd/test_vars_f32x4_full)) - (export "test_vars_f64x2_partial" (func $simd/test_vars_f64x2_partial)) - (export "test_vars_f64x2_full" (func $simd/test_vars_f64x2_full)) - (export "memory" (memory $0)) - (start $~start) - (func $~lib/rt/tlsf/Root#set:flMap (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store - ) - (func $~lib/rt/common/BLOCK#set:mmInfo (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store - ) - (func $~lib/rt/tlsf/Block#set:prev (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store offset=4 - ) - (func $~lib/rt/tlsf/Block#set:next (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store offset=8 - ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 - i32.load - local.set $2 - i32.const 1 - drop - local.get $2 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 268 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.set $3 - i32.const 1 - drop - local.get $3 - i32.const 12 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 270 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $3 - i32.const 256 - i32.lt_u - if - i32.const 0 - local.set $4 - local.get $3 - i32.const 4 - i32.shr_u - local.set $5 - else - local.get $3 - local.tee $6 - i32.const 1073741820 - local.tee $7 - local.get $6 - local.get $7 - i32.lt_u - select - local.set $6 - i32.const 31 - local.get $6 - i32.clz - i32.sub - local.set $4 - local.get $6 - local.get $4 - i32.const 4 - i32.sub - i32.shr_u - i32.const 1 - i32.const 4 - i32.shl - i32.xor - local.set $5 - local.get $4 - i32.const 8 - i32.const 1 - i32.sub - i32.sub - local.set $4 - end - i32.const 1 - drop - local.get $4 - i32.const 23 - i32.lt_u - if (result i32) - local.get $5 - i32.const 16 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 284 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.load offset=4 - local.set $8 - local.get $1 - i32.load offset=8 - local.set $9 - local.get $8 - if - local.get $8 - local.get $9 - call $~lib/rt/tlsf/Block#set:next - end - local.get $9 - if - local.get $9 - local.get $8 - call $~lib/rt/tlsf/Block#set:prev - end - local.get $1 - local.get $0 - local.set $10 - local.get $4 - local.set $6 - local.get $5 - local.set $7 - local.get $10 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - i32.eq - if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 - local.set $6 - local.get $9 - local.set $7 - local.get $11 - local.get $10 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $7 - i32.store offset=96 - local.get $9 - i32.eqz - if - local.get $0 - local.set $6 - local.get $4 - local.set $7 - local.get $6 - local.get $7 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.set $6 - local.get $0 - local.set $7 - local.get $4 - local.set $11 - local.get $6 - i32.const 1 - local.get $5 - i32.shl - i32.const -1 - i32.xor - i32.and - local.tee $6 - local.set $10 - local.get $7 - local.get $11 - i32.const 2 - i32.shl - i32.add - local.get $10 - i32.store offset=4 - local.get $6 - i32.eqz - if - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $4 - i32.shl - i32.const -1 - i32.xor - i32.and - call $~lib/rt/tlsf/Root#set:flMap - end - end - end - ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - i32.const 1 - drop - local.get $1 - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 201 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.load - local.set $2 - i32.const 1 - drop - local.get $2 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 203 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.add - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $4 - local.get $4 - i32.load - local.set $5 - local.get $5 - i32.const 1 - i32.and - if - local.get $0 - local.get $4 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $2 - i32.const 4 - i32.add - local.get $5 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.tee $2 - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.add - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $4 - local.get $4 - i32.load - local.set $5 - end - local.get $2 - i32.const 2 - i32.and - if - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - local.set $3 - local.get $3 - i32.load - local.set $6 - i32.const 1 - drop - local.get $6 - i32.const 1 - i32.and - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 221 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $3 - call $~lib/rt/tlsf/removeBlock - local.get $3 - local.set $1 - local.get $1 - local.get $6 - i32.const 4 - i32.add - local.get $2 - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.tee $2 - call $~lib/rt/common/BLOCK#set:mmInfo - end - local.get $4 - local.get $5 - i32.const 2 - i32.or - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $2 - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.set $7 - i32.const 1 - drop - local.get $7 - i32.const 12 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 233 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - drop - local.get $1 - i32.const 4 - i32.add - local.get $7 - i32.add - local.get $4 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 234 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $4 - i32.const 4 - i32.sub - local.get $1 - i32.store - local.get $7 - i32.const 256 - i32.lt_u - if - i32.const 0 - local.set $8 - local.get $7 - i32.const 4 - i32.shr_u - local.set $9 - else - local.get $7 - local.tee $3 - i32.const 1073741820 - local.tee $6 - local.get $3 - local.get $6 - i32.lt_u - select - local.set $3 - i32.const 31 - local.get $3 - i32.clz - i32.sub - local.set $8 - local.get $3 - local.get $8 - i32.const 4 - i32.sub - i32.shr_u - i32.const 1 - i32.const 4 - i32.shl - i32.xor - local.set $9 - local.get $8 - i32.const 8 - i32.const 1 - i32.sub - i32.sub - local.set $8 - end - i32.const 1 - drop - local.get $8 - i32.const 23 - i32.lt_u - if (result i32) - local.get $9 - i32.const 16 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 251 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.set $10 - local.get $8 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - local.set $11 - local.get $1 - i32.const 0 - call $~lib/rt/tlsf/Block#set:prev - local.get $1 - local.get $11 - call $~lib/rt/tlsf/Block#set:next - local.get $11 - if - local.get $11 - local.get $1 - call $~lib/rt/tlsf/Block#set:prev - end - local.get $0 - local.set $12 - local.get $8 - local.set $10 - local.get $9 - local.set $3 - local.get $1 - local.set $6 - local.get $12 - local.get $10 - i32.const 4 - i32.shl - local.get $3 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - local.get $0 - local.get $0 - i32.load - i32.const 1 - local.get $8 - i32.shl - i32.or - call $~lib/rt/tlsf/Root#set:flMap - local.get $0 - local.set $13 - local.get $8 - local.set $12 - local.get $0 - local.set $3 - local.get $8 - local.set $6 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - i32.const 1 - local.get $9 - i32.shl - i32.or - local.set $10 - local.get $13 - local.get $12 - i32.const 2 - i32.shl - i32.add - local.get $10 - i32.store offset=4 - ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - i32.const 1 - drop - local.get $1 - local.get $2 - i32.le_u - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 377 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 4 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - i32.const 4 - i32.sub - local.set $1 - local.get $2 - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $2 - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 - i32.const 0 - local.set $5 - local.get $4 - if - i32.const 1 - drop - local.get $1 - local.get $4 - i32.const 4 - i32.add - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 384 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 16 - i32.sub - local.get $4 - i32.eq - if - local.get $1 - i32.const 16 - i32.sub - local.set $1 - local.get $4 - i32.load - local.set $5 - else - nop - end - else - i32.const 1 - drop - local.get $1 - local.get $0 - i32.const 1572 - i32.add - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 397 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - end - local.get $2 - local.get $1 - i32.sub - local.set $6 - local.get $6 - i32.const 4 - i32.const 12 - i32.add - i32.const 4 - i32.add - i32.lt_u - if - i32.const 0 - return - end - local.get $6 - i32.const 2 - i32.const 4 - i32.mul - i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 - i32.const 1 - i32.or - local.get $5 - i32.const 2 - i32.and - i32.or - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $8 - i32.const 0 - call $~lib/rt/tlsf/Block#set:prev - local.get $8 - i32.const 0 - call $~lib/rt/tlsf/Block#set:next - local.get $1 - i32.const 4 - i32.add - local.get $7 - i32.add - local.set $4 - local.get $4 - i32.const 0 - i32.const 2 - i32.or - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 - i32.store offset=1568 - local.get $0 - local.get $8 - call $~lib/rt/tlsf/insertBlock - i32.const 1 - ) - (func $~lib/rt/tlsf/initialize - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - i32.const 0 - drop - global.get $~lib/memory/__heap_base - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - local.set $0 - memory.size - local.set $1 - local.get $0 - i32.const 1572 - i32.add - i32.const 65535 - i32.add - i32.const 65535 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.shr_u - local.set $2 - local.get $2 - local.get $1 - i32.gt_s - if (result i32) - local.get $2 - local.get $1 - i32.sub - memory.grow - i32.const 0 - i32.lt_s - else - i32.const 0 - end - if - unreachable - end - local.get $0 - local.set $3 - local.get $3 - i32.const 0 - call $~lib/rt/tlsf/Root#set:flMap - local.get $3 - local.set $5 - i32.const 0 - local.set $4 - local.get $5 - local.get $4 - i32.store offset=1568 - i32.const 0 - local.set $5 - loop $for-loop|0 - local.get $5 - i32.const 23 - i32.lt_u - local.set $4 - local.get $4 - if - local.get $3 - local.set $8 - local.get $5 - local.set $7 - i32.const 0 - local.set $6 - local.get $8 - local.get $7 - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=4 - i32.const 0 - local.set $8 - loop $for-loop|1 - local.get $8 - i32.const 16 - i32.lt_u - local.set $7 - local.get $7 - if - local.get $3 - local.set $11 - local.get $5 - local.set $10 - local.get $8 - local.set $9 - i32.const 0 - local.set $6 - local.get $11 - local.get $10 - i32.const 4 - i32.shl - local.get $9 - i32.add - i32.const 2 - i32.shl - i32.add - local.get $6 - i32.store offset=96 - local.get $8 - i32.const 1 - i32.add - local.set $8 - br $for-loop|1 - end - end - local.get $5 - i32.const 1 - i32.add - local.set $5 - br $for-loop|0 - end - end - local.get $0 - i32.const 1572 - i32.add - local.set $12 - i32.const 0 - drop - local.get $3 - local.get $12 - memory.size - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - local.get $3 - global.set $~lib/rt/tlsf/ROOT - ) - (func $~lib/rt/tlsf/computeSize (param $0 i32) (result i32) - local.get $0 - i32.const 12 - i32.le_u - if (result i32) - i32.const 12 - else - local.get $0 - i32.const 4 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - i32.const 4 - i32.sub - end - ) - (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) - local.get $0 - i32.const 1073741820 - i32.gt_u - if - i32.const 96 - i32.const 32 - i32.const 458 - i32.const 29 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/tlsf/computeSize - ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 - i32.const 256 - i32.lt_u - if - i32.const 0 - local.set $2 - local.get $1 - i32.const 4 - i32.shr_u - local.set $3 - else - local.get $1 - i32.const 536870910 - i32.lt_u - if (result i32) - local.get $1 - i32.const 1 - i32.const 27 - local.get $1 - i32.clz - i32.sub - i32.shl - i32.add - i32.const 1 - i32.sub - else - local.get $1 - end - local.set $4 - i32.const 31 - local.get $4 - i32.clz - i32.sub - local.set $2 - local.get $4 - local.get $2 - i32.const 4 - i32.sub - i32.shr_u - i32.const 1 - i32.const 4 - i32.shl - i32.xor - local.set $3 - local.get $2 - i32.const 8 - i32.const 1 - i32.sub - i32.sub - local.set $2 - end - i32.const 1 - drop - local.get $2 - i32.const 23 - i32.lt_u - if (result i32) - local.get $3 - i32.const 16 - i32.lt_u - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 330 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - i32.const 0 - i32.const -1 - i32.xor - local.get $3 - i32.shl - i32.and - local.set $6 - i32.const 0 - local.set $7 - local.get $6 - i32.eqz - if - local.get $0 - i32.load - i32.const 0 - i32.const -1 - i32.xor - local.get $2 - i32.const 1 - i32.add - i32.shl - i32.and - local.set $5 - local.get $5 - i32.eqz - if - i32.const 0 - local.set $7 - else - local.get $5 - i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.set $6 - i32.const 1 - drop - local.get $6 - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 343 - i32.const 18 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $4 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - local.set $7 - end - else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $4 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - local.set $7 - end - local.get $7 - ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - i32.const 0 - drop - local.get $1 - i32.const 536870910 - i32.lt_u - if - local.get $1 - i32.const 1 - i32.const 27 - local.get $1 - i32.clz - i32.sub - i32.shl - i32.const 1 - i32.sub - i32.add - local.set $1 - end - memory.size - local.set $2 - local.get $1 - i32.const 4 - local.get $2 - i32.const 16 - i32.shl - i32.const 4 - i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - i32.ne - i32.shl - i32.add - local.set $1 - local.get $1 - i32.const 65535 - i32.add - i32.const 65535 - i32.const -1 - i32.xor - i32.and - i32.const 16 - i32.shr_u - local.set $4 - local.get $2 - local.tee $3 - local.get $4 - local.tee $5 - local.get $3 - local.get $5 - i32.gt_s - select - local.set $6 - local.get $6 - memory.grow - i32.const 0 - i32.lt_s - if - local.get $4 - memory.grow - i32.const 0 - i32.lt_s - if - unreachable - end - end - memory.size - local.set $7 - local.get $0 - local.get $2 - i32.const 16 - i32.shl - local.get $7 - i32.const 16 - i32.shl - call $~lib/rt/tlsf/addMemory - drop - ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $1 - i32.load - local.set $3 - i32.const 1 - drop - local.get $2 - i32.const 4 - i32.add - i32.const 15 - i32.and - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 357 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $3 - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.sub - local.set $4 - local.get $4 - i32.const 4 - i32.const 12 - i32.add - i32.ge_u - if - local.get $1 - local.get $2 - local.get $3 - i32.const 2 - i32.and - i32.or - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $1 - i32.const 4 - i32.add - local.get $2 - i32.add - local.set $5 - local.get $5 - local.get $4 - i32.const 4 - i32.sub - i32.const 1 - i32.or - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $0 - local.get $5 - call $~lib/rt/tlsf/insertBlock - else - local.get $1 - local.get $3 - i32.const 1 - i32.const -1 - i32.xor - i32.and - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $1 - local.set $5 - local.get $5 - i32.const 4 - i32.add - local.get $5 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.get $1 - local.set $5 - local.get $5 - i32.const 4 - i32.add - local.get $5 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - i32.load - i32.const 2 - i32.const -1 - i32.xor - i32.and - call $~lib/rt/common/BLOCK#set:mmInfo - end - ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - local.get $1 - call $~lib/rt/tlsf/prepareSize - local.set $2 - local.get $0 - local.get $2 - call $~lib/rt/tlsf/searchBlock - local.set $3 - local.get $3 - i32.eqz - if - local.get $0 - local.get $2 - call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $2 - call $~lib/rt/tlsf/searchBlock - local.set $3 - i32.const 1 - drop - local.get $3 - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 496 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - end - i32.const 1 - drop - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - local.get $2 - i32.ge_u - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 498 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $3 - call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $3 - local.get $2 - call $~lib/rt/tlsf/prepareBlock - i32.const 0 - drop - local.get $3 - ) - (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32) - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - call $~lib/rt/tlsf/initialize - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - call $~lib/rt/tlsf/allocateBlock - i32.const 4 - i32.add - ) - (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32) - (local $1 i32) - local.get $0 - i32.const 4 - i32.sub - local.set $1 - local.get $0 - i32.const 0 - i32.ne - if (result i32) - local.get $0 - i32.const 15 - i32.and - i32.eqz - else - i32.const 0 - end - if (result i32) - local.get $1 - i32.load - i32.const 1 - i32.and - i32.eqz - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 559 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 - ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) - i32.const 0 - drop - local.get $1 - local.get $1 - i32.load - i32.const 1 - i32.or - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $0 - local.get $1 - call $~lib/rt/tlsf/insertBlock - ) - (func $~lib/rt/tlsf/__free (param $0 i32) - local.get $0 - global.get $~lib/memory/__heap_base - i32.lt_u - if - return - end - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - call $~lib/rt/tlsf/initialize - end - global.get $~lib/rt/tlsf/ROOT - local.get $0 - call $~lib/rt/tlsf/checkUsedBlock - call $~lib/rt/tlsf/freeBlock - ) - (func $simd/test_v128 - (local $0 i32) - v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 - v128.any_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - v128.const i32x4 0x00000000 0x00000000 0x00000000 0xff000000 - v128.any_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - v128.any_true - i32.const 0 - i32.ne - i32.const 0 - i32.eq - drop - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d - v128.const i32x4 0x04030202 0x08070605 0x0c0b0a09 0x100f0e0d - i8x16.ne - v128.any_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d - v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 - v128.and - v128.const i32x4 0x00010001 0x00010001 0x00010001 0x00010001 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d - v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 - v128.or - v128.const i32x4 0x05030301 0x09070705 0x0d0b0b09 0x110f0f0d - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d - v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 - v128.xor - v128.const i32x4 0x05020300 0x09060704 0x0d0a0b08 0x110e0f0c - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d - v128.not - v128.const i32x4 0xfbfcfdfe 0xf7f8f9fa 0xf3f4f5f6 0xeff0f1f2 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d - v128.const i32x4 0x0d0e0f10 0x090a0b0c 0x05060708 0x01020304 - v128.const i32x4 0xff00ff00 0xff00ff00 0xff00ff00 0xff00ff00 - v128.bitselect - v128.const i32x4 0x040e0210 0x080a060c 0x0c060a08 0x10020e04 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const 64 - call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $0 - local.get $0 - v128.load offset=16 - v128.store offset=32 - local.get $0 - call $~lib/rt/tlsf/__free - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $0 - i32.const 42 - i32.store8 - local.get $0 - v128.load8_splat - v128.const i32x4 0x2a2a2a2a 0x2a2a2a2a 0x2a2a2a2a 0x2a2a2a2a - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 67 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/tlsf/__free - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $0 - i32.const 42 - i32.store16 - local.get $0 - v128.load16_splat - v128.const i32x4 0x002a002a 0x002a002a 0x002a002a 0x002a002a - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 77 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/tlsf/__free - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $0 - i32.const 42 - i32.store - local.get $0 - v128.load32_splat - v128.const i32x4 0x0000002a 0x0000002a 0x0000002a 0x0000002a - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 87 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/tlsf/__free - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $0 - i64.const 42 - i64.store - local.get $0 - v128.load64_splat - v128.const i32x4 0x0000002a 0x00000000 0x0000002a 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 97 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/tlsf/__free - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $0 - i32.const 42 - i32.store - local.get $0 - v128.load32_zero - v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 107 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/tlsf/__free - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $0 - local.get $0 - i64.const 42 - i64.store - local.get $0 - v128.load64_zero - v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 117 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/rt/tlsf/__free - ) - (func $simd/test_i8x16 - (local $0 v128) - (local $1 v128) - (local $2 v128) - (local $3 v128) - (local $4 v128) - (local $5 v128) - (local $6 v128) - (local $7 v128) - (local $8 v128) - (local $9 v128) - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x7f0f0e0d - local.set $0 - local.get $0 - v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x7f0f0e0d - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 139 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - i8x16.splat - local.set $1 - local.get $1 - v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 141 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i8x16.add - local.set $2 - local.get $2 - v128.const i32x4 0x05040302 0x09080706 0x0d0c0b0a 0x80100f0e - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 143 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i8x16.sub - local.get $0 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 144 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 - v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 - i8x16.min_s - v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 - v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 - i8x16.min_u - v128.const i32x4 0x007f0000 0x00000000 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 - v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 - i8x16.max_s - v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 - v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 - i8x16.max_u - v128.const i32x4 0x00807f80 0x00000000 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x04040201 0x08070605 0x0c0b0a09 0xff800e0d - v128.const i32x4 0x04020401 0x08070605 0x0c0b0a09 0xff800e0d - i8x16.avgr_u - v128.const i32x4 0x04030301 0x08070605 0x0c0b0a09 0xff800e0d - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - local.get $0 - i8x16.neg - v128.const i32x4 0xfcfdfeff 0xf8f9fafb 0xf4f5f6f7 0x81f1f2f3 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 185 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i8x16.extract_lane_s 0 - i32.extend8_s - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 190 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i8x16.extract_lane_s 15 - i32.extend8_s - i32.const -128 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 191 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i8x16.extract_lane_u 15 - i32.const 255 - i32.and - i32.const 128 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 192 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 17 - i8x16.replace_lane 15 - v128.const i32x4 0x05040302 0x09080706 0x0d0c0b0a 0x11100f0e - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 193 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 - v128.const i32x4 0x04030201 0x08070605 0x01010101 0x01010101 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 198 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - v128.const i32x4 0x7f7f7f7e 0x7f7f7f7f 0x7f7f7f7f 0x7f7f7f7f - i32.const 2 - i8x16.splat - i8x16.add_sat_s - i32.const 127 - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0xfffffffe 0xffffffff 0xffffffff 0xffffffff - i32.const 2 - i8x16.splat - i8x16.add_sat_u - i32.const -1 - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x80808081 0x80808080 0x80808080 0x80808080 - i32.const 2 - i8x16.splat - i8x16.sub_sat_s - i32.const -128 - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 - i32.const 2 - i8x16.splat - i8x16.sub_sat_u - i32.const 0 - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const 1 - i8x16.splat - i32.const 1 - i8x16.shl - i32.const 2 - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -2 - i8x16.splat - i32.const 1 - i8x16.shr_s - i32.const -1 - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i8x16.splat - i32.const 1 - i8x16.shr_u - i32.const 127 - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 - v128.any_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - i32.const 1 - i8x16.splat - i8x16.all_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - i32.const 0 - i8x16.splat - i32.const 1 - i8x16.replace_lane 0 - local.set $3 - i32.const 0 - i8x16.splat - i32.const -1 - i8x16.replace_lane 0 - local.set $4 - local.get $4 - local.set $5 - local.get $4 - v128.not - local.set $6 - local.get $4 - local.get $3 - i8x16.eq - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 236 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i8x16.ne - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 237 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i8x16.lt_s - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 238 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i8x16.lt_u - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 239 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i8x16.le_s - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 240 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i8x16.le_u - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 241 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i8x16.gt_s - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 242 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i8x16.gt_u - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 243 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i8x16.ge_s - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 244 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i8x16.ge_u - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 245 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/builtins/i16.MAX_VALUE - i16x8.splat - global.get $~lib/builtins/i16.MAX_VALUE - i16x8.splat - i8x16.narrow_i16x8_s - global.get $~lib/builtins/i8.MAX_VALUE - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - global.get $~lib/builtins/i16.MAX_VALUE - i16x8.splat - global.get $~lib/builtins/i16.MAX_VALUE - i16x8.splat - i8x16.narrow_i16x8_u - global.get $~lib/builtins/u8.MAX_VALUE - i8x16.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c - local.set $7 - v128.const i32x4 0x13121110 0x17161514 0x1b1a1918 0x1f1e1d1c - local.set $8 - local.get $7 - local.get $8 - i8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31 - v128.const i32x4 0x13021100 0x17061504 0x1b0a1908 0x1f0e1d0c - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 251 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - v128.const i32x4 0x0c0d0e10 0x08090a0b 0x04050607 0x00010203 - local.set $9 - local.get $7 - local.get $9 - i8x16.swizzle - v128.const i32x4 0x0c0d0e00 0x08090a0b 0x04050607 0x00010203 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 257 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $7 - i8x16.popcnt - v128.const i32x4 0x02010100 0x03020201 0x03020201 0x04030302 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 262 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - ) - (func $simd/test_i16x8 - (local $0 v128) - (local $1 v128) - (local $2 v128) - (local $3 v128) - (local $4 v128) - (local $5 v128) - (local $6 v128) - (local $7 i32) - v128.const i32x4 0x00020001 0x00040003 0x00060005 0x7fff0007 - local.set $0 - local.get $0 - v128.const i32x4 0x00020001 0x00040003 0x00060005 0x7fff0007 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 268 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - i16x8.splat - local.set $1 - local.get $1 - v128.const i32x4 0x00010001 0x00010001 0x00010001 0x00010001 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 270 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i16x8.add - local.set $2 - local.get $2 - v128.const i32x4 0x00030002 0x00050004 0x00070006 0x80000008 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 272 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i16x8.sub - local.get $0 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 273 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i16x8.mul - local.get $2 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 274 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 - v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 - i16x8.min_s - v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 - v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 - i16x8.min_u - v128.const i32x4 0x00000000 0x00007fff 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 - v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 - i16x8.max_s - v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 - v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 - i16x8.max_u - v128.const i32x4 0x7fff8000 0x00008000 0x00000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00020001 0x00040004 0x00060005 0xffff8000 - v128.const i32x4 0x00040001 0x00040002 0x00060005 0xffff8000 - i16x8.avgr_u - v128.const i32x4 0x00030001 0x00040003 0x00060005 0xffff8000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - local.get $0 - i16x8.neg - v128.const i32x4 0xfffeffff 0xfffcfffd 0xfffafffb 0x8001fff9 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 315 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i16x8.extract_lane_s 0 - i32.extend16_s - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 320 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i16x8.extract_lane_s 7 - i32.extend16_s - i32.const -32768 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 321 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i16x8.extract_lane_u 7 - i32.const 65535 - i32.and - i32.const 32768 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 322 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 9 - i16x8.replace_lane 7 - v128.const i32x4 0x00030002 0x00050004 0x00070006 0x00090008 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 323 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 - v128.const i32x4 0x00020001 0x00040003 0x00010001 0x00010001 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 328 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - v128.const i32x4 0x7fff7ffe 0x7fff7fff 0x7fff7fff 0x7fff7fff - i32.const 2 - i16x8.splat - i16x8.add_sat_s - i32.const 32767 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0xfffffffe 0xffffffff 0xffffffff 0xffffffff - i32.const 2 - i16x8.splat - i16x8.add_sat_u - i32.const -1 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x80008001 0x80008000 0x80008000 0x80008000 - i32.const 2 - i16x8.splat - i16x8.sub_sat_s - i32.const -32768 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 - i32.const 2 - i16x8.splat - i16x8.sub_sat_u - i32.const 0 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const 1 - i16x8.splat - i32.const 1 - i16x8.shl - i32.const 2 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -2 - i16x8.splat - i32.const 1 - i16x8.shr_s - i32.const -1 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i16x8.splat - i32.const 1 - i16x8.shr_u - i32.const 32767 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 - v128.any_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - i32.const 1 - i16x8.splat - i16x8.all_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - i32.const 0 - i16x8.splat - i32.const 1 - i16x8.replace_lane 0 - local.set $3 - i32.const 0 - i16x8.splat - i32.const -1 - i16x8.replace_lane 0 - local.set $4 - local.get $4 - local.set $5 - local.get $4 - v128.not - local.set $6 - local.get $4 - local.get $3 - i16x8.eq - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 366 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i16x8.ne - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 367 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i16x8.lt_s - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 368 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i16x8.lt_u - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 369 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i16x8.le_s - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 370 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i16x8.le_u - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 371 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i16x8.gt_s - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 372 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i16x8.gt_u - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 373 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i16x8.ge_s - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 374 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i16x8.ge_u - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 375 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/builtins/i32.MAX_VALUE - i32x4.splat - global.get $~lib/builtins/i32.MAX_VALUE - i32x4.splat - i16x8.narrow_i32x4_s - global.get $~lib/builtins/i16.MAX_VALUE - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - global.get $~lib/builtins/i32.MAX_VALUE - i32x4.splat - global.get $~lib/builtins/i32.MAX_VALUE - i32x4.splat - i16x8.narrow_i32x4_u - global.get $~lib/builtins/u16.MAX_VALUE - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i8x16.splat - i32.const 0 - i8x16.replace_lane 8 - i16x8.extend_low_i8x16_s - i32.const -1 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i8x16.splat - i32.const 0 - i8x16.replace_lane 8 - i16x8.extend_low_i8x16_u - i32.const 255 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i8x16.splat - i32.const 0 - i8x16.replace_lane 0 - i16x8.extend_high_i8x16_s - i32.const -1 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i8x16.splat - i32.const 0 - i8x16.replace_lane 0 - i16x8.extend_high_i8x16_u - i32.const 255 - i16x8.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $7 - local.get $7 - i32.const 1 - i32.store8 - local.get $7 - i32.const 2 - i32.store8 offset=1 - local.get $7 - i32.const 3 - i32.store8 offset=2 - local.get $7 - i32.const 4 - i32.store8 offset=3 - local.get $7 - i32.const 5 - i32.store8 offset=4 - local.get $7 - i32.const 6 - i32.store8 offset=5 - local.get $7 - i32.const 7 - i32.store8 offset=6 - local.get $7 - i32.const -1 - i32.store8 offset=7 - local.get $7 - v128.load8x8_s align=1 - v128.const i32x4 0x00020001 0x00040003 0x00060005 0xffff0007 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 392 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $7 - v128.load8x8_u align=1 - v128.const i32x4 0x00020001 0x00040003 0x00060005 0x00ff0007 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 397 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $7 - call $~lib/rt/tlsf/__free - v128.const i32x4 0xc001ffff 0xffff7ffd 0xffff8000 0x8000bfff - v128.const i32x4 0xc000ffff 0x80000001 0x00018000 0xfff6c000 - i16x8.q15mulr_sat_s - v128.const i32x4 0x20000000 0x00010001 0x00007fff 0x000a2001 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - local.get $0 - i16x8.extadd_pairwise_i8x16_s - drop - local.get $0 - i16x8.extadd_pairwise_i8x16_u - drop - local.get $0 - local.get $0 - i16x8.extmul_low_i8x16_s - drop - local.get $0 - local.get $0 - i16x8.extmul_low_i8x16_u - drop - local.get $0 - local.get $0 - i16x8.extmul_high_i8x16_s - drop - local.get $0 - local.get $0 - i16x8.extmul_high_i8x16_u - drop - ) - (func $simd/test_i32x4 - (local $0 v128) - (local $1 v128) - (local $2 v128) - (local $3 v128) - (local $4 v128) - (local $5 v128) - (local $6 v128) - (local $7 i32) - v128.const i32x4 0x00000001 0x00000002 0x00000003 0x7fffffff - local.set $0 - local.get $0 - v128.const i32x4 0x00000001 0x00000002 0x00000003 0x7fffffff - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 420 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - i32x4.splat - local.set $1 - local.get $1 - v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 422 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i32x4.add - local.set $2 - local.get $2 - v128.const i32x4 0x00000002 0x00000003 0x00000004 0x80000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 424 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i32x4.sub - local.get $0 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 425 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i32x4.mul - local.get $2 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 426 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 - v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 - i32x4.min_s - v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 - v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 - i32x4.min_u - v128.const i32x4 0x00000000 0x00000000 0x7fffffff 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 - v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 - i32x4.max_s - v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 - v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 - i32x4.max_u - v128.const i32x4 0x80000000 0x7fffffff 0x80000000 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00020001 0x00040003 0x0003ffff 0x00000000 - v128.const i32x4 0x00060005 0x00080007 0xffff0002 0x00000000 - i32x4.dot_i16x8_s - v128.const i32x4 0x00000011 0x00000035 0xfffffffb 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - local.get $0 - i32x4.neg - v128.const i32x4 0xffffffff 0xfffffffe 0xfffffffd 0x80000001 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 467 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32x4.extract_lane 0 - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 472 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32x4.extract_lane 3 - i32.const -2147483648 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 473 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 5 - i32x4.replace_lane 3 - v128.const i32x4 0x00000002 0x00000003 0x00000004 0x00000005 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 474 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 - v128.const i32x4 0x00000001 0x00000002 0x00000001 0x00000001 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 479 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const 1 - i32x4.splat - i32.const 1 - i32x4.shl - i32.const 2 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -2 - i32x4.splat - i32.const 1 - i32x4.shr_s - i32.const -1 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i32x4.splat - i32.const 1 - i32x4.shr_u - i32.const 2147483647 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 - v128.any_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - i32.const 1 - i32x4.splat - i32x4.all_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - i32.const 0 - i32x4.splat - i32.const 1 - i32x4.replace_lane 0 - local.set $3 - i32.const 0 - i32x4.splat - i32.const -1 - i32x4.replace_lane 0 - local.set $4 - local.get $4 - local.set $5 - local.get $4 - v128.not - local.set $6 - local.get $4 - local.get $3 - i32x4.eq - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 493 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i32x4.ne - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 494 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i32x4.lt_s - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 495 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32x4.lt_u - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 496 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32x4.le_s - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 497 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i32x4.le_u - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 498 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32x4.gt_s - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 499 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i32x4.gt_u - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 500 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $3 - i32x4.ge_s - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 501 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $4 - i32x4.ge_u - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 502 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - f32.const -1.5 - f32x4.splat - i32x4.trunc_sat_f32x4_s - i32.const -1 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - f32.const -1.5 - f32x4.splat - i32x4.trunc_sat_f32x4_u - i32.const 0 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i16x8.splat - i32.const 0 - i16x8.replace_lane 4 - i32x4.extend_low_i16x8_s - i32.const -1 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i16x8.splat - i32.const 0 - i16x8.replace_lane 4 - i32x4.extend_low_i16x8_u - i32.const 65535 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i16x8.splat - i32.const 0 - i16x8.replace_lane 0 - i32x4.extend_high_i16x8_s - i32.const -1 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i16x8.splat - i32.const 0 - i16x8.replace_lane 0 - i32x4.extend_high_i16x8_u - i32.const 65535 - i32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $7 - local.get $7 - i32.const 1 - i32.store16 - local.get $7 - i32.const 2 - i32.store16 offset=2 - local.get $7 - i32.const 3 - i32.store16 offset=4 - local.get $7 - i32.const -1 - i32.store16 offset=6 - local.get $7 - v128.load16x4_s align=2 - v128.const i32x4 0x00000001 0x00000002 0x00000003 0xffffffff - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 523 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $7 - v128.load16x4_u align=2 - v128.const i32x4 0x00000001 0x00000002 0x00000003 0x0000ffff - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 528 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $7 - call $~lib/rt/tlsf/__free - local.get $0 - i32x4.extadd_pairwise_i16x8_s - drop - local.get $0 - i32x4.extadd_pairwise_i16x8_u - drop - local.get $0 - i32x4.trunc_sat_f64x2_s_zero - drop - local.get $0 - i32x4.trunc_sat_f64x2_u_zero - drop - local.get $0 - local.get $0 - i32x4.extmul_low_i16x8_s - drop - local.get $0 - local.get $0 - i32x4.extmul_low_i16x8_u - drop - local.get $0 - local.get $0 - i32x4.extmul_high_i16x8_s - drop - local.get $0 - local.get $0 - i32x4.extmul_high_i16x8_u - drop - ) - (func $simd/test_i64x2 - (local $0 v128) - (local $1 v128) - (local $2 v128) - (local $3 i32) - v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x7fffffff - local.set $0 - local.get $0 - v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x7fffffff - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 549 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i64.const 1 - i64x2.splat - local.set $1 - local.get $1 - v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 551 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i64x2.add - local.set $2 - local.get $2 - v128.const i32x4 0x00000002 0x00000000 0x00000000 0x80000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 553 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i64x2.sub - local.get $0 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 554 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - i64x2.mul - local.get $2 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 555 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i64x2.neg - v128.const i32x4 0xffffffff 0xffffffff 0x00000001 0x80000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 556 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i64x2.extract_lane 0 - i64.const 2 - i64.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 561 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i64x2.extract_lane 1 - i64.const -9223372036854775808 - i64.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 562 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i64.const 3 - i64x2.replace_lane 1 - v128.const i32x4 0x00000002 0x00000000 0x00000003 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 563 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 - v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 568 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i64.const 1 - i64x2.splat - i32.const 1 - i64x2.shl - i64.const 2 - i64x2.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i64.const -2 - i64x2.splat - i32.const 1 - i64x2.shr_s - i64.const -1 - i64x2.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i64.const -1 - i64x2.splat - i32.const 1 - i64x2.shr_u - i64.const 9223372036854775807 - i64x2.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 - v128.any_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - i64.const 1 - i64x2.splat - i64x2.all_true - i32.const 0 - i32.ne - i32.const 1 - i32.eq - drop - i32.const 16 - call $~lib/rt/tlsf/__alloc - local.set $3 - local.get $3 - i32.const 1 - i32.store - local.get $3 - i32.const -1 - i32.store offset=4 - local.get $3 - v128.load32x2_s align=4 - v128.const i32x4 0x00000001 0x00000000 0xffffffff 0xffffffff - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 582 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $3 - v128.load32x2_u align=4 - v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x00000000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 587 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $3 - call $~lib/rt/tlsf/__free - local.get $0 - local.get $0 - i64x2.extmul_low_i32x4_s - drop - local.get $0 - local.get $0 - i64x2.extmul_low_i32x4_u - drop - local.get $0 - local.get $0 - i64x2.extmul_high_i32x4_s - drop - local.get $0 - local.get $0 - i64x2.extmul_high_i32x4_u - drop - ) - (func $simd/test_f32x4 - (local $0 v128) - (local $1 v128) - (local $2 v128) - (local $3 v128) - (local $4 v128) - (local $5 v128) - (local $6 v128) - (local $7 v128) - v128.const i32x4 0x3fc00000 0x40200000 0x40600000 0x40900000 - local.set $0 - local.get $0 - v128.const i32x4 0x3fc00000 0x40200000 0x40600000 0x40900000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 603 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - f32.const 1 - f32x4.splat - local.set $1 - local.get $1 - v128.const i32x4 0x3f800000 0x3f800000 0x3f800000 0x3f800000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 605 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - f32x4.add - local.set $2 - local.get $2 - v128.const i32x4 0x40200000 0x40600000 0x40900000 0x40b00000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 607 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - f32x4.sub - local.get $0 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 608 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - f32x4.mul - local.get $2 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 609 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $0 - f32x4.mul - local.set $3 - local.get $3 - local.get $0 - f32x4.div - local.get $0 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 611 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $0 - f32x4.mul - local.get $0 - i8x16.ne - v128.any_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 612 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - f32x4.neg - v128.const i32x4 0xbfc00000 0xc0200000 0xc0600000 0xc0900000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 613 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - f32x4.extract_lane 0 - f32.const 2.5 - f32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 614 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - f32x4.extract_lane 3 - f32.const 5.5 - f32.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 615 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - f32.const 6.5 - f32x4.replace_lane 3 - v128.const i32x4 0x40200000 0x40600000 0x40900000 0x40d00000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 616 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 - v128.const i32x4 0x3fc00000 0x40200000 0x3f800000 0x3f800000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 621 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - f32.const 0 - f32x4.splat - f32.const 1 - f32x4.replace_lane 0 - local.set $4 - f32.const 0 - f32x4.splat - f32.const -1 - f32x4.replace_lane 0 - local.set $5 - v128.const i32x4 0xffffffff 0x00000000 0x00000000 0x00000000 - local.set $6 - v128.const i32x4 0x00000000 0xffffffff 0xffffffff 0xffffffff - local.set $7 - local.get $5 - local.get $4 - f32x4.eq - local.get $7 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 630 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f32x4.ne - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 631 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f32x4.lt - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 632 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $5 - f32x4.le - local.get $7 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 633 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $5 - f32x4.gt - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 634 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f32x4.ge - local.get $7 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 635 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f32x4.min - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 636 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f32x4.max - local.get $4 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 637 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - f32x4.abs - local.get $4 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 638 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - v128.const i32x4 0x40800000 0x41100000 0x41800000 0x41c80000 - f32x4.sqrt - v128.const i32x4 0x40000000 0x40400000 0x40800000 0x40a00000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i32x4.splat - f32x4.convert_i32x4_s - f32.const -1 - f32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - i32.const -1 - i32x4.splat - f32x4.convert_i32x4_u - f32.const 4294967296 - f32x4.splat - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - local.get $0 - f32x4.demote_f64x2_zero - drop - ) - (func $simd/test_f64x2 - (local $0 v128) - (local $1 v128) - (local $2 v128) - (local $3 v128) - (local $4 v128) - (local $5 v128) - (local $6 v128) - (local $7 v128) - v128.const i32x4 0x00000000 0x3ff80000 0x00000000 0x40040000 - local.set $0 - local.get $0 - v128.const i32x4 0x00000000 0x3ff80000 0x00000000 0x40040000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 657 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - f64.const 1 - f64x2.splat - local.set $1 - local.get $1 - v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x3ff00000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 659 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - f64x2.add - local.set $2 - local.get $2 - v128.const i32x4 0x00000000 0x40040000 0x00000000 0x400c0000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 661 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - f64x2.sub - local.get $0 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 662 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - local.get $1 - f64x2.mul - local.get $2 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 663 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $0 - f64x2.mul - local.set $3 - local.get $3 - local.get $0 - f64x2.div - local.get $0 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 665 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $3 - local.get $0 - f64x2.mul - local.get $0 - i8x16.ne - v128.any_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 666 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - f64x2.neg - v128.const i32x4 0x00000000 0xbff80000 0x00000000 0xc0040000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 667 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - f64x2.extract_lane 0 - f64.const 2.5 - f64.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 668 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - f64x2.extract_lane 1 - f64.const 3.5 - f64.eq - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 669 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 - f64.const 4.5 - f64x2.replace_lane 1 - v128.const i32x4 0x00000000 0x40040000 0x00000000 0x40120000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 670 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $1 - i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 - v128.const i32x4 0x00000000 0x3ff80000 0x00000000 0x3ff00000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 675 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - f64.const 0 - f64x2.splat - f64.const 1 - f64x2.replace_lane 0 - local.set $4 - f64.const 0 - f64x2.splat - f64.const -1 - f64x2.replace_lane 0 - local.set $5 - v128.const i32x4 0xffffffff 0xffffffff 0x00000000 0x00000000 - local.set $6 - v128.const i32x4 0x00000000 0x00000000 0xffffffff 0xffffffff - local.set $7 - local.get $5 - local.get $4 - f64x2.eq - local.get $7 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 684 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f64x2.ne - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 685 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f64x2.lt - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 686 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $5 - f64x2.le - local.get $7 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 687 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $4 - local.get $5 - f64x2.gt - local.get $6 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 688 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f64x2.ge - local.get $7 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 689 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f64x2.min - local.get $5 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 690 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - local.get $4 - f64x2.max - local.get $4 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 691 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $5 - f64x2.abs - local.get $4 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 160 - i32.const 692 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - v128.const i32x4 0x00000000 0x40100000 0x00000000 0x40220000 - f64x2.sqrt - v128.const i32x4 0x00000000 0x40000000 0x00000000 0x40080000 - i8x16.eq - i8x16.all_true - i32.const 0 - i32.ne - drop - local.get $0 - f64x2.convert_low_i32x4_s - drop - local.get $0 - f64x2.convert_low_i32x4_u - drop - local.get $0 - f64x2.promote_low_f32x4 - drop - ) - (func $simd/test_const (result v128) - (local $0 v128) - v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 - local.set $0 - local.get $0 - ) - (func $start:simd - i32.const 1 - drop - call $simd/test_v128 - call $simd/test_i8x16 - call $simd/test_i16x8 - call $simd/test_i32x4 - call $simd/test_i64x2 - call $simd/test_f32x4 - call $simd/test_f64x2 - call $simd/test_const - drop - ) - (func $simd/test_vars_i8x16_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) - v128.const i32x4 0x03000100 0x07000504 0x0b0a0908 0x000e0d0c - local.get $0 - i8x16.replace_lane 2 - local.get $1 - i8x16.replace_lane 6 - local.get $2 - i8x16.replace_lane 15 - ) - (func $simd/test_vars_i8x16_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (param $12 i32) (param $13 i32) (param $14 i32) (param $15 i32) (result v128) - local.get $0 - i8x16.splat - local.get $1 - i8x16.replace_lane 1 - local.get $2 - i8x16.replace_lane 2 - local.get $3 - i8x16.replace_lane 3 - local.get $4 - i8x16.replace_lane 4 - local.get $5 - i8x16.replace_lane 5 - local.get $6 - i8x16.replace_lane 6 - local.get $7 - i8x16.replace_lane 7 - local.get $8 - i8x16.replace_lane 8 - local.get $9 - i8x16.replace_lane 9 - local.get $10 - i8x16.replace_lane 10 - local.get $11 - i8x16.replace_lane 11 - local.get $12 - i8x16.replace_lane 12 - local.get $13 - i8x16.replace_lane 13 - local.get $14 - i8x16.replace_lane 14 - local.get $15 - i8x16.replace_lane 15 - ) - (func $simd/test_vars_i16x8_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) - v128.const i32x4 0x00010000 0x00030000 0x00050000 0x00000006 - local.get $0 - i16x8.replace_lane 2 - local.get $1 - i16x8.replace_lane 4 - local.get $2 - i16x8.replace_lane 7 - ) - (func $simd/test_vars_i16x8_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result v128) - local.get $0 - i16x8.splat - local.get $1 - i16x8.replace_lane 1 - local.get $2 - i16x8.replace_lane 2 - local.get $3 - i16x8.replace_lane 3 - local.get $4 - i16x8.replace_lane 4 - local.get $5 - i16x8.replace_lane 5 - local.get $6 - i16x8.replace_lane 6 - local.get $7 - i16x8.replace_lane 7 - ) - (func $simd/test_vars_i32x4_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - local.get $0 - i32x4.replace_lane 1 - local.get $1 - i32x4.replace_lane 2 - local.get $2 - i32x4.replace_lane 3 - ) - (func $simd/test_vars_i32x4_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result v128) - local.get $0 - i32x4.splat - local.get $1 - i32x4.replace_lane 1 - local.get $2 - i32x4.replace_lane 2 - local.get $3 - i32x4.replace_lane 3 - ) - (func $simd/test_vars_i64x2_partial (param $0 i64) (result v128) - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - local.get $0 - i64x2.replace_lane 1 - ) - (func $simd/test_vars_i64x2_full (param $0 i64) (param $1 i64) (result v128) - local.get $0 - i64x2.splat - local.get $1 - i64x2.replace_lane 1 - ) - (func $simd/test_vars_f32x4_partial (param $0 f32) (param $1 f32) (param $2 f32) (result v128) - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - local.get $0 - f32x4.replace_lane 1 - local.get $1 - f32x4.replace_lane 2 - local.get $2 - f32x4.replace_lane 3 - ) - (func $simd/test_vars_f32x4_full (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (result v128) - local.get $0 - f32x4.splat - local.get $1 - f32x4.replace_lane 1 - local.get $2 - f32x4.replace_lane 2 - local.get $3 - f32x4.replace_lane 3 - ) - (func $simd/test_vars_f64x2_partial (param $0 f64) (result v128) - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - local.get $0 - f64x2.replace_lane 1 - ) - (func $simd/test_vars_f64x2_full (param $0 f64) (param $1 f64) (result v128) - local.get $0 - f64x2.splat - local.get $1 - f64x2.replace_lane 1 - ) - (func $~start - call $start:simd - ) -) diff --git a/tests/compiler/simd.ts b/tests/compiler/simd.ts index 857aa280a7..3a2c77f9a5 100644 --- a/tests/compiler/simd.ts +++ b/tests/compiler/simd.ts @@ -379,6 +379,11 @@ function test_i16x8(): void { assert(i16x8.extend_low_i8x16_u(i8x16.replace_lane(i8x16.splat(-1), 8, 0)) == i16x8.splat(255)); assert(i16x8.extend_high_i8x16_s(i8x16.replace_lane(i8x16.splat(-1), 0, 0)) == i16x8.splat(-1)); assert(i16x8.extend_high_i8x16_u(i8x16.replace_lane(i8x16.splat(-1), 0, 0)) == i16x8.splat(255)); + assert( + i16x8.shuffle(a, b, 0, 1, 2, 3, 12, 13, 14, 15) + == + v128.shuffle(a, b, 0, 1, 2, 3, 12, 13, 14, 15) + ); { let ptr = __alloc(16); store(ptr, 1); @@ -514,6 +519,11 @@ function test_i32x4(): void { assert(i32x4.extend_low_i16x8_u(i16x8.replace_lane(i16x8.splat(-1), 4, 0)) == i32x4.splat(65535)); assert(i32x4.extend_high_i16x8_s(i16x8.replace_lane(i16x8.splat(-1), 0, 0)) == i32x4.splat(-1)); assert(i32x4.extend_high_i16x8_u(i16x8.replace_lane(i16x8.splat(-1), 0, 0)) == i32x4.splat(65535)); + assert( + i32x4.shuffle(a, b, 0, 1, 6, 7) + == + v128.shuffle(a, b, 0, 1, 6, 7) + ); { let ptr = __alloc(16); store(ptr, 1); From 82184d449ad7625b8f98fb516aca5af1a113a739 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 12 Jul 2022 14:13:09 +0300 Subject: [PATCH 2/4] fixes --- src/builtins.ts | 6 - std/assembly/builtins.ts | 45 +- tests/compiler/simd.debug.wat | 4841 +++++++++++++++++++++++++++++++ tests/compiler/simd.release.wat | 12 +- 4 files changed, 4891 insertions(+), 13 deletions(-) diff --git a/src/builtins.ts b/src/builtins.ts index b90dd3a8b5..d0ef21cfb8 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -8359,7 +8359,6 @@ builtins.set(BuiltinNames.i8x16_shuffle, builtin_i8x16_shuffle); // i8x16.swizzle -> v128.swizzle function builtin_i8x16_swizzle(ctx: BuiltinContext): ExpressionRef { - checkTypeAbsent(ctx); ctx.typeArguments = null; ctx.contextualType = Type.v128; return builtin_v128_swizzle(ctx); @@ -8791,7 +8790,6 @@ builtins.set(BuiltinNames.i16x8_shuffle, builtin_i16x8_shuffle); // i16x8.swizzle -> v128.swizzle function builtin_i16x8_swizzle(ctx: BuiltinContext): ExpressionRef { - checkTypeAbsent(ctx); ctx.typeArguments = null; ctx.contextualType = Type.v128; return builtin_v128_swizzle(ctx); @@ -9187,7 +9185,6 @@ builtins.set(BuiltinNames.i32x4_shuffle, builtin_i32x4_shuffle); // i32x4.swizzle -> v128.swizzle function builtin_i32x4_swizzle(ctx: BuiltinContext): ExpressionRef { - checkTypeAbsent(ctx); ctx.typeArguments = null; ctx.contextualType = Type.v128; return builtin_v128_swizzle(ctx); @@ -9448,7 +9445,6 @@ builtins.set(BuiltinNames.i64x2_shuffle, builtin_i64x2_shuffle); // i64x2.swizzle -> v128.swizzle function builtin_i64x2_swizzle(ctx: BuiltinContext): ExpressionRef { - checkTypeAbsent(ctx); ctx.typeArguments = null; ctx.contextualType = Type.v128; return builtin_v128_swizzle(ctx); @@ -9709,7 +9705,6 @@ builtins.set(BuiltinNames.f32x4_shuffle, builtin_f32x4_shuffle); // f32x4.swizzle -> v128.swizzle function builtin_f32x4_swizzle(ctx: BuiltinContext): ExpressionRef { - checkTypeAbsent(ctx); ctx.typeArguments = null; ctx.contextualType = Type.v128; return builtin_v128_swizzle(ctx); @@ -9970,7 +9965,6 @@ builtins.set(BuiltinNames.f64x2_shuffle, builtin_f64x2_shuffle); // f64x2.swizzle -> v128.swizzle function builtin_f64x2_swizzle(ctx: BuiltinContext): ExpressionRef { - checkTypeAbsent(ctx); ctx.typeArguments = null; ctx.contextualType = Type.v128; return builtin_v128_swizzle(ctx); diff --git a/std/assembly/builtins.ts b/std/assembly/builtins.ts index 20a7bd9fc3..0be70e7818 100644 --- a/std/assembly/builtins.ts +++ b/std/assembly/builtins.ts @@ -1643,7 +1643,7 @@ export namespace i8x16 { // @ts-ignore: decorator @builtin - export declare function swizzle(a: v128, s: v128): v128; + export declare function swizzle(a: v128, b: v128): v128; } // @ts-ignore: decorator @@ -1835,6 +1835,17 @@ export namespace i16x8 { // @ts-ignore: decorator @builtin export declare function extmul_high_i8x16_u(a: v128, b: v128): v128; + + // @ts-ignore: decorator + @builtin + export declare function shuffle( + a: v128, b: v128, + l0: u8, l1: u8, l2: u8, l3: u8, l4: u8, l5: u8, l6: u8, l7: u8 + ): v128; + + // @ts-ignore: decorator + @builtin + export declare function swizzle(a: v128, b: v128): v128; } // @ts-ignore: decorator @@ -2010,6 +2021,14 @@ export namespace i32x4 { // @ts-ignore: decorator @builtin export declare function extmul_high_i16x8_u(a: v128, b: v128): v128; + + // @ts-ignore: decorator + @builtin + export declare function shuffle(a: v128, b: v128, l0: u8, l1: u8, l2: u8, l3: u8): v128; + + // @ts-ignore: decorator + @builtin + export declare function swizzle(a: v128, b: v128): v128; } // @ts-ignore: decorator @@ -2125,6 +2144,14 @@ export namespace i64x2 { // @ts-ignore: decorator @builtin export declare function extmul_high_i32x4_u(a: v128, b: v128): v128; + + // @ts-ignore: decorator + @builtin + export declare function shuffle(a: v128, b: v128, l0: u8, l1: u8): v128; + + // @ts-ignore: decorator + @builtin + export declare function swizzle(a: v128, b: v128): v128; } // @ts-ignore: decorator @@ -2240,6 +2267,14 @@ export namespace f32x4 { // @ts-ignore: decorator @builtin export declare function demote_f64x2_zero(a: v128): v128; + + // @ts-ignore: decorator + @builtin + export declare function shuffle(a: v128, b: v128, l0: u8, l1: u8, l2: u8, l3: u8): v128; + + // @ts-ignore: decorator + @builtin + export declare function swizzle(a: v128, b: v128): v128; } // @ts-ignore: decorator @@ -2355,6 +2390,14 @@ export namespace f64x2 { // @ts-ignore: decorator @builtin export declare function promote_low_f32x4(a: v128): v128; + + // @ts-ignore: decorator + @builtin + export declare function shuffle(a: v128, b: v128, l0: u8, l1: u8): v128; + + // @ts-ignore: decorator + @builtin + export declare function swizzle(a: v128, b: v128): v128; } @final diff --git a/tests/compiler/simd.debug.wat b/tests/compiler/simd.debug.wat index e69de29bb2..32a41930fb 100644 --- a/tests/compiler/simd.debug.wat +++ b/tests/compiler/simd.debug.wat @@ -0,0 +1,4841 @@ +(module + (type $none_=>_none (func)) + (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_i32_=>_v128 (func (param i32 i32 i32) (result v128))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_none (func (param i32))) + (type $none_=>_v128 (func (result v128))) + (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_v128 (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) (result v128))) + (type $i32_i32_i32_i32_i32_i32_i32_i32_=>_v128 (func (param i32 i32 i32 i32 i32 i32 i32 i32) (result v128))) + (type $i32_i32_i32_i32_=>_v128 (func (param i32 i32 i32 i32) (result v128))) + (type $i64_=>_v128 (func (param i64) (result v128))) + (type $i64_i64_=>_v128 (func (param i64 i64) (result v128))) + (type $f32_f32_f32_=>_v128 (func (param f32 f32 f32) (result v128))) + (type $f32_f32_f32_f32_=>_v128 (func (param f32 f32 f32 f32) (result v128))) + (type $f64_=>_v128 (func (param f64) (result v128))) + (type $f64_f64_=>_v128 (func (param f64 f64) (result v128))) + (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_SIMD i32 (i32.const 1)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/builtins/i16.MAX_VALUE i32 (i32.const 32767)) + (global $~lib/builtins/i8.MAX_VALUE i32 (i32.const 127)) + (global $~lib/builtins/u8.MAX_VALUE i32 (i32.const 255)) + (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) + (global $~lib/builtins/u16.MAX_VALUE i32 (i32.const 65535)) + (global $~lib/memory/__data_end i32 (i32.const 188)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16572)) + (global $~lib/memory/__heap_base i32 (i32.const 16572)) + (memory $0 1) + (data (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data (i32.const 140) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\00s\00i\00m\00d\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "test_vars_i8x16_partial" (func $simd/test_vars_i8x16_partial)) + (export "test_vars_i8x16_full" (func $simd/test_vars_i8x16_full)) + (export "test_vars_i16x8_partial" (func $simd/test_vars_i16x8_partial)) + (export "test_vars_i16x8_full" (func $simd/test_vars_i16x8_full)) + (export "test_vars_i32x4_partial" (func $simd/test_vars_i32x4_partial)) + (export "test_vars_i32x4_full" (func $simd/test_vars_i32x4_full)) + (export "test_vars_i64x2_partial" (func $simd/test_vars_i64x2_partial)) + (export "test_vars_i64x2_full" (func $simd/test_vars_i64x2_full)) + (export "test_vars_f32x4_partial" (func $simd/test_vars_f32x4_partial)) + (export "test_vars_f32x4_full" (func $simd/test_vars_f32x4_full)) + (export "test_vars_f64x2_partial" (func $simd/test_vars_f64x2_partial)) + (export "test_vars_f64x2_full" (func $simd/test_vars_f64x2_full)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/tlsf/Root#set:flMap (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + local.get $1 + i32.load + local.set $2 + i32.const 1 + drop + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $3 + i32.const 1 + drop + local.get $3 + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $4 + local.get $3 + i32.const 4 + i32.shr_u + local.set $5 + else + local.get $3 + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $6 + i32.const 31 + local.get $6 + i32.clz + i32.sub + local.set $4 + local.get $6 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $5 + local.get $4 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $4 + end + i32.const 1 + drop + local.get $4 + i32.const 23 + i32.lt_u + if (result i32) + local.get $5 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=4 + local.set $8 + local.get $1 + i32.load offset=8 + local.set $9 + local.get $8 + if + local.get $8 + local.get $9 + call $~lib/rt/tlsf/Block#set:next + end + local.get $9 + if + local.get $9 + local.get $8 + call $~lib/rt/tlsf/Block#set:prev + end + local.get $1 + local.get $0 + local.set $10 + local.get $4 + local.set $6 + local.get $5 + local.set $7 + local.get $10 + local.get $6 + i32.const 4 + i32.shl + local.get $7 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + i32.eq + if + local.get $0 + local.set $11 + local.get $4 + local.set $10 + local.get $5 + local.set $6 + local.get $9 + local.set $7 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $7 + i32.store offset=96 + local.get $9 + i32.eqz + if + local.get $0 + local.set $6 + local.get $4 + local.set $7 + local.get $6 + local.get $7 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $6 + local.get $0 + local.set $7 + local.get $4 + local.set $11 + local.get $6 + i32.const 1 + local.get $5 + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $6 + local.set $10 + local.get $7 + local.get $11 + i32.const 2 + i32.shl + i32.add + local.get $10 + i32.store offset=4 + local.get $6 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $4 + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + i32.const 1 + drop + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.set $2 + i32.const 1 + drop + local.get $2 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.set $3 + local.get $3 + i32.const 4 + i32.add + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $4 + local.get $4 + i32.load + local.set $5 + local.get $5 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $2 + i32.const 4 + i32.add + local.get $5 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $2 + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $1 + local.set $3 + local.get $3 + i32.const 4 + i32.add + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.set $4 + local.get $4 + i32.load + local.set $5 + end + local.get $2 + i32.const 2 + i32.and + if + local.get $1 + local.set $3 + local.get $3 + i32.const 4 + i32.sub + i32.load + local.set $3 + local.get $3 + i32.load + local.set $6 + i32.const 1 + drop + local.get $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $3 + call $~lib/rt/tlsf/removeBlock + local.get $3 + local.set $1 + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $2 + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $4 + local.get $5 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $2 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $7 + i32.const 1 + drop + local.get $7 + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $1 + i32.const 4 + i32.add + local.get $7 + i32.add + local.get $4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $7 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $8 + local.get $7 + i32.const 4 + i32.shr_u + local.set $9 + else + local.get $7 + local.tee $3 + i32.const 1073741820 + local.tee $6 + local.get $3 + local.get $6 + i32.lt_u + select + local.set $3 + i32.const 31 + local.get $3 + i32.clz + i32.sub + local.set $8 + local.get $3 + local.get $8 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $9 + local.get $8 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $8 + end + i32.const 1 + drop + local.get $8 + i32.const 23 + i32.lt_u + if (result i32) + local.get $9 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $10 + local.get $8 + local.set $3 + local.get $9 + local.set $6 + local.get $10 + local.get $3 + i32.const 4 + i32.shl + local.get $6 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $11 + local.get $1 + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $1 + local.get $11 + call $~lib/rt/tlsf/Block#set:next + local.get $11 + if + local.get $11 + local.get $1 + call $~lib/rt/tlsf/Block#set:prev + end + local.get $0 + local.set $12 + local.get $8 + local.set $10 + local.get $9 + local.set $3 + local.get $1 + local.set $6 + local.get $12 + local.get $10 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $8 + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $0 + local.set $13 + local.get $8 + local.set $12 + local.get $0 + local.set $3 + local.get $8 + local.set $6 + local.get $3 + local.get $6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 1 + local.get $9 + i32.shl + i32.or + local.set $10 + local.get $13 + local.get $12 + i32.const 2 + i32.shl + i32.add + local.get $10 + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + i32.const 1 + drop + local.get $1 + local.get $2 + i32.le_u + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 377 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $2 + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $2 + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + local.set $4 + i32.const 0 + local.set $5 + local.get $4 + if + i32.const 1 + drop + local.get $1 + local.get $4 + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 384 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 16 + i32.sub + local.get $4 + i32.eq + if + local.get $1 + i32.const 16 + i32.sub + local.set $1 + local.get $4 + i32.load + local.set $5 + else + nop + end + else + i32.const 1 + drop + local.get $1 + local.get $0 + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 397 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + local.get $1 + i32.sub + local.set $6 + local.get $6 + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $6 + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $7 + local.get $1 + local.set $8 + local.get $8 + local.get $7 + i32.const 1 + i32.or + local.get $5 + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $8 + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $8 + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $1 + i32.const 4 + i32.add + local.get $7 + i32.add + local.set $4 + local.get $4 + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $0 + local.set $9 + local.get $4 + local.set $3 + local.get $9 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $8 + call $~lib/rt/tlsf/insertBlock + i32.const 1 + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $0 + memory.size + local.set $1 + local.get $0 + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $2 + local.get $1 + i32.gt_s + if (result i32) + local.get $2 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $0 + local.set $3 + local.get $3 + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $3 + local.set $5 + i32.const 0 + local.set $4 + local.get $5 + local.get $4 + i32.store offset=1568 + i32.const 0 + local.set $5 + loop $for-loop|0 + local.get $5 + i32.const 23 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $3 + local.set $8 + local.get $5 + local.set $7 + i32.const 0 + local.set $6 + local.get $8 + local.get $7 + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=4 + i32.const 0 + local.set $8 + loop $for-loop|1 + local.get $8 + i32.const 16 + i32.lt_u + local.set $7 + local.get $7 + if + local.get $3 + local.set $11 + local.get $5 + local.set $10 + local.get $8 + local.set $9 + i32.const 0 + local.set $6 + local.get $11 + local.get $10 + i32.const 4 + i32.shl + local.get $9 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $6 + i32.store offset=96 + local.get $8 + i32.const 1 + i32.add + local.set $8 + br $for-loop|1 + end + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|0 + end + end + local.get $0 + i32.const 1572 + i32.add + local.set $12 + i32.const 0 + drop + local.get $3 + local.get $12 + memory.size + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $3 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/computeSize (param $0 i32) (result i32) + local.get $0 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $0 + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + ) + (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 96 + i32.const 32 + i32.const 458 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/computeSize + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $2 + local.get $1 + i32.const 4 + i32.shr_u + local.set $3 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $1 + end + local.set $4 + i32.const 31 + local.get $4 + i32.clz + i32.sub + local.set $2 + local.get $4 + local.get $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $3 + local.get $2 + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $2 + end + i32.const 1 + drop + local.get $2 + i32.const 23 + i32.lt_u + if (result i32) + local.get $3 + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 330 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $5 + local.get $2 + local.set $4 + local.get $5 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const 0 + i32.const -1 + i32.xor + local.get $3 + i32.shl + i32.and + local.set $6 + i32.const 0 + local.set $7 + local.get $6 + i32.eqz + if + local.get $0 + i32.load + i32.const 0 + i32.const -1 + i32.xor + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.set $5 + local.get $5 + i32.eqz + if + i32.const 0 + local.set $7 + else + local.get $5 + i32.ctz + local.set $2 + local.get $0 + local.set $8 + local.get $2 + local.set $4 + local.get $8 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.set $6 + i32.const 1 + drop + local.get $6 + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 343 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $4 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $7 + end + else + local.get $0 + local.set $9 + local.get $2 + local.set $8 + local.get $6 + i32.ctz + local.set $4 + local.get $9 + local.get $8 + i32.const 4 + i32.shl + local.get $4 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $7 + end + local.get $7 + ) + (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + i32.const 0 + drop + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.set $1 + end + memory.size + local.set $2 + local.get $1 + i32.const 4 + local.get $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + local.get $0 + local.set $3 + local.get $3 + i32.load offset=1568 + i32.ne + i32.shl + i32.add + local.set $1 + local.get $1 + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $4 + local.get $2 + local.tee $3 + local.get $4 + local.tee $5 + local.get $3 + local.get $5 + i32.gt_s + select + local.set $6 + local.get $6 + memory.grow + i32.const 0 + i32.lt_s + if + local.get $4 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $7 + local.get $0 + local.get $2 + i32.const 16 + i32.shl + local.get $7 + i32.const 16 + i32.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.set $3 + i32.const 1 + drop + local.get $2 + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 357 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.sub + local.set $4 + local.get $4 + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $1 + local.get $2 + local.get $3 + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + local.set $5 + local.get $5 + local.get $4 + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $0 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $3 + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $1 + local.set $5 + local.get $5 + i32.const 4 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.get $1 + local.set $5 + local.get $5 + i32.const 4 + i32.add + local.get $5 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + i32.load + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $1 + call $~lib/rt/tlsf/prepareSize + local.set $2 + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + local.get $3 + i32.eqz + if + local.get $0 + local.get $2 + call $~lib/rt/tlsf/growMemory + local.get $0 + local.get $2 + call $~lib/rt/tlsf/searchBlock + local.set $3 + i32.const 1 + drop + local.get $3 + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 496 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $3 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $2 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 498 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $3 + call $~lib/rt/tlsf/removeBlock + local.get $0 + local.get $3 + local.get $2 + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $3 + ) + (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.const 0 + i32.ne + if (result i32) + local.get $0 + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $1 + i32.load + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 559 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + ) + (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) + i32.const 0 + drop + local.get $1 + local.get $1 + i32.load + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $0 i32) + local.get $0 + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $simd/test_v128 + (local $0 i32) + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.any_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + v128.const i32x4 0x00000000 0x00000000 0x00000000 0xff000000 + v128.any_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + v128.any_true + i32.const 0 + i32.ne + i32.const 0 + i32.eq + drop + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d + v128.const i32x4 0x04030202 0x08070605 0x0c0b0a09 0x100f0e0d + i8x16.ne + v128.any_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d + v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 + v128.and + v128.const i32x4 0x00010001 0x00010001 0x00010001 0x00010001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d + v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 + v128.or + v128.const i32x4 0x05030301 0x09070705 0x0d0b0b09 0x110f0f0d + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d + v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 + v128.xor + v128.const i32x4 0x05020300 0x09060704 0x0d0a0b08 0x110e0f0c + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d + v128.not + v128.const i32x4 0xfbfcfdfe 0xf7f8f9fa 0xf3f4f5f6 0xeff0f1f2 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d + v128.const i32x4 0x0d0e0f10 0x090a0b0c 0x05060708 0x01020304 + v128.const i32x4 0xff00ff00 0xff00ff00 0xff00ff00 0xff00ff00 + v128.bitselect + v128.const i32x4 0x040e0210 0x080a060c 0x0c060a08 0x10020e04 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 64 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + local.get $0 + v128.load offset=16 + v128.store offset=32 + local.get $0 + call $~lib/rt/tlsf/__free + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i32.const 42 + i32.store8 + local.get $0 + v128.load8_splat + v128.const i32x4 0x2a2a2a2a 0x2a2a2a2a 0x2a2a2a2a 0x2a2a2a2a + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 67 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i32.const 42 + i32.store16 + local.get $0 + v128.load16_splat + v128.const i32x4 0x002a002a 0x002a002a 0x002a002a 0x002a002a + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 77 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i32.const 42 + i32.store + local.get $0 + v128.load32_splat + v128.const i32x4 0x0000002a 0x0000002a 0x0000002a 0x0000002a + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 87 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i64.const 42 + i64.store + local.get $0 + v128.load64_splat + v128.const i32x4 0x0000002a 0x00000000 0x0000002a 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 97 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i32.const 42 + i32.store + local.get $0 + v128.load32_zero + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 107 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i64.const 42 + i64.store + local.get $0 + v128.load64_zero + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 117 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + ) + (func $simd/test_i8x16 + (local $0 v128) + (local $1 v128) + (local $2 v128) + (local $3 v128) + (local $4 v128) + (local $5 v128) + (local $6 v128) + (local $7 v128) + (local $8 v128) + (local $9 v128) + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x7f0f0e0d + local.set $0 + local.get $0 + v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x7f0f0e0d + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 139 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i8x16.splat + local.set $1 + local.get $1 + v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 141 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i8x16.add + local.set $2 + local.get $2 + v128.const i32x4 0x05040302 0x09080706 0x0d0c0b0a 0x80100f0e + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 143 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i8x16.sub + local.get $0 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 144 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 + i8x16.min_s + v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 + i8x16.min_u + v128.const i32x4 0x007f0000 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 + i8x16.max_s + v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x007f7f00 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00800080 0x00000000 0x00000000 0x00000000 + i8x16.max_u + v128.const i32x4 0x00807f80 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x04040201 0x08070605 0x0c0b0a09 0xff800e0d + v128.const i32x4 0x04020401 0x08070605 0x0c0b0a09 0xff800e0d + i8x16.avgr_u + v128.const i32x4 0x04030301 0x08070605 0x0c0b0a09 0xff800e0d + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + local.get $0 + i8x16.neg + v128.const i32x4 0xfcfdfeff 0xf8f9fafb 0xf4f5f6f7 0x81f1f2f3 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 185 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i8x16.extract_lane_s 0 + i32.extend8_s + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 190 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i8x16.extract_lane_s 15 + i32.extend8_s + i32.const -128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 191 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i8x16.extract_lane_u 15 + i32.const 255 + i32.and + i32.const 128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 192 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 17 + i8x16.replace_lane 15 + v128.const i32x4 0x05040302 0x09080706 0x0d0c0b0a 0x11100f0e + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 193 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + v128.const i32x4 0x04030201 0x08070605 0x01010101 0x01010101 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 198 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x7f7f7f7e 0x7f7f7f7f 0x7f7f7f7f 0x7f7f7f7f + i32.const 2 + i8x16.splat + i8x16.add_sat_s + i32.const 127 + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xfffffffe 0xffffffff 0xffffffff 0xffffffff + i32.const 2 + i8x16.splat + i8x16.add_sat_u + i32.const -1 + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80808081 0x80808080 0x80808080 0x80808080 + i32.const 2 + i8x16.splat + i8x16.sub_sat_s + i32.const -128 + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + i32.const 2 + i8x16.splat + i8x16.sub_sat_u + i32.const 0 + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i8x16.splat + i32.const 1 + i8x16.shl + i32.const 2 + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -2 + i8x16.splat + i32.const 1 + i8x16.shr_s + i32.const -1 + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i8x16.splat + i32.const 1 + i8x16.shr_u + i32.const 127 + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.any_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + i32.const 1 + i8x16.splat + i8x16.all_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + i32.const 0 + i8x16.splat + i32.const 1 + i8x16.replace_lane 0 + local.set $3 + i32.const 0 + i8x16.splat + i32.const -1 + i8x16.replace_lane 0 + local.set $4 + local.get $4 + local.set $5 + local.get $4 + v128.not + local.set $6 + local.get $4 + local.get $3 + i8x16.eq + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 236 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i8x16.ne + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 237 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i8x16.lt_s + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 238 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i8x16.lt_u + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 239 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i8x16.le_s + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 240 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i8x16.le_u + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 241 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i8x16.gt_s + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 242 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i8x16.gt_u + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 243 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i8x16.ge_s + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 244 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i8x16.ge_u + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 245 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/builtins/i16.MAX_VALUE + i16x8.splat + global.get $~lib/builtins/i16.MAX_VALUE + i16x8.splat + i8x16.narrow_i16x8_s + global.get $~lib/builtins/i8.MAX_VALUE + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + global.get $~lib/builtins/i16.MAX_VALUE + i16x8.splat + global.get $~lib/builtins/i16.MAX_VALUE + i16x8.splat + i8x16.narrow_i16x8_u + global.get $~lib/builtins/u8.MAX_VALUE + i8x16.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c + local.set $7 + v128.const i32x4 0x13121110 0x17161514 0x1b1a1918 0x1f1e1d1c + local.set $8 + local.get $7 + local.get $8 + i8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31 + v128.const i32x4 0x13021100 0x17061504 0x1b0a1908 0x1f0e1d0c + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 251 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x0c0d0e10 0x08090a0b 0x04050607 0x00010203 + local.set $9 + local.get $7 + local.get $9 + i8x16.swizzle + v128.const i32x4 0x0c0d0e00 0x08090a0b 0x04050607 0x00010203 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 257 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $7 + i8x16.popcnt + v128.const i32x4 0x02010100 0x03020201 0x03020201 0x04030302 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 262 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + ) + (func $simd/test_i16x8 + (local $0 v128) + (local $1 v128) + (local $2 v128) + (local $3 v128) + (local $4 v128) + (local $5 v128) + (local $6 v128) + (local $7 i32) + v128.const i32x4 0x00020001 0x00040003 0x00060005 0x7fff0007 + local.set $0 + local.get $0 + v128.const i32x4 0x00020001 0x00040003 0x00060005 0x7fff0007 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 268 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i16x8.splat + local.set $1 + local.get $1 + v128.const i32x4 0x00010001 0x00010001 0x00010001 0x00010001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 270 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i16x8.add + local.set $2 + local.get $2 + v128.const i32x4 0x00030002 0x00050004 0x00070006 0x80000008 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 272 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i16x8.sub + local.get $0 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 273 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i16x8.mul + local.get $2 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 274 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 + v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 + i16x8.min_s + v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 + v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 + i16x8.min_u + v128.const i32x4 0x00000000 0x00007fff 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 + v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 + i16x8.max_s + v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x7fff0000 0x00007fff 0x00000000 0x00000000 + v128.const i32x4 0x00008000 0x00008000 0x00000000 0x00000000 + i16x8.max_u + v128.const i32x4 0x7fff8000 0x00008000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00020001 0x00040004 0x00060005 0xffff8000 + v128.const i32x4 0x00040001 0x00040002 0x00060005 0xffff8000 + i16x8.avgr_u + v128.const i32x4 0x00030001 0x00040003 0x00060005 0xffff8000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + local.get $0 + i16x8.neg + v128.const i32x4 0xfffeffff 0xfffcfffd 0xfffafffb 0x8001fff9 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 315 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i16x8.extract_lane_s 0 + i32.extend16_s + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 320 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i16x8.extract_lane_s 7 + i32.extend16_s + i32.const -32768 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 321 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i16x8.extract_lane_u 7 + i32.const 65535 + i32.and + i32.const 32768 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 322 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 9 + i16x8.replace_lane 7 + v128.const i32x4 0x00030002 0x00050004 0x00070006 0x00090008 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 323 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + v128.const i32x4 0x00020001 0x00040003 0x00010001 0x00010001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 328 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x7fff7ffe 0x7fff7fff 0x7fff7fff 0x7fff7fff + i32.const 2 + i16x8.splat + i16x8.add_sat_s + i32.const 32767 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xfffffffe 0xffffffff 0xffffffff 0xffffffff + i32.const 2 + i16x8.splat + i16x8.add_sat_u + i32.const -1 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80008001 0x80008000 0x80008000 0x80008000 + i32.const 2 + i16x8.splat + i16x8.sub_sat_s + i32.const -32768 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + i32.const 2 + i16x8.splat + i16x8.sub_sat_u + i32.const 0 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i16x8.splat + i32.const 1 + i16x8.shl + i32.const 2 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -2 + i16x8.splat + i32.const 1 + i16x8.shr_s + i32.const -1 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i16x8.splat + i32.const 1 + i16x8.shr_u + i32.const 32767 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.any_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + i32.const 1 + i16x8.splat + i16x8.all_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + i32.const 0 + i16x8.splat + i32.const 1 + i16x8.replace_lane 0 + local.set $3 + i32.const 0 + i16x8.splat + i32.const -1 + i16x8.replace_lane 0 + local.set $4 + local.get $4 + local.set $5 + local.get $4 + v128.not + local.set $6 + local.get $4 + local.get $3 + i16x8.eq + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 366 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i16x8.ne + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 367 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i16x8.lt_s + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 368 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i16x8.lt_u + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 369 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i16x8.le_s + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 370 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i16x8.le_u + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 371 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i16x8.gt_s + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 372 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i16x8.gt_u + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 373 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i16x8.ge_s + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 374 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i16x8.ge_u + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 375 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/builtins/i32.MAX_VALUE + i32x4.splat + global.get $~lib/builtins/i32.MAX_VALUE + i32x4.splat + i16x8.narrow_i32x4_s + global.get $~lib/builtins/i16.MAX_VALUE + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + global.get $~lib/builtins/i32.MAX_VALUE + i32x4.splat + global.get $~lib/builtins/i32.MAX_VALUE + i32x4.splat + i16x8.narrow_i32x4_u + global.get $~lib/builtins/u16.MAX_VALUE + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i8x16.splat + i32.const 0 + i8x16.replace_lane 8 + i16x8.extend_low_i8x16_s + i32.const -1 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i8x16.splat + i32.const 0 + i8x16.replace_lane 8 + i16x8.extend_low_i8x16_u + i32.const 255 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i8x16.splat + i32.const 0 + i8x16.replace_lane 0 + i16x8.extend_high_i8x16_s + i32.const -1 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i8x16.splat + i32.const 0 + i8x16.replace_lane 0 + i16x8.extend_high_i8x16_u + i32.const 255 + i16x8.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 382 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $7 + local.get $7 + i32.const 1 + i32.store8 + local.get $7 + i32.const 2 + i32.store8 offset=1 + local.get $7 + i32.const 3 + i32.store8 offset=2 + local.get $7 + i32.const 4 + i32.store8 offset=3 + local.get $7 + i32.const 5 + i32.store8 offset=4 + local.get $7 + i32.const 6 + i32.store8 offset=5 + local.get $7 + i32.const 7 + i32.store8 offset=6 + local.get $7 + i32.const -1 + i32.store8 offset=7 + local.get $7 + v128.load8x8_s align=1 + v128.const i32x4 0x00020001 0x00040003 0x00060005 0xffff0007 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 397 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $7 + v128.load8x8_u align=1 + v128.const i32x4 0x00020001 0x00040003 0x00060005 0x00ff0007 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $7 + call $~lib/rt/tlsf/__free + v128.const i32x4 0xc001ffff 0xffff7ffd 0xffff8000 0x8000bfff + v128.const i32x4 0xc000ffff 0x80000001 0x00018000 0xfff6c000 + i16x8.q15mulr_sat_s + v128.const i32x4 0x20000000 0x00010001 0x00007fff 0x000a2001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + local.get $0 + i16x8.extadd_pairwise_i8x16_s + drop + local.get $0 + i16x8.extadd_pairwise_i8x16_u + drop + local.get $0 + local.get $0 + i16x8.extmul_low_i8x16_s + drop + local.get $0 + local.get $0 + i16x8.extmul_low_i8x16_u + drop + local.get $0 + local.get $0 + i16x8.extmul_high_i8x16_s + drop + local.get $0 + local.get $0 + i16x8.extmul_high_i8x16_u + drop + ) + (func $simd/test_i32x4 + (local $0 v128) + (local $1 v128) + (local $2 v128) + (local $3 v128) + (local $4 v128) + (local $5 v128) + (local $6 v128) + (local $7 i32) + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x7fffffff + local.set $0 + local.get $0 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x7fffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 425 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32x4.splat + local.set $1 + local.get $1 + v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 427 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32x4.add + local.set $2 + local.get $2 + v128.const i32x4 0x00000002 0x00000003 0x00000004 0x80000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 429 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i32x4.sub + local.get $0 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 430 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i32x4.mul + local.get $2 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 431 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 + v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 + i32x4.min_s + v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 + v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 + i32x4.min_u + v128.const i32x4 0x00000000 0x00000000 0x7fffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 + v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 + i32x4.max_s + v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x7fffffff 0x7fffffff 0x00000000 + v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 + i32x4.max_u + v128.const i32x4 0x80000000 0x7fffffff 0x80000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00020001 0x00040003 0x0003ffff 0x00000000 + v128.const i32x4 0x00060005 0x00080007 0xffff0002 0x00000000 + i32x4.dot_i16x8_s + v128.const i32x4 0x00000011 0x00000035 0xfffffffb 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + local.get $0 + i32x4.neg + v128.const i32x4 0xffffffff 0xfffffffe 0xfffffffd 0x80000001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 472 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32x4.extract_lane 0 + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 477 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32x4.extract_lane 3 + i32.const -2147483648 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 478 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 5 + i32x4.replace_lane 3 + v128.const i32x4 0x00000002 0x00000003 0x00000004 0x00000005 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 479 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + v128.const i32x4 0x00000001 0x00000002 0x00000001 0x00000001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 484 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.shl + i32.const 2 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -2 + i32x4.splat + i32.const 1 + i32x4.shr_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i32x4.splat + i32.const 1 + i32x4.shr_u + i32.const 2147483647 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.any_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + i32.const 1 + i32x4.splat + i32x4.all_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + i32.const 0 + i32x4.splat + i32.const 1 + i32x4.replace_lane 0 + local.set $3 + i32.const 0 + i32x4.splat + i32.const -1 + i32x4.replace_lane 0 + local.set $4 + local.get $4 + local.set $5 + local.get $4 + v128.not + local.set $6 + local.get $4 + local.get $3 + i32x4.eq + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 498 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i32x4.ne + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 499 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i32x4.lt_s + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 500 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32x4.lt_u + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 501 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32x4.le_s + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 502 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i32x4.le_u + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 503 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32x4.gt_s + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 504 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i32x4.gt_u + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 505 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $3 + i32x4.ge_s + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 506 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $4 + i32x4.ge_u + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 507 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const -1.5 + f32x4.splat + i32x4.trunc_sat_f32x4_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + f32.const -1.5 + f32x4.splat + i32x4.trunc_sat_f32x4_u + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i16x8.splat + i32.const 0 + i16x8.replace_lane 4 + i32x4.extend_low_i16x8_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i16x8.splat + i32.const 0 + i16x8.replace_lane 4 + i32x4.extend_low_i16x8_u + i32.const 65535 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i16x8.splat + i32.const 0 + i16x8.replace_lane 0 + i32x4.extend_high_i16x8_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i16x8.splat + i32.const 0 + i16x8.replace_lane 0 + i32x4.extend_high_i16x8_u + i32.const 65535 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 522 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $7 + local.get $7 + i32.const 1 + i32.store16 + local.get $7 + i32.const 2 + i32.store16 offset=2 + local.get $7 + i32.const 3 + i32.store16 offset=4 + local.get $7 + i32.const -1 + i32.store16 offset=6 + local.get $7 + v128.load16x4_s align=2 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 533 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $7 + v128.load16x4_u align=2 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x0000ffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 538 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $7 + call $~lib/rt/tlsf/__free + local.get $0 + i32x4.extadd_pairwise_i16x8_s + drop + local.get $0 + i32x4.extadd_pairwise_i16x8_u + drop + local.get $0 + i32x4.trunc_sat_f64x2_s_zero + drop + local.get $0 + i32x4.trunc_sat_f64x2_u_zero + drop + local.get $0 + local.get $0 + i32x4.extmul_low_i16x8_s + drop + local.get $0 + local.get $0 + i32x4.extmul_low_i16x8_u + drop + local.get $0 + local.get $0 + i32x4.extmul_high_i16x8_s + drop + local.get $0 + local.get $0 + i32x4.extmul_high_i16x8_u + drop + ) + (func $simd/test_i64x2 + (local $0 v128) + (local $1 v128) + (local $2 v128) + (local $3 i32) + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x7fffffff + local.set $0 + local.get $0 + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x7fffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 559 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1 + i64x2.splat + local.set $1 + local.get $1 + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 561 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i64x2.add + local.set $2 + local.get $2 + v128.const i32x4 0x00000002 0x00000000 0x00000000 0x80000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 563 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i64x2.sub + local.get $0 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 564 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + i64x2.mul + local.get $2 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 565 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i64x2.neg + v128.const i32x4 0xffffffff 0xffffffff 0x00000001 0x80000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 566 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i64x2.extract_lane 0 + i64.const 2 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 571 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i64x2.extract_lane 1 + i64.const -9223372036854775808 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 572 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i64.const 3 + i64x2.replace_lane 1 + v128.const i32x4 0x00000002 0x00000000 0x00000003 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 573 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 578 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1 + i64x2.splat + i32.const 1 + i64x2.shl + i64.const 2 + i64x2.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i64.const -2 + i64x2.splat + i32.const 1 + i64x2.shr_s + i64.const -1 + i64x2.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i64.const -1 + i64x2.splat + i32.const 1 + i64x2.shr_u + i64.const 9223372036854775807 + i64x2.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.any_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + i64.const 1 + i64x2.splat + i64x2.all_true + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $3 + local.get $3 + i32.const 1 + i32.store + local.get $3 + i32.const -1 + i32.store offset=4 + local.get $3 + v128.load32x2_s align=4 + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 592 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + v128.load32x2_u align=4 + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 597 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + call $~lib/rt/tlsf/__free + local.get $0 + local.get $0 + i64x2.extmul_low_i32x4_s + drop + local.get $0 + local.get $0 + i64x2.extmul_low_i32x4_u + drop + local.get $0 + local.get $0 + i64x2.extmul_high_i32x4_s + drop + local.get $0 + local.get $0 + i64x2.extmul_high_i32x4_u + drop + ) + (func $simd/test_f32x4 + (local $0 v128) + (local $1 v128) + (local $2 v128) + (local $3 v128) + (local $4 v128) + (local $5 v128) + (local $6 v128) + (local $7 v128) + v128.const i32x4 0x3fc00000 0x40200000 0x40600000 0x40900000 + local.set $0 + local.get $0 + v128.const i32x4 0x3fc00000 0x40200000 0x40600000 0x40900000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 613 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 1 + f32x4.splat + local.set $1 + local.get $1 + v128.const i32x4 0x3f800000 0x3f800000 0x3f800000 0x3f800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 615 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + f32x4.add + local.set $2 + local.get $2 + v128.const i32x4 0x40200000 0x40600000 0x40900000 0x40b00000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 617 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + f32x4.sub + local.get $0 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 618 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + f32x4.mul + local.get $2 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 619 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $0 + f32x4.mul + local.set $3 + local.get $3 + local.get $0 + f32x4.div + local.get $0 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 621 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $0 + f32x4.mul + local.get $0 + i8x16.ne + v128.any_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 622 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + f32x4.neg + v128.const i32x4 0xbfc00000 0xc0200000 0xc0600000 0xc0900000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 623 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + f32x4.extract_lane 0 + f32.const 2.5 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 624 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + f32x4.extract_lane 3 + f32.const 5.5 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 625 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + f32.const 6.5 + f32x4.replace_lane 3 + v128.const i32x4 0x40200000 0x40600000 0x40900000 0x40d00000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 626 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + v128.const i32x4 0x3fc00000 0x40200000 0x3f800000 0x3f800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 631 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + f32x4.splat + f32.const 1 + f32x4.replace_lane 0 + local.set $4 + f32.const 0 + f32x4.splat + f32.const -1 + f32x4.replace_lane 0 + local.set $5 + v128.const i32x4 0xffffffff 0x00000000 0x00000000 0x00000000 + local.set $6 + v128.const i32x4 0x00000000 0xffffffff 0xffffffff 0xffffffff + local.set $7 + local.get $5 + local.get $4 + f32x4.eq + local.get $7 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 640 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f32x4.ne + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 641 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f32x4.lt + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 642 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $5 + f32x4.le + local.get $7 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 643 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $5 + f32x4.gt + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 644 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f32x4.ge + local.get $7 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 645 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f32x4.min + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 646 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f32x4.max + local.get $4 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 647 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + f32x4.abs + local.get $4 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 648 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x40800000 0x41100000 0x41800000 0x41c80000 + f32x4.sqrt + v128.const i32x4 0x40000000 0x40400000 0x40800000 0x40a00000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i32x4.splat + f32x4.convert_i32x4_s + f32.const -1 + f32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i32x4.splat + f32x4.convert_i32x4_u + f32.const 4294967296 + f32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + local.get $0 + f32x4.demote_f64x2_zero + drop + ) + (func $simd/test_f64x2 + (local $0 v128) + (local $1 v128) + (local $2 v128) + (local $3 v128) + (local $4 v128) + (local $5 v128) + (local $6 v128) + (local $7 v128) + v128.const i32x4 0x00000000 0x3ff80000 0x00000000 0x40040000 + local.set $0 + local.get $0 + v128.const i32x4 0x00000000 0x3ff80000 0x00000000 0x40040000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 667 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 1 + f64x2.splat + local.set $1 + local.get $1 + v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x3ff00000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 669 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + f64x2.add + local.set $2 + local.get $2 + v128.const i32x4 0x00000000 0x40040000 0x00000000 0x400c0000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 671 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + f64x2.sub + local.get $0 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 672 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $1 + f64x2.mul + local.get $2 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 673 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $0 + f64x2.mul + local.set $3 + local.get $3 + local.get $0 + f64x2.div + local.get $0 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 675 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $0 + f64x2.mul + local.get $0 + i8x16.ne + v128.any_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 676 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + f64x2.neg + v128.const i32x4 0x00000000 0xbff80000 0x00000000 0xc0040000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 677 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + f64x2.extract_lane 0 + f64.const 2.5 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 678 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + f64x2.extract_lane 1 + f64.const 3.5 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 679 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + f64.const 4.5 + f64x2.replace_lane 1 + v128.const i32x4 0x00000000 0x40040000 0x00000000 0x40120000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 680 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i8x16.shuffle 0 1 2 3 4 5 6 7 24 25 26 27 28 29 30 31 + v128.const i32x4 0x00000000 0x3ff80000 0x00000000 0x3ff00000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 685 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + f64x2.splat + f64.const 1 + f64x2.replace_lane 0 + local.set $4 + f64.const 0 + f64x2.splat + f64.const -1 + f64x2.replace_lane 0 + local.set $5 + v128.const i32x4 0xffffffff 0xffffffff 0x00000000 0x00000000 + local.set $6 + v128.const i32x4 0x00000000 0x00000000 0xffffffff 0xffffffff + local.set $7 + local.get $5 + local.get $4 + f64x2.eq + local.get $7 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 694 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f64x2.ne + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 695 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f64x2.lt + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 696 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $5 + f64x2.le + local.get $7 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 697 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $5 + f64x2.gt + local.get $6 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 698 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f64x2.ge + local.get $7 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 699 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f64x2.min + local.get $5 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 700 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + local.get $4 + f64x2.max + local.get $4 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 701 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + f64x2.abs + local.get $4 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 702 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x00000000 0x40100000 0x00000000 0x40220000 + f64x2.sqrt + v128.const i32x4 0x00000000 0x40000000 0x00000000 0x40080000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + local.get $0 + f64x2.convert_low_i32x4_s + drop + local.get $0 + f64x2.convert_low_i32x4_u + drop + local.get $0 + f64x2.promote_low_f32x4 + drop + ) + (func $simd/test_const (result v128) + (local $0 v128) + v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 + local.set $0 + local.get $0 + ) + (func $start:simd + i32.const 1 + drop + call $simd/test_v128 + call $simd/test_i8x16 + call $simd/test_i16x8 + call $simd/test_i32x4 + call $simd/test_i64x2 + call $simd/test_f32x4 + call $simd/test_f64x2 + call $simd/test_const + drop + ) + (func $simd/test_vars_i8x16_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) + v128.const i32x4 0x03000100 0x07000504 0x0b0a0908 0x000e0d0c + local.get $0 + i8x16.replace_lane 2 + local.get $1 + i8x16.replace_lane 6 + local.get $2 + i8x16.replace_lane 15 + ) + (func $simd/test_vars_i8x16_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (param $12 i32) (param $13 i32) (param $14 i32) (param $15 i32) (result v128) + local.get $0 + i8x16.splat + local.get $1 + i8x16.replace_lane 1 + local.get $2 + i8x16.replace_lane 2 + local.get $3 + i8x16.replace_lane 3 + local.get $4 + i8x16.replace_lane 4 + local.get $5 + i8x16.replace_lane 5 + local.get $6 + i8x16.replace_lane 6 + local.get $7 + i8x16.replace_lane 7 + local.get $8 + i8x16.replace_lane 8 + local.get $9 + i8x16.replace_lane 9 + local.get $10 + i8x16.replace_lane 10 + local.get $11 + i8x16.replace_lane 11 + local.get $12 + i8x16.replace_lane 12 + local.get $13 + i8x16.replace_lane 13 + local.get $14 + i8x16.replace_lane 14 + local.get $15 + i8x16.replace_lane 15 + ) + (func $simd/test_vars_i16x8_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) + v128.const i32x4 0x00010000 0x00030000 0x00050000 0x00000006 + local.get $0 + i16x8.replace_lane 2 + local.get $1 + i16x8.replace_lane 4 + local.get $2 + i16x8.replace_lane 7 + ) + (func $simd/test_vars_i16x8_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result v128) + local.get $0 + i16x8.splat + local.get $1 + i16x8.replace_lane 1 + local.get $2 + i16x8.replace_lane 2 + local.get $3 + i16x8.replace_lane 3 + local.get $4 + i16x8.replace_lane 4 + local.get $5 + i16x8.replace_lane 5 + local.get $6 + i16x8.replace_lane 6 + local.get $7 + i16x8.replace_lane 7 + ) + (func $simd/test_vars_i32x4_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.get $0 + i32x4.replace_lane 1 + local.get $1 + i32x4.replace_lane 2 + local.get $2 + i32x4.replace_lane 3 + ) + (func $simd/test_vars_i32x4_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result v128) + local.get $0 + i32x4.splat + local.get $1 + i32x4.replace_lane 1 + local.get $2 + i32x4.replace_lane 2 + local.get $3 + i32x4.replace_lane 3 + ) + (func $simd/test_vars_i64x2_partial (param $0 i64) (result v128) + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.get $0 + i64x2.replace_lane 1 + ) + (func $simd/test_vars_i64x2_full (param $0 i64) (param $1 i64) (result v128) + local.get $0 + i64x2.splat + local.get $1 + i64x2.replace_lane 1 + ) + (func $simd/test_vars_f32x4_partial (param $0 f32) (param $1 f32) (param $2 f32) (result v128) + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.get $0 + f32x4.replace_lane 1 + local.get $1 + f32x4.replace_lane 2 + local.get $2 + f32x4.replace_lane 3 + ) + (func $simd/test_vars_f32x4_full (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (result v128) + local.get $0 + f32x4.splat + local.get $1 + f32x4.replace_lane 1 + local.get $2 + f32x4.replace_lane 2 + local.get $3 + f32x4.replace_lane 3 + ) + (func $simd/test_vars_f64x2_partial (param $0 f64) (result v128) + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.get $0 + f64x2.replace_lane 1 + ) + (func $simd/test_vars_f64x2_full (param $0 f64) (param $1 f64) (result v128) + local.get $0 + f64x2.splat + local.get $1 + f64x2.replace_lane 1 + ) + (func $~start + call $start:simd + ) +) diff --git a/tests/compiler/simd.release.wat b/tests/compiler/simd.release.wat index 54979cce39..56380800b2 100644 --- a/tests/compiler/simd.release.wat +++ b/tests/compiler/simd.release.wat @@ -1362,7 +1362,7 @@ if i32.const 0 i32.const 1184 - i32.const 392 + i32.const 397 i32.const 5 call $~lib/builtins/abort unreachable @@ -1376,7 +1376,7 @@ if i32.const 0 i32.const 1184 - i32.const 397 + i32.const 402 i32.const 5 call $~lib/builtins/abort unreachable @@ -1414,7 +1414,7 @@ if i32.const 0 i32.const 1184 - i32.const 523 + i32.const 533 i32.const 5 call $~lib/builtins/abort unreachable @@ -1428,7 +1428,7 @@ if i32.const 0 i32.const 1184 - i32.const 528 + i32.const 538 i32.const 5 call $~lib/builtins/abort unreachable @@ -1460,7 +1460,7 @@ if i32.const 0 i32.const 1184 - i32.const 582 + i32.const 592 i32.const 5 call $~lib/builtins/abort unreachable @@ -1474,7 +1474,7 @@ if i32.const 0 i32.const 1184 - i32.const 587 + i32.const 597 i32.const 5 call $~lib/builtins/abort unreachable From db3663ccdaa3b50db2b44b8c273573574d8ba181 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 12 Jul 2022 14:17:10 +0300 Subject: [PATCH 3/4] add swizzle alias test --- tests/compiler/simd.debug.wat | 177 ++++++++++++++++++-------------- tests/compiler/simd.release.wat | 12 +-- tests/compiler/simd.ts | 5 + 3 files changed, 109 insertions(+), 85 deletions(-) diff --git a/tests/compiler/simd.debug.wat b/tests/compiler/simd.debug.wat index 32a41930fb..508b584a48 100644 --- a/tests/compiler/simd.debug.wat +++ b/tests/compiler/simd.debug.wat @@ -2896,6 +2896,25 @@ call $~lib/builtins/abort unreachable end + local.get $0 + local.get $1 + i8x16.swizzle + local.get $0 + local.get $1 + i8x16.swizzle + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 387 + i32.const 3 + call $~lib/builtins/abort + unreachable + end i32.const 16 call $~lib/rt/tlsf/__alloc local.set $7 @@ -2934,7 +2953,7 @@ if i32.const 0 i32.const 160 - i32.const 397 + i32.const 402 i32.const 5 call $~lib/builtins/abort unreachable @@ -2950,7 +2969,7 @@ if i32.const 0 i32.const 160 - i32.const 402 + i32.const 407 i32.const 5 call $~lib/builtins/abort unreachable @@ -3010,7 +3029,7 @@ if i32.const 0 i32.const 160 - i32.const 425 + i32.const 430 i32.const 3 call $~lib/builtins/abort unreachable @@ -3028,7 +3047,7 @@ if i32.const 0 i32.const 160 - i32.const 427 + i32.const 432 i32.const 3 call $~lib/builtins/abort unreachable @@ -3047,7 +3066,7 @@ if i32.const 0 i32.const 160 - i32.const 429 + i32.const 434 i32.const 3 call $~lib/builtins/abort unreachable @@ -3064,7 +3083,7 @@ if i32.const 0 i32.const 160 - i32.const 430 + i32.const 435 i32.const 3 call $~lib/builtins/abort unreachable @@ -3081,7 +3100,7 @@ if i32.const 0 i32.const 160 - i32.const 431 + i32.const 436 i32.const 3 call $~lib/builtins/abort unreachable @@ -3142,7 +3161,7 @@ if i32.const 0 i32.const 160 - i32.const 472 + i32.const 477 i32.const 3 call $~lib/builtins/abort unreachable @@ -3155,7 +3174,7 @@ if i32.const 0 i32.const 160 - i32.const 477 + i32.const 482 i32.const 3 call $~lib/builtins/abort unreachable @@ -3168,7 +3187,7 @@ if i32.const 0 i32.const 160 - i32.const 478 + i32.const 483 i32.const 3 call $~lib/builtins/abort unreachable @@ -3185,7 +3204,7 @@ if i32.const 0 i32.const 160 - i32.const 479 + i32.const 484 i32.const 3 call $~lib/builtins/abort unreachable @@ -3202,7 +3221,7 @@ if i32.const 0 i32.const 160 - i32.const 484 + i32.const 489 i32.const 3 call $~lib/builtins/abort unreachable @@ -3282,7 +3301,7 @@ if i32.const 0 i32.const 160 - i32.const 498 + i32.const 503 i32.const 3 call $~lib/builtins/abort unreachable @@ -3299,7 +3318,7 @@ if i32.const 0 i32.const 160 - i32.const 499 + i32.const 504 i32.const 3 call $~lib/builtins/abort unreachable @@ -3316,7 +3335,7 @@ if i32.const 0 i32.const 160 - i32.const 500 + i32.const 505 i32.const 3 call $~lib/builtins/abort unreachable @@ -3333,7 +3352,7 @@ if i32.const 0 i32.const 160 - i32.const 501 + i32.const 506 i32.const 3 call $~lib/builtins/abort unreachable @@ -3350,7 +3369,7 @@ if i32.const 0 i32.const 160 - i32.const 502 + i32.const 507 i32.const 3 call $~lib/builtins/abort unreachable @@ -3367,7 +3386,7 @@ if i32.const 0 i32.const 160 - i32.const 503 + i32.const 508 i32.const 3 call $~lib/builtins/abort unreachable @@ -3384,7 +3403,7 @@ if i32.const 0 i32.const 160 - i32.const 504 + i32.const 509 i32.const 3 call $~lib/builtins/abort unreachable @@ -3401,7 +3420,7 @@ if i32.const 0 i32.const 160 - i32.const 505 + i32.const 510 i32.const 3 call $~lib/builtins/abort unreachable @@ -3418,7 +3437,7 @@ if i32.const 0 i32.const 160 - i32.const 506 + i32.const 511 i32.const 3 call $~lib/builtins/abort unreachable @@ -3435,7 +3454,7 @@ if i32.const 0 i32.const 160 - i32.const 507 + i32.const 512 i32.const 3 call $~lib/builtins/abort unreachable @@ -3522,7 +3541,7 @@ if i32.const 0 i32.const 160 - i32.const 522 + i32.const 527 i32.const 3 call $~lib/builtins/abort unreachable @@ -3553,7 +3572,7 @@ if i32.const 0 i32.const 160 - i32.const 533 + i32.const 538 i32.const 5 call $~lib/builtins/abort unreachable @@ -3569,7 +3588,7 @@ if i32.const 0 i32.const 160 - i32.const 538 + i32.const 543 i32.const 5 call $~lib/builtins/abort unreachable @@ -3622,7 +3641,7 @@ if i32.const 0 i32.const 160 - i32.const 559 + i32.const 564 i32.const 3 call $~lib/builtins/abort unreachable @@ -3640,7 +3659,7 @@ if i32.const 0 i32.const 160 - i32.const 561 + i32.const 566 i32.const 3 call $~lib/builtins/abort unreachable @@ -3659,7 +3678,7 @@ if i32.const 0 i32.const 160 - i32.const 563 + i32.const 568 i32.const 3 call $~lib/builtins/abort unreachable @@ -3676,7 +3695,7 @@ if i32.const 0 i32.const 160 - i32.const 564 + i32.const 569 i32.const 3 call $~lib/builtins/abort unreachable @@ -3693,7 +3712,7 @@ if i32.const 0 i32.const 160 - i32.const 565 + i32.const 570 i32.const 3 call $~lib/builtins/abort unreachable @@ -3709,7 +3728,7 @@ if i32.const 0 i32.const 160 - i32.const 566 + i32.const 571 i32.const 3 call $~lib/builtins/abort unreachable @@ -3722,7 +3741,7 @@ if i32.const 0 i32.const 160 - i32.const 571 + i32.const 576 i32.const 3 call $~lib/builtins/abort unreachable @@ -3735,7 +3754,7 @@ if i32.const 0 i32.const 160 - i32.const 572 + i32.const 577 i32.const 3 call $~lib/builtins/abort unreachable @@ -3752,7 +3771,7 @@ if i32.const 0 i32.const 160 - i32.const 573 + i32.const 578 i32.const 3 call $~lib/builtins/abort unreachable @@ -3769,7 +3788,7 @@ if i32.const 0 i32.const 160 - i32.const 578 + i32.const 583 i32.const 3 call $~lib/builtins/abort unreachable @@ -3842,7 +3861,7 @@ if i32.const 0 i32.const 160 - i32.const 592 + i32.const 597 i32.const 5 call $~lib/builtins/abort unreachable @@ -3858,7 +3877,7 @@ if i32.const 0 i32.const 160 - i32.const 597 + i32.const 602 i32.const 5 call $~lib/builtins/abort unreachable @@ -3903,7 +3922,7 @@ if i32.const 0 i32.const 160 - i32.const 613 + i32.const 618 i32.const 3 call $~lib/builtins/abort unreachable @@ -3921,7 +3940,7 @@ if i32.const 0 i32.const 160 - i32.const 615 + i32.const 620 i32.const 3 call $~lib/builtins/abort unreachable @@ -3940,7 +3959,7 @@ if i32.const 0 i32.const 160 - i32.const 617 + i32.const 622 i32.const 3 call $~lib/builtins/abort unreachable @@ -3957,7 +3976,7 @@ if i32.const 0 i32.const 160 - i32.const 618 + i32.const 623 i32.const 3 call $~lib/builtins/abort unreachable @@ -3974,7 +3993,7 @@ if i32.const 0 i32.const 160 - i32.const 619 + i32.const 624 i32.const 3 call $~lib/builtins/abort unreachable @@ -3995,7 +4014,7 @@ if i32.const 0 i32.const 160 - i32.const 621 + i32.const 626 i32.const 3 call $~lib/builtins/abort unreachable @@ -4012,7 +4031,7 @@ if i32.const 0 i32.const 160 - i32.const 622 + i32.const 627 i32.const 3 call $~lib/builtins/abort unreachable @@ -4028,7 +4047,7 @@ if i32.const 0 i32.const 160 - i32.const 623 + i32.const 628 i32.const 3 call $~lib/builtins/abort unreachable @@ -4041,7 +4060,7 @@ if i32.const 0 i32.const 160 - i32.const 624 + i32.const 629 i32.const 3 call $~lib/builtins/abort unreachable @@ -4054,7 +4073,7 @@ if i32.const 0 i32.const 160 - i32.const 625 + i32.const 630 i32.const 3 call $~lib/builtins/abort unreachable @@ -4071,7 +4090,7 @@ if i32.const 0 i32.const 160 - i32.const 626 + i32.const 631 i32.const 3 call $~lib/builtins/abort unreachable @@ -4088,7 +4107,7 @@ if i32.const 0 i32.const 160 - i32.const 631 + i32.const 636 i32.const 3 call $~lib/builtins/abort unreachable @@ -4119,7 +4138,7 @@ if i32.const 0 i32.const 160 - i32.const 640 + i32.const 645 i32.const 3 call $~lib/builtins/abort unreachable @@ -4136,7 +4155,7 @@ if i32.const 0 i32.const 160 - i32.const 641 + i32.const 646 i32.const 3 call $~lib/builtins/abort unreachable @@ -4153,7 +4172,7 @@ if i32.const 0 i32.const 160 - i32.const 642 + i32.const 647 i32.const 3 call $~lib/builtins/abort unreachable @@ -4170,7 +4189,7 @@ if i32.const 0 i32.const 160 - i32.const 643 + i32.const 648 i32.const 3 call $~lib/builtins/abort unreachable @@ -4187,7 +4206,7 @@ if i32.const 0 i32.const 160 - i32.const 644 + i32.const 649 i32.const 3 call $~lib/builtins/abort unreachable @@ -4204,7 +4223,7 @@ if i32.const 0 i32.const 160 - i32.const 645 + i32.const 650 i32.const 3 call $~lib/builtins/abort unreachable @@ -4221,7 +4240,7 @@ if i32.const 0 i32.const 160 - i32.const 646 + i32.const 651 i32.const 3 call $~lib/builtins/abort unreachable @@ -4238,7 +4257,7 @@ if i32.const 0 i32.const 160 - i32.const 647 + i32.const 652 i32.const 3 call $~lib/builtins/abort unreachable @@ -4254,7 +4273,7 @@ if i32.const 0 i32.const 160 - i32.const 648 + i32.const 653 i32.const 3 call $~lib/builtins/abort unreachable @@ -4312,7 +4331,7 @@ if i32.const 0 i32.const 160 - i32.const 667 + i32.const 672 i32.const 3 call $~lib/builtins/abort unreachable @@ -4330,7 +4349,7 @@ if i32.const 0 i32.const 160 - i32.const 669 + i32.const 674 i32.const 3 call $~lib/builtins/abort unreachable @@ -4349,7 +4368,7 @@ if i32.const 0 i32.const 160 - i32.const 671 + i32.const 676 i32.const 3 call $~lib/builtins/abort unreachable @@ -4366,7 +4385,7 @@ if i32.const 0 i32.const 160 - i32.const 672 + i32.const 677 i32.const 3 call $~lib/builtins/abort unreachable @@ -4383,7 +4402,7 @@ if i32.const 0 i32.const 160 - i32.const 673 + i32.const 678 i32.const 3 call $~lib/builtins/abort unreachable @@ -4404,7 +4423,7 @@ if i32.const 0 i32.const 160 - i32.const 675 + i32.const 680 i32.const 3 call $~lib/builtins/abort unreachable @@ -4421,7 +4440,7 @@ if i32.const 0 i32.const 160 - i32.const 676 + i32.const 681 i32.const 3 call $~lib/builtins/abort unreachable @@ -4437,7 +4456,7 @@ if i32.const 0 i32.const 160 - i32.const 677 + i32.const 682 i32.const 3 call $~lib/builtins/abort unreachable @@ -4450,7 +4469,7 @@ if i32.const 0 i32.const 160 - i32.const 678 + i32.const 683 i32.const 3 call $~lib/builtins/abort unreachable @@ -4463,7 +4482,7 @@ if i32.const 0 i32.const 160 - i32.const 679 + i32.const 684 i32.const 3 call $~lib/builtins/abort unreachable @@ -4480,7 +4499,7 @@ if i32.const 0 i32.const 160 - i32.const 680 + i32.const 685 i32.const 3 call $~lib/builtins/abort unreachable @@ -4497,7 +4516,7 @@ if i32.const 0 i32.const 160 - i32.const 685 + i32.const 690 i32.const 3 call $~lib/builtins/abort unreachable @@ -4528,7 +4547,7 @@ if i32.const 0 i32.const 160 - i32.const 694 + i32.const 699 i32.const 3 call $~lib/builtins/abort unreachable @@ -4545,7 +4564,7 @@ if i32.const 0 i32.const 160 - i32.const 695 + i32.const 700 i32.const 3 call $~lib/builtins/abort unreachable @@ -4562,7 +4581,7 @@ if i32.const 0 i32.const 160 - i32.const 696 + i32.const 701 i32.const 3 call $~lib/builtins/abort unreachable @@ -4579,7 +4598,7 @@ if i32.const 0 i32.const 160 - i32.const 697 + i32.const 702 i32.const 3 call $~lib/builtins/abort unreachable @@ -4596,7 +4615,7 @@ if i32.const 0 i32.const 160 - i32.const 698 + i32.const 703 i32.const 3 call $~lib/builtins/abort unreachable @@ -4613,7 +4632,7 @@ if i32.const 0 i32.const 160 - i32.const 699 + i32.const 704 i32.const 3 call $~lib/builtins/abort unreachable @@ -4630,7 +4649,7 @@ if i32.const 0 i32.const 160 - i32.const 700 + i32.const 705 i32.const 3 call $~lib/builtins/abort unreachable @@ -4647,7 +4666,7 @@ if i32.const 0 i32.const 160 - i32.const 701 + i32.const 706 i32.const 3 call $~lib/builtins/abort unreachable @@ -4663,7 +4682,7 @@ if i32.const 0 i32.const 160 - i32.const 702 + i32.const 707 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/simd.release.wat b/tests/compiler/simd.release.wat index 56380800b2..4384fd0d88 100644 --- a/tests/compiler/simd.release.wat +++ b/tests/compiler/simd.release.wat @@ -1362,7 +1362,7 @@ if i32.const 0 i32.const 1184 - i32.const 397 + i32.const 402 i32.const 5 call $~lib/builtins/abort unreachable @@ -1376,7 +1376,7 @@ if i32.const 0 i32.const 1184 - i32.const 402 + i32.const 407 i32.const 5 call $~lib/builtins/abort unreachable @@ -1414,7 +1414,7 @@ if i32.const 0 i32.const 1184 - i32.const 533 + i32.const 538 i32.const 5 call $~lib/builtins/abort unreachable @@ -1428,7 +1428,7 @@ if i32.const 0 i32.const 1184 - i32.const 538 + i32.const 543 i32.const 5 call $~lib/builtins/abort unreachable @@ -1460,7 +1460,7 @@ if i32.const 0 i32.const 1184 - i32.const 592 + i32.const 597 i32.const 5 call $~lib/builtins/abort unreachable @@ -1474,7 +1474,7 @@ if i32.const 0 i32.const 1184 - i32.const 597 + i32.const 602 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/simd.ts b/tests/compiler/simd.ts index 3a2c77f9a5..57a9bf540f 100644 --- a/tests/compiler/simd.ts +++ b/tests/compiler/simd.ts @@ -384,6 +384,11 @@ function test_i16x8(): void { == v128.shuffle(a, b, 0, 1, 2, 3, 12, 13, 14, 15) ); + assert( + i16x8.swizzle(a, b) + == + v128.swizzle(a, b) + ); { let ptr = __alloc(16); store(ptr, 1); From 51f06a3e6c6cf0eae5c9cff359fad2be88f0023e Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 12 Jul 2022 14:18:52 +0300 Subject: [PATCH 4/4] fix arg typo --- std/assembly/builtins.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/std/assembly/builtins.ts b/std/assembly/builtins.ts index 0be70e7818..0c3443da6f 100644 --- a/std/assembly/builtins.ts +++ b/std/assembly/builtins.ts @@ -1173,7 +1173,7 @@ export namespace v128 { // @ts-ignore: decorator @builtin - export declare function swizzle(a: v128, s: v128): v128; + export declare function swizzle(a: v128, b: v128): v128; // @ts-ignore: decorator @unsafe @builtin