diff --git a/tests/compiler/simd.debug.wat b/tests/compiler/simd.debug.wat index 5c62702d70..9c34856ad8 100644 --- a/tests/compiler/simd.debug.wat +++ b/tests/compiler/simd.debug.wat @@ -1,13 +1,15 @@ (module - (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) + (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_=>_v128 (func (param i32 i32 i32) (result v128))) + (type $i32_=>_none (func (param i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_v128 (func (param i32 i32 i32) (result v128))) (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 $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_v128 (func (param i32 i32) (result v128))) (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))) @@ -18,22 +20,47 @@ (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))) + (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (global $~lib/native/ASC_FEATURE_SIMD i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_SIMD i32 (i32.const 1)) + (global $~lib/builtins/u8.MAX_VALUE i32 (i32.const 255)) + (global $~lib/builtins/u16.MAX_VALUE i32 (i32.const 65535)) (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)) + (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) + (global $~lib/builtins/u64.MAX_VALUE i64 (i64.const -1)) + (global $~lib/rt/__rtti_base i32 (i32.const 560)) + (global $~lib/memory/__data_end i32 (i32.const 604)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16988)) + (global $~lib/memory/__heap_base i32 (i32.const 16988)) (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") + (data (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 60) "<\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 124) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 192) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 224) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 252) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data (i32.const 316) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data (i32.const 368) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 396) "<\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 460) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data (i32.const 508) ",\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") + (data (i32.const 560) "\05\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\04\00\00\00\00\00\00\02\t\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)) @@ -50,6 +77,322 @@ (export "test_vars_f64x2_full" (func $simd/test_vars_f64x2_full)) (export "memory" (memory $0)) (start $~start) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $0 i32) (result i32) + local.get $0 + local.get $0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $0 + local.get $0 + call $~lib/rt/itcms/Object#set:prev + local.get $0 + ) + (func $~lib/rt/itcms/Object#get:next (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + i32.const 3 + i32.const -1 + i32.xor + i32.and + ) + (func $~lib/rt/itcms/Object#get:color (param $0 i32) (result i32) + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + ) + (func $~lib/rt/itcms/visitRoots (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $1 + local.get $1 + call $~lib/rt/itcms/Object#get:next + local.set $2 + loop $while-continue|0 + local.get $2 + local.get $1 + i32.ne + local.set $3 + local.get $3 + if + i32.const 1 + drop + local.get $2 + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 144 + i32.const 159 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 20 + i32.add + local.get $0 + call $~lib/rt/__visit_members + local.get $2 + call $~lib/rt/itcms/Object#get:next + local.set $2 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $0 i32) (param $1 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#set:next (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $0 i32) + (local $1 i32) + (local $2 i32) + local.get $0 + call $~lib/rt/itcms/Object#get:next + local.set $1 + local.get $1 + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $0 + i32.load offset=8 + i32.const 0 + i32.eq + if (result i32) + local.get $0 + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 144 + i32.const 127 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $0 + i32.load offset=8 + local.set $2 + i32.const 1 + drop + local.get $2 + i32.eqz + if + i32.const 0 + i32.const 144 + i32.const 131 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + call $~lib/rt/itcms/Object#set:prev + local.get $2 + local.get $1 + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/__typeinfo (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/rt/__rtti_base + local.set $1 + local.get $0 + local.get $1 + i32.load + i32.gt_u + if + i32.const 272 + i32.const 336 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $0 + i32.const 8 + i32.mul + i32.add + i32.load + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + i32.load offset=12 + local.set $1 + local.get $1 + i32.const 1 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + ) + (func $~lib/rt/itcms/Object#linkTo (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + i32.load offset=8 + local.set $3 + local.get $0 + local.get $1 + local.get $2 + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $0 + local.get $3 + call $~lib/rt/itcms/Object#set:prev + local.get $3 + local.get $0 + call $~lib/rt/itcms/Object#set:next + local.get $1 + local.get $0 + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 144 + i32.const 147 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $0 + call $~lib/rt/itcms/Object#unlink + local.get $0 + global.get $~lib/rt/itcms/toSpace + local.get $0 + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.eqz + if + return + end + local.get $0 + i32.const 20 + i32.sub + local.set $2 + i32.const 0 + drop + local.get $2 + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $2 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + local.set $1 + loop $while-continue|0 + local.get $1 + global.get $~lib/memory/__heap_base + i32.lt_u + local.set $2 + local.get $2 + if + local.get $1 + i32.load + local.get $0 + call $~lib/rt/itcms/__visit + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#get:size (param $0 i32) (result i32) + i32.const 4 + local.get $0 + i32.load + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + ) (func $~lib/rt/tlsf/Root#set:flMap (param $0 i32) (param $1 i32) local.get $0 local.get $1 @@ -92,7 +435,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 268 i32.const 14 call $~lib/builtins/abort @@ -112,7 +455,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 270 i32.const 14 call $~lib/builtins/abort @@ -175,7 +518,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 284 i32.const 14 call $~lib/builtins/abort @@ -307,7 +650,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -324,7 +667,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -404,7 +747,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 221 i32.const 16 call $~lib/builtins/abort @@ -447,7 +790,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 233 i32.const 14 call $~lib/builtins/abort @@ -465,7 +808,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 234 i32.const 14 call $~lib/builtins/abort @@ -533,7 +876,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 251 i32.const 14 call $~lib/builtins/abort @@ -638,7 +981,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 377 i32.const 14 call $~lib/builtins/abort @@ -681,7 +1024,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 384 i32.const 16 call $~lib/builtins/abort @@ -714,7 +1057,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 397 i32.const 5 call $~lib/builtins/abort @@ -928,6 +1271,338 @@ local.get $3 global.set $~lib/rt/tlsf/ROOT ) + (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 416 + 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 $~lib/rt/itcms/free (param $0 i32) + local.get $0 + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $0 + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $0 + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $0 + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $0 + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + local.set $2 + local.get $2 + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $0 + call $~lib/rt/itcms/Object#get:color + local.get $1 + i32.ne + if + local.get $0 + local.get $1 + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $0 + call $~lib/rt/itcms/Object#get:next + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $0 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + local.set $2 + local.get $2 + if + local.get $0 + call $~lib/rt/itcms/Object#get:color + local.get $1 + i32.ne + if + local.get $0 + local.get $1 + call $~lib/rt/itcms/Object#set:color + local.get $0 + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $0 + call $~lib/rt/itcms/Object#get:next + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $2 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $2 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $2 + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $0 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $0 + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 144 + i32.const 228 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + ) + (func $~lib/rt/itcms/interrupt + (local $0 i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $0 + loop $do-loop|0 + local.get $0 + call $~lib/rt/itcms/step + i32.sub + local.set $0 + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i32.const 200 + i64.extend_i32_u + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $0 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) (func $~lib/rt/tlsf/computeSize (param $0 i32) (result i32) local.get $0 i32.const 12 @@ -953,8 +1628,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 96 - i32.const 32 + i32.const 80 + i32.const 416 i32.const 458 i32.const 29 call $~lib/builtins/abort @@ -1038,7 +1713,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 330 i32.const 14 call $~lib/builtins/abort @@ -1103,7 +1778,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 343 i32.const 18 call $~lib/builtins/abort @@ -1254,7 +1929,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 357 i32.const 14 call $~lib/builtins/abort @@ -1363,7 +2038,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 496 i32.const 16 call $~lib/builtins/abort @@ -1383,7 +2058,7 @@ i32.eqz if i32.const 0 - i32.const 32 + i32.const 416 i32.const 498 i32.const 14 call $~lib/builtins/abort @@ -1412,72 +2087,176 @@ i32.const 4 i32.add ) - (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/rt/itcms/Object#set:rtId (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 80 + i32.const 144 + i32.const 260 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 local.get $0 + i32.add + call $~lib/rt/tlsf/__alloc i32.const 4 i32.sub - local.set $1 + local.set $2 + local.get $2 + local.get $1 + call $~lib/rt/itcms/Object#set:rtId + local.get $2 local.get $0 + call $~lib/rt/itcms/Object#set:rtSize + local.get $2 + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $2 + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.set $3 + local.get $3 i32.const 0 - i32.ne - if (result i32) + local.get $0 + memory.fill + local.get $3 + ) + (func $~lib/rt/__newBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + local.get $0 + local.get $1 + call $~lib/rt/itcms/__new + local.set $3 + local.get $2 + if + local.get $3 + local.get $2 local.get $0 - i32.const 15 - i32.and - i32.eqz - else - i32.const 0 + memory.copy end - if (result i32) - local.get $1 - i32.load - i32.const 1 - i32.and - i32.eqz - else - i32.const 0 + local.get $3 + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.eqz + if + return end + i32.const 1 + drop + local.get $0 i32.eqz if i32.const 0 - i32.const 32 - i32.const 559 - i32.const 3 + i32.const 144 + i32.const 294 + i32.const 14 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 + i32.const 20 + i32.sub + local.set $3 + local.get $3 + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq if - return + local.get $0 + i32.const 20 + i32.sub + local.set $4 + local.get $4 + call $~lib/rt/itcms/Object#get:color + local.set $5 + local.get $5 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $2 + if + local.get $4 + call $~lib/rt/itcms/Object#makeGray + else + local.get $3 + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $5 + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $3 + call $~lib/rt/itcms/Object#makeGray + end + end end - global.get $~lib/rt/tlsf/ROOT - i32.eqz + ) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result v128) + (local $2 v128) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u if - call $~lib/rt/tlsf/initialize + i32.const 272 + i32.const 480 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable end - global.get $~lib/rt/tlsf/ROOT local.get $0 - call $~lib/rt/tlsf/checkUsedBlock - call $~lib/rt/tlsf/freeBlock + i32.load offset=4 + local.get $1 + i32.const 4 + i32.shl + i32.add + v128.load + local.set $2 + i32.const 0 + drop + local.get $2 ) (func $simd/test_v128 (local $0 i32) @@ -1589,8 +2368,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 67 + i32.const 528 + i32.const 71 i32.const 5 call $~lib/builtins/abort unreachable @@ -1613,8 +2392,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 77 + i32.const 528 + i32.const 81 i32.const 5 call $~lib/builtins/abort unreachable @@ -1637,8 +2416,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 87 + i32.const 528 + i32.const 91 i32.const 5 call $~lib/builtins/abort unreachable @@ -1661,8 +2440,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 97 + i32.const 528 + i32.const 101 i32.const 5 call $~lib/builtins/abort unreachable @@ -1685,8 +2464,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 107 + i32.const 528 + i32.const 111 i32.const 5 call $~lib/builtins/abort unreachable @@ -1709,8 +2488,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 117 + i32.const 528 + i32.const 121 i32.const 5 call $~lib/builtins/abort unreachable @@ -1790,8 +2569,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 173 + i32.const 528 + i32.const 177 i32.const 5 call $~lib/builtins/abort unreachable @@ -1808,8 +2587,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 175 + i32.const 528 + i32.const 179 i32.const 5 call $~lib/builtins/abort unreachable @@ -1826,8 +2605,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 179 + i32.const 528 + i32.const 183 i32.const 5 call $~lib/builtins/abort unreachable @@ -1844,8 +2623,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 181 + i32.const 528 + i32.const 185 i32.const 5 call $~lib/builtins/abort unreachable @@ -1871,14 +2650,200 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 188 + i32.const 528 + i32.const 192 i32.const 5 call $~lib/builtins/abort unreachable end local.get $2 call $~lib/rt/tlsf/__free + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i32.const 42 + i32.store + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.set $1 + local.get $0 + local.get $1 + v128.load32_lane 0 + local.set $1 + local.get $1 + 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 528 + i32.const 200 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + v128.load8_lane 0 + local.set $1 + local.get $1 + 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 528 + i32.const 202 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + v128.load16_lane 0 + local.set $1 + local.get $1 + 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 528 + i32.const 204 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + v128.load32_lane 0 + local.set $1 + local.get $1 + 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 528 + i32.const 206 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + v128.load64_lane 0 + local.set $1 + local.get $1 + 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 528 + i32.const 208 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + v128.const i32x4 0x3f8ccccd 0xbe800000 0x428c051f 0x40800000 + f32x4.ceil + local.set $1 + local.get $1 + v128.const i32x4 0x40000000 0x80000000 0x428e0000 0x40800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 213 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x3f8ccccd 0xbe800000 0x428c051f 0x40800000 + f32x4.floor + local.set $1 + local.get $1 + v128.const i32x4 0x3f800000 0xbf800000 0x428c0000 0x40800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 217 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.bitmask + i32.const 65535 + i32.eq + drop + v128.const i32x4 0x020100ff 0x06050403 0x0a090807 0x0f0d0c0b + i8x16.bitmask + i32.const 1 + i32.eq + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i16x8.bitmask + i32.const 255 + i32.eq + drop + v128.const i32x4 0x0000ffff 0x00020001 0x000c000b 0x000f000d + i16x8.bitmask + i32.const 1 + i32.eq + drop + v128.const i32x4 0x00000001 0xffffffff 0x00000001 0xffffffff + i32x4.bitmask + i32.const 10 + i32.eq + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i32x4.bitmask + i32.const 15 + i32.eq + drop + v128.const i32x4 0xffffffff 0x00000000 0x00000001 0x0000000f + i32x4.bitmask + i32.const 1 + i32.eq + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i64x2.bitmask + i32.const 3 + i32.eq + drop + v128.const i32x4 0xffffffff 0xffffffff 0x0000000f 0x00000000 + i64x2.bitmask + i32.const 1 + i32.eq + drop ) (func $simd/test_i8x16 (local $0 v128) @@ -1902,8 +2867,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 206 + i32.const 528 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable @@ -1920,8 +2885,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 208 + i32.const 528 + i32.const 289 i32.const 3 call $~lib/builtins/abort unreachable @@ -1939,8 +2904,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 210 + i32.const 528 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -1956,8 +2921,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 211 + i32.const 528 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -2017,8 +2982,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 252 + i32.const 528 + i32.const 333 i32.const 3 call $~lib/builtins/abort unreachable @@ -2031,8 +2996,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 257 + i32.const 528 + i32.const 338 i32.const 3 call $~lib/builtins/abort unreachable @@ -2045,8 +3010,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 258 + i32.const 528 + i32.const 339 i32.const 3 call $~lib/builtins/abort unreachable @@ -2060,8 +3025,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 259 + i32.const 528 + i32.const 340 i32.const 3 call $~lib/builtins/abort unreachable @@ -2077,8 +3042,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 260 + i32.const 528 + i32.const 341 i32.const 3 call $~lib/builtins/abort unreachable @@ -2094,8 +3059,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 265 + i32.const 528 + i32.const 346 i32.const 3 call $~lib/builtins/abort unreachable @@ -2218,8 +3183,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 303 + i32.const 528 + i32.const 384 i32.const 3 call $~lib/builtins/abort unreachable @@ -2235,8 +3200,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 304 + i32.const 528 + i32.const 385 i32.const 3 call $~lib/builtins/abort unreachable @@ -2252,8 +3217,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 305 + i32.const 528 + i32.const 386 i32.const 3 call $~lib/builtins/abort unreachable @@ -2269,8 +3234,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 306 + i32.const 528 + i32.const 387 i32.const 3 call $~lib/builtins/abort unreachable @@ -2286,8 +3251,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 307 + i32.const 528 + i32.const 388 i32.const 3 call $~lib/builtins/abort unreachable @@ -2303,8 +3268,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 308 + i32.const 528 + i32.const 389 i32.const 3 call $~lib/builtins/abort unreachable @@ -2320,8 +3285,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 309 + i32.const 528 + i32.const 390 i32.const 3 call $~lib/builtins/abort unreachable @@ -2337,8 +3302,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 310 + i32.const 528 + i32.const 391 i32.const 3 call $~lib/builtins/abort unreachable @@ -2354,8 +3319,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 311 + i32.const 528 + i32.const 392 i32.const 3 call $~lib/builtins/abort unreachable @@ -2371,8 +3336,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 312 + i32.const 528 + i32.const 393 i32.const 3 call $~lib/builtins/abort unreachable @@ -2416,8 +3381,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 318 + i32.const 528 + i32.const 399 i32.const 5 call $~lib/builtins/abort unreachable @@ -2435,8 +3400,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 324 + i32.const 528 + i32.const 405 i32.const 5 call $~lib/builtins/abort unreachable @@ -2451,12 +3416,54 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 329 + i32.const 528 + i32.const 410 i32.const 5 call $~lib/builtins/abort unreachable end + v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 + i8x16.abs + v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.abs + v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.abs + v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080 + i8x16.abs + v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.bitmask + i32.const 65535 + i32.eq + drop + v128.const i32x4 0x020100ff 0x06050403 0x0a090807 0x0f0d0c0b + i8x16.bitmask + i32.const 1 + i32.eq + drop ) (func $simd/test_i16x8 (local $0 v128) @@ -2478,8 +3485,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 335 + i32.const 528 + i32.const 465 i32.const 3 call $~lib/builtins/abort unreachable @@ -2496,8 +3503,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 337 + i32.const 528 + i32.const 467 i32.const 3 call $~lib/builtins/abort unreachable @@ -2515,8 +3522,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 339 + i32.const 528 + i32.const 469 i32.const 3 call $~lib/builtins/abort unreachable @@ -2532,8 +3539,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 340 + i32.const 528 + i32.const 470 i32.const 3 call $~lib/builtins/abort unreachable @@ -2549,8 +3556,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 341 + i32.const 528 + i32.const 471 i32.const 3 call $~lib/builtins/abort unreachable @@ -2610,8 +3617,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 382 + i32.const 528 + i32.const 512 i32.const 3 call $~lib/builtins/abort unreachable @@ -2624,8 +3631,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 387 + i32.const 528 + i32.const 517 i32.const 3 call $~lib/builtins/abort unreachable @@ -2638,8 +3645,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 388 + i32.const 528 + i32.const 518 i32.const 3 call $~lib/builtins/abort unreachable @@ -2653,8 +3660,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 389 + i32.const 528 + i32.const 519 i32.const 3 call $~lib/builtins/abort unreachable @@ -2670,8 +3677,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 390 + i32.const 528 + i32.const 520 i32.const 3 call $~lib/builtins/abort unreachable @@ -2687,8 +3694,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 395 + i32.const 528 + i32.const 525 i32.const 3 call $~lib/builtins/abort unreachable @@ -2811,8 +3818,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 433 + i32.const 528 + i32.const 563 i32.const 3 call $~lib/builtins/abort unreachable @@ -2828,8 +3835,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 434 + i32.const 528 + i32.const 564 i32.const 3 call $~lib/builtins/abort unreachable @@ -2845,8 +3852,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 435 + i32.const 528 + i32.const 565 i32.const 3 call $~lib/builtins/abort unreachable @@ -2862,8 +3869,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 436 + i32.const 528 + i32.const 566 i32.const 3 call $~lib/builtins/abort unreachable @@ -2879,8 +3886,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 437 + i32.const 528 + i32.const 567 i32.const 3 call $~lib/builtins/abort unreachable @@ -2896,8 +3903,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 438 + i32.const 528 + i32.const 568 i32.const 3 call $~lib/builtins/abort unreachable @@ -2913,8 +3920,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 439 + i32.const 528 + i32.const 569 i32.const 3 call $~lib/builtins/abort unreachable @@ -2930,8 +3937,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 440 + i32.const 528 + i32.const 570 i32.const 3 call $~lib/builtins/abort unreachable @@ -2947,8 +3954,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 441 + i32.const 528 + i32.const 571 i32.const 3 call $~lib/builtins/abort unreachable @@ -2964,8 +3971,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 442 + i32.const 528 + i32.const 572 i32.const 3 call $~lib/builtins/abort unreachable @@ -3079,8 +4086,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 459 + i32.const 528 + i32.const 589 i32.const 5 call $~lib/builtins/abort unreachable @@ -3095,8 +4102,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 464 + i32.const 528 + i32.const 594 i32.const 5 call $~lib/builtins/abort unreachable @@ -3134,6 +4141,48 @@ local.get $0 i16x8.extmul_high_i8x16_u drop + v128.const i32x4 0x00010001 0x00010001 0x00010001 0x00010001 + i16x8.abs + v128.const i32x4 0x00010001 0x00010001 0x00010001 0x00010001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i16x8.abs + v128.const i32x4 0x00010001 0x00010001 0x00010001 0x00010001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i16x8.abs + v128.const i32x4 0x00010001 0x00010001 0x00010001 0x00010001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80008000 0x80008000 0x80008000 0x80008000 + i16x8.abs + v128.const i32x4 0x80008000 0x80008000 0x80008000 0x80008000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i16x8.bitmask + i32.const 255 + i32.eq + drop + v128.const i32x4 0x0000ffff 0x00020001 0x000c000b 0x000f000d + i16x8.bitmask + i32.const 1 + i32.eq + drop ) (func $simd/test_i32x4 (local $0 v128) @@ -3155,8 +4204,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 487 + i32.const 528 + i32.const 662 i32.const 3 call $~lib/builtins/abort unreachable @@ -3173,8 +4222,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 489 + i32.const 528 + i32.const 664 i32.const 3 call $~lib/builtins/abort unreachable @@ -3192,8 +4241,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 491 + i32.const 528 + i32.const 666 i32.const 3 call $~lib/builtins/abort unreachable @@ -3209,8 +4258,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 492 + i32.const 528 + i32.const 667 i32.const 3 call $~lib/builtins/abort unreachable @@ -3226,8 +4275,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 493 + i32.const 528 + i32.const 668 i32.const 3 call $~lib/builtins/abort unreachable @@ -3287,8 +4336,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 534 + i32.const 528 + i32.const 709 i32.const 3 call $~lib/builtins/abort unreachable @@ -3300,8 +4349,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 539 + i32.const 528 + i32.const 714 i32.const 3 call $~lib/builtins/abort unreachable @@ -3313,8 +4362,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 540 + i32.const 528 + i32.const 715 i32.const 3 call $~lib/builtins/abort unreachable @@ -3330,8 +4379,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 541 + i32.const 528 + i32.const 716 i32.const 3 call $~lib/builtins/abort unreachable @@ -3347,8 +4396,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 546 + i32.const 528 + i32.const 721 i32.const 3 call $~lib/builtins/abort unreachable @@ -3427,8 +4476,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 560 + i32.const 528 + i32.const 735 i32.const 3 call $~lib/builtins/abort unreachable @@ -3444,8 +4493,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 561 + i32.const 528 + i32.const 736 i32.const 3 call $~lib/builtins/abort unreachable @@ -3461,8 +4510,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 562 + i32.const 528 + i32.const 737 i32.const 3 call $~lib/builtins/abort unreachable @@ -3478,8 +4527,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 563 + i32.const 528 + i32.const 738 i32.const 3 call $~lib/builtins/abort unreachable @@ -3495,8 +4544,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 564 + i32.const 528 + i32.const 739 i32.const 3 call $~lib/builtins/abort unreachable @@ -3512,8 +4561,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 565 + i32.const 528 + i32.const 740 i32.const 3 call $~lib/builtins/abort unreachable @@ -3529,8 +4578,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 566 + i32.const 528 + i32.const 741 i32.const 3 call $~lib/builtins/abort unreachable @@ -3546,8 +4595,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 567 + i32.const 528 + i32.const 742 i32.const 3 call $~lib/builtins/abort unreachable @@ -3563,8 +4612,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 568 + i32.const 528 + i32.const 743 i32.const 3 call $~lib/builtins/abort unreachable @@ -3580,8 +4629,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 569 + i32.const 528 + i32.const 744 i32.const 3 call $~lib/builtins/abort unreachable @@ -3679,8 +4728,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 590 + i32.const 528 + i32.const 765 i32.const 5 call $~lib/builtins/abort unreachable @@ -3695,8 +4744,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 595 + i32.const 528 + i32.const 770 i32.const 5 call $~lib/builtins/abort unreachable @@ -3731,6 +4780,53 @@ local.get $0 i32x4.extmul_high_i16x8_u drop + v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 + i32x4.abs + v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i32x4.abs + v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i32x4.abs + v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000 + i32x4.abs + v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0xffffffff 0x00000001 0xffffffff + i32x4.bitmask + i32.const 10 + i32.eq + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i32x4.bitmask + i32.const 15 + i32.eq + drop + v128.const i32x4 0xffffffff 0x00000000 0x00000001 0x0000000f + i32x4.bitmask + i32.const 1 + i32.eq + drop ) (func $simd/test_i64x2 (local $0 v128) @@ -3748,8 +4844,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 616 + i32.const 528 + i32.const 804 i32.const 3 call $~lib/builtins/abort unreachable @@ -3766,8 +4862,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 618 + i32.const 528 + i32.const 806 i32.const 3 call $~lib/builtins/abort unreachable @@ -3785,8 +4881,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 620 + i32.const 528 + i32.const 808 i32.const 3 call $~lib/builtins/abort unreachable @@ -3802,8 +4898,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 621 + i32.const 528 + i32.const 809 i32.const 3 call $~lib/builtins/abort unreachable @@ -3819,8 +4915,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 622 + i32.const 528 + i32.const 810 i32.const 3 call $~lib/builtins/abort unreachable @@ -3835,8 +4931,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 623 + i32.const 528 + i32.const 811 i32.const 3 call $~lib/builtins/abort unreachable @@ -3848,8 +4944,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 628 + i32.const 528 + i32.const 816 i32.const 3 call $~lib/builtins/abort unreachable @@ -3861,8 +4957,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 629 + i32.const 528 + i32.const 817 i32.const 3 call $~lib/builtins/abort unreachable @@ -3878,8 +4974,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 630 + i32.const 528 + i32.const 818 i32.const 3 call $~lib/builtins/abort unreachable @@ -3895,8 +4991,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 635 + i32.const 528 + i32.const 823 i32.const 3 call $~lib/builtins/abort unreachable @@ -3968,8 +5064,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 649 + i32.const 528 + i32.const 837 i32.const 5 call $~lib/builtins/abort unreachable @@ -3984,8 +5080,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 654 + i32.const 528 + i32.const 842 i32.const 5 call $~lib/builtins/abort unreachable @@ -3996,17 +5092,351 @@ local.get $0 i64x2.extmul_low_i32x4_s drop - local.get $0 - local.get $0 - i64x2.extmul_low_i32x4_u + 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 + v128.const i32x4 0x0000000c 0x00000000 0x0000000c 0x00000000 + v128.const i32x4 0x0000000c 0x00000000 0x0000000c 0x00000000 + i64x2.eq + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x0000000c 0x00000000 0x0000000c 0x00000000 + v128.const i32x4 0x0000000c 0x00000000 0x0000000d 0x00000000 + i64x2.eq + v128.const i32x4 0xffffffff 0xffffffff 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x0000000c 0x00000000 0x0000000c 0x00000000 + v128.const i32x4 0x0000000c 0x00000000 0x0000000d 0x00000000 + i64x2.ne + v128.const i32x4 0x00000000 0x00000000 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x0000000b 0x00000000 0x0000000c 0x00000000 + v128.const i32x4 0x0000000c 0x00000000 0x0000000d 0x00000000 + i64x2.ne + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00000002 0x00000000 0x00000000 0x00000000 + i64x2.lt_s + v128.const i32x4 0xffffffff 0xffffffff 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00000002 0x00000000 0x00000001 0x00000000 + i64x2.lt_s + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00000002 0x00000000 0x00000000 0x00000000 + i64x2.le_s + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00000002 0x00000000 0x00000001 0x00000000 + i64x2.le_s + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000002 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + i64x2.gt_s + v128.const i32x4 0xffffffff 0xffffffff 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000002 0x00000000 0x00000001 0x00000000 + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + i64x2.gt_s + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000002 0x00000000 0x00000000 0x00000000 + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + i64x2.ge_s + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000002 0x00000000 0x00000001 0x00000000 + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + i64x2.ge_s + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0x00000001 0x00000001 0xffffffff + i64x2.extend_low_i32x4_s + v128.const i32x4 0xffffffff 0xffffffff 0x00000001 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x00000000 0x00000001 0xffffffff + i64x2.extend_low_i32x4_s + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000001 0x00000000 0x00000000 + i64x2.extend_low_i32x4_s + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i64x2.extend_low_i32x4_s + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80000000 0x80000000 0x7fffffff 0x7fffffff + i64x2.extend_low_i32x4_s + v128.const i32x4 0x80000000 0xffffffff 0x80000000 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0x7fffffff 0x7fffffff + i64x2.extend_low_i32x4_s + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i64x2.extend_low_i32x4_u + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x00000000 0x00000001 0xffffffff + i64x2.extend_low_i32x4_u + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000001 0x00000000 0x00000000 + i64x2.extend_low_i32x4_u + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0x00000000 0x00000000 + i64x2.extend_low_i32x4_u + v128.const i32x4 0xffffffff 0x00000000 0xffffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000 + i64x2.extend_low_i32x4_u + v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0x7fffffff 0x7fffffff + i64x2.extend_low_i32x4_u + v128.const i32x4 0xffffffff 0x00000000 0xffffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0x00000001 0x00000001 0xffffffff + i64x2.extend_high_i32x4_s + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x00000000 0x00000001 0xffffffff + i64x2.extend_high_i32x4_s + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000001 0x00000000 0x00000000 + i64x2.extend_high_i32x4_s + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i64x2.extend_high_i32x4_s + v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80000000 0x80000000 0x7fffffff 0x7fffffff + i64x2.extend_high_i32x4_s + v128.const i32x4 0x7fffffff 0x00000000 0x7fffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0x7fffffff 0x7fffffff + i64x2.extend_high_i32x4_s + v128.const i32x4 0x7fffffff 0x00000000 0x7fffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i64x2.extend_high_i32x4_u + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x00000000 0x00000001 0xffffffff + i64x2.extend_high_i32x4_u + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000001 0x00000000 0x00000000 + i64x2.extend_high_i32x4_u + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x00000000 0xffffffff 0xffffffff + i64x2.extend_high_i32x4_u + v128.const i32x4 0xffffffff 0x00000000 0xffffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000 + i64x2.extend_high_i32x4_u + v128.const i32x4 0x80000000 0x00000000 0x80000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x7fffffff 0x7fffffff 0xffffffff 0xffffffff + i64x2.extend_high_i32x4_u + v128.const i32x4 0xffffffff 0x00000000 0xffffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i64x2.abs + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i64x2.abs + v128.const i32x4 0x00000001 0x00000000 0x00000001 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x80000000 0x00000000 0x80000000 + i64x2.abs + v128.const i32x4 0x00000000 0x80000000 0x00000000 0x80000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne drop - local.get $0 - local.get $0 - i64x2.extmul_high_i32x4_s + v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff + i64x2.bitmask + i32.const 3 + i32.eq drop - local.get $0 - local.get $0 - i64x2.extmul_high_i32x4_u + v128.const i32x4 0xffffffff 0xffffffff 0x0000000f 0x00000000 + i64x2.bitmask + i32.const 1 + i32.eq drop ) (func $simd/test_f32x4 @@ -4018,6 +5448,7 @@ (local $5 v128) (local $6 v128) (local $7 v128) + (local $8 v128) v128.const i32x4 0x3fc00000 0x40200000 0x40600000 0x40900000 local.set $0 local.get $0 @@ -4029,8 +5460,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 670 + i32.const 528 + i32.const 915 i32.const 3 call $~lib/builtins/abort unreachable @@ -4047,8 +5478,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 672 + i32.const 528 + i32.const 917 i32.const 3 call $~lib/builtins/abort unreachable @@ -4066,8 +5497,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 674 + i32.const 528 + i32.const 919 i32.const 3 call $~lib/builtins/abort unreachable @@ -4083,8 +5514,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 675 + i32.const 528 + i32.const 920 i32.const 3 call $~lib/builtins/abort unreachable @@ -4100,8 +5531,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 676 + i32.const 528 + i32.const 921 i32.const 3 call $~lib/builtins/abort unreachable @@ -4121,8 +5552,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 678 + i32.const 528 + i32.const 923 i32.const 3 call $~lib/builtins/abort unreachable @@ -4138,8 +5569,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 679 + i32.const 528 + i32.const 924 i32.const 3 call $~lib/builtins/abort unreachable @@ -4154,8 +5585,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 680 + i32.const 528 + i32.const 925 i32.const 3 call $~lib/builtins/abort unreachable @@ -4167,8 +5598,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 681 + i32.const 528 + i32.const 926 i32.const 3 call $~lib/builtins/abort unreachable @@ -4180,8 +5611,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 682 + i32.const 528 + i32.const 927 i32.const 3 call $~lib/builtins/abort unreachable @@ -4197,8 +5628,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 683 + i32.const 528 + i32.const 928 i32.const 3 call $~lib/builtins/abort unreachable @@ -4214,8 +5645,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 688 + i32.const 528 + i32.const 933 i32.const 3 call $~lib/builtins/abort unreachable @@ -4245,8 +5676,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 697 + i32.const 528 + i32.const 942 i32.const 3 call $~lib/builtins/abort unreachable @@ -4262,8 +5693,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 698 + i32.const 528 + i32.const 943 i32.const 3 call $~lib/builtins/abort unreachable @@ -4279,8 +5710,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 699 + i32.const 528 + i32.const 944 i32.const 3 call $~lib/builtins/abort unreachable @@ -4296,8 +5727,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 700 + i32.const 528 + i32.const 945 i32.const 3 call $~lib/builtins/abort unreachable @@ -4313,8 +5744,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 701 + i32.const 528 + i32.const 946 i32.const 3 call $~lib/builtins/abort unreachable @@ -4330,8 +5761,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 702 + i32.const 528 + i32.const 947 i32.const 3 call $~lib/builtins/abort unreachable @@ -4347,8 +5778,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 703 + i32.const 528 + i32.const 948 i32.const 3 call $~lib/builtins/abort unreachable @@ -4364,8 +5795,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 704 + i32.const 528 + i32.const 949 i32.const 3 call $~lib/builtins/abort unreachable @@ -4380,8 +5811,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 705 + i32.const 528 + i32.const 950 i32.const 3 call $~lib/builtins/abort unreachable @@ -4417,6 +5848,76 @@ local.get $0 f32x4.demote_f64x2_zero drop + v128.const i32x4 0x3f800000 0xbf800000 0x3f800000 0xbf800000 + v128.const i32x4 0xbf800000 0x3f800000 0xbf800000 0x3f800000 + f32x4.pmin + v128.const i32x4 0xbf800000 0xbf800000 0xbf800000 0xbf800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x3f800000 0xbf800000 0x3f800000 0xbf800000 + v128.const i32x4 0xbf800000 0x3f800000 0xbf800000 0x3f800000 + f32x4.pmax + v128.const i32x4 0x3f800000 0x3f800000 0x3f800000 0x3f800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x3f8ccccd 0xbe800000 0x428c051f 0x40800000 + f32x4.ceil + local.set $8 + local.get $8 + v128.const i32x4 0x40000000 0x80000000 0x428e0000 0x40800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 977 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x3f8ccccd 0xbe800000 0x428c051f 0x40800000 + f32x4.floor + local.set $8 + local.get $8 + v128.const i32x4 0x3f800000 0xbf800000 0x428c0000 0x40800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 981 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x3f8ccccd 0x40200000 0x4079999a 0x40800000 + f32x4.trunc + v128.const i32x4 0x3f800000 0x40000000 0x40400000 0x40800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x3f8ccccd 0x40200000 0x4060a3d7 0x40800000 + f32x4.nearest + v128.const i32x4 0x3f800000 0x40000000 0x40800000 0x40800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop ) (func $simd/test_f64x2 (local $0 v128) @@ -4427,6 +5928,7 @@ (local $5 v128) (local $6 v128) (local $7 v128) + (local $8 v128) v128.const i32x4 0x00000000 0x3ff80000 0x00000000 0x40040000 local.set $0 local.get $0 @@ -4438,8 +5940,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 724 + i32.const 528 + i32.const 997 i32.const 3 call $~lib/builtins/abort unreachable @@ -4456,8 +5958,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 726 + i32.const 528 + i32.const 999 i32.const 3 call $~lib/builtins/abort unreachable @@ -4475,8 +5977,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 728 + i32.const 528 + i32.const 1001 i32.const 3 call $~lib/builtins/abort unreachable @@ -4492,8 +5994,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 729 + i32.const 528 + i32.const 1002 i32.const 3 call $~lib/builtins/abort unreachable @@ -4509,8 +6011,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 730 + i32.const 528 + i32.const 1003 i32.const 3 call $~lib/builtins/abort unreachable @@ -4530,8 +6032,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 732 + i32.const 528 + i32.const 1005 i32.const 3 call $~lib/builtins/abort unreachable @@ -4547,8 +6049,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 733 + i32.const 528 + i32.const 1006 i32.const 3 call $~lib/builtins/abort unreachable @@ -4563,8 +6065,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 734 + i32.const 528 + i32.const 1007 i32.const 3 call $~lib/builtins/abort unreachable @@ -4576,8 +6078,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 735 + i32.const 528 + i32.const 1008 i32.const 3 call $~lib/builtins/abort unreachable @@ -4589,8 +6091,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 736 + i32.const 528 + i32.const 1009 i32.const 3 call $~lib/builtins/abort unreachable @@ -4606,8 +6108,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 737 + i32.const 528 + i32.const 1010 i32.const 3 call $~lib/builtins/abort unreachable @@ -4623,8 +6125,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 742 + i32.const 528 + i32.const 1015 i32.const 3 call $~lib/builtins/abort unreachable @@ -4654,8 +6156,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 751 + i32.const 528 + i32.const 1024 i32.const 3 call $~lib/builtins/abort unreachable @@ -4671,8 +6173,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 752 + i32.const 528 + i32.const 1025 i32.const 3 call $~lib/builtins/abort unreachable @@ -4688,8 +6190,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 753 + i32.const 528 + i32.const 1026 i32.const 3 call $~lib/builtins/abort unreachable @@ -4705,8 +6207,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 754 + i32.const 528 + i32.const 1027 i32.const 3 call $~lib/builtins/abort unreachable @@ -4722,8 +6224,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 755 + i32.const 528 + i32.const 1028 i32.const 3 call $~lib/builtins/abort unreachable @@ -4739,8 +6241,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 756 + i32.const 528 + i32.const 1029 i32.const 3 call $~lib/builtins/abort unreachable @@ -4756,8 +6258,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 757 + i32.const 528 + i32.const 1030 i32.const 3 call $~lib/builtins/abort unreachable @@ -4773,8 +6275,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 758 + i32.const 528 + i32.const 1031 i32.const 3 call $~lib/builtins/abort unreachable @@ -4789,8 +6291,8 @@ i32.eqz if i32.const 0 - i32.const 160 - i32.const 759 + i32.const 528 + i32.const 1032 i32.const 3 call $~lib/builtins/abort unreachable @@ -4812,6 +6314,76 @@ local.get $0 f64x2.promote_low_f32x4 drop + v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0xbff00000 + v128.const i32x4 0x00000000 0xbff00000 0x00000000 0x3ff00000 + f64x2.pmin + v128.const i32x4 0x00000000 0xbff00000 0x00000000 0xbff00000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0xbff00000 + v128.const i32x4 0x00000000 0xbff00000 0x00000000 0x3ff00000 + f64x2.pmax + v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x3ff00000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x9999999a 0x3ff19999 0x00000000 0xbfd00000 + f64x2.ceil + local.set $8 + local.get $8 + v128.const i32x4 0x00000000 0x40000000 0x00000000 0x80000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 1051 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x9999999a 0x3ff19999 0x00000000 0xbfd00000 + f64x2.floor + local.set $8 + local.get $8 + v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0xbff00000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 1055 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x9999999a 0x3ff19999 0x33333333 0x400f3333 + f64x2.trunc + v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x40080000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x9999999a 0x3ff19999 0xe147ae14 0x400c147a + f64x2.nearest + v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x40100000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop ) (func $simd/test_const (result v128) (local $0 v128) @@ -4820,6 +6392,56 @@ local.get $0 ) (func $start:simd + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 192 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 224 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 368 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 1 + i32.const 4 + i32.const 3 + i32.const 32 + call $~lib/rt/__newArray + local.tee $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/array/Array#__get + i32x4.extract_lane 0 + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end i32.const 1 drop i32.const 1 @@ -4841,6 +6463,10 @@ call $simd/test_f64x2 call $simd/test_const drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer ) (func $simd/test_vars_i8x16_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) v128.const i32x4 0x03000100 0x07000504 0x0b0a0908 0x000e0d0c @@ -4972,7 +6598,152 @@ local.get $1 f64x2.replace_lane 1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 272 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 80 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) + i32.const 0 + drop + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) + i32.const 0 + drop + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $invalid + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) (func $~start call $start:simd ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 17008 + i32.const 17056 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.shl + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 0 + local.get $3 + call $~lib/rt/__newBuffer + local.tee $5 + i32.store + i32.const 16 + local.get $2 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + local.get $5 + i32.store + local.get $6 + local.get $5 + i32.const 0 + call $~lib/rt/itcms/__link + local.get $6 + local.get $5 + i32.store offset=4 + local.get $6 + local.get $4 + i32.store offset=8 + local.get $6 + local.get $0 + i32.store offset=12 + local.get $6 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + ) ) diff --git a/tests/compiler/simd.release.wat b/tests/compiler/simd.release.wat index 105f61d665..8ba8db8d1e 100644 --- a/tests/compiler/simd.release.wat +++ b/tests/compiler/simd.release.wat @@ -1,11 +1,13 @@ (module (type $none_=>_none (func)) + (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_v128 (func (param i32 i32 i32) (result v128))) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_=>_none (func (param i32))) + (type $none_=>_i32 (func (result i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (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))) @@ -16,14 +18,36 @@ (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/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18012)) (memory $0 1) - (data (i32.const 1036) "<") - (data (i32.const 1048) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") - (data (i32.const 1100) "<") - (data (i32.const 1112) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") - (data (i32.const 1164) ",") - (data (i32.const 1176) "\01\00\00\00\0e\00\00\00s\00i\00m\00d\00.\00t\00s") + (data (i32.const 1036) ",") + (data (i32.const 1052) "\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04") + (data (i32.const 1084) "<") + (data (i32.const 1096) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data (i32.const 1148) "<") + (data (i32.const 1160) "\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data (i32.const 1276) "<") + (data (i32.const 1288) "\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 1340) ",") + (data (i32.const 1352) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 1420) "<") + (data (i32.const 1432) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 1484) ",") + (data (i32.const 1496) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1532) ",") + (data (i32.const 1544) "\01\00\00\00\0e\00\00\00s\00i\00m\00d\00.\00t\00s") + (data (i32.const 1584) "\05\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 1612) "\02\04\00\00\00\00\00\00\02\t") (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)) @@ -38,6 +62,183 @@ (export "test_vars_f64x2_full" (func $simd/test_vars_f64x2_full)) (export "memory" (memory $0)) (start $~start) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1296 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + i32.const 1104 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1168 + i32.const 159 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1168 + i32.const 147 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + i32.const 0 + local.get $0 + i32.const 18012 + i32.lt_u + local.get $0 + i32.load offset=8 + select + i32.eqz + if + i32.const 0 + i32.const 1168 + i32.const 127 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1168 + i32.const 131 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 1 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 1584 + i32.load + i32.gt_u + if + i32.const 1296 + i32.const 1360 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 3 + i32.shl + i32.const 1588 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -51,7 +252,7 @@ i32.eqz if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 268 i32.const 14 call $~lib/builtins/abort @@ -65,7 +266,7 @@ i32.lt_u if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 270 i32.const 14 call $~lib/builtins/abort @@ -111,7 +312,7 @@ i32.eqz if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 284 i32.const 14 call $~lib/builtins/abort @@ -201,7 +402,7 @@ i32.eqz if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -215,7 +416,7 @@ i32.eqz if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -276,7 +477,7 @@ i32.eqz if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 221 i32.const 16 call $~lib/builtins/abort @@ -309,7 +510,7 @@ i32.lt_u if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 233 i32.const 14 call $~lib/builtins/abort @@ -324,7 +525,7 @@ i32.ne if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 234 i32.const 14 call $~lib/builtins/abort @@ -375,7 +576,7 @@ i32.eqz if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 251 i32.const 14 call $~lib/builtins/abort @@ -445,7 +646,7 @@ i32.gt_u if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 377 i32.const 14 call $~lib/builtins/abort @@ -470,7 +671,7 @@ i32.gt_u if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 384 i32.const 16 call $~lib/builtins/abort @@ -498,7 +699,7 @@ i32.gt_u if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 397 i32.const 5 call $~lib/builtins/abort @@ -569,10 +770,10 @@ if unreachable end - i32.const 17600 + i32.const 18016 i32.const 0 i32.store - i32.const 19168 + i32.const 19584 i32.const 0 i32.store loop $for-loop|0 @@ -583,7 +784,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 17600 + i32.const 18016 i32.add i32.const 0 i32.store offset=4 @@ -601,7 +802,7 @@ i32.add i32.const 2 i32.shl - i32.const 17600 + i32.const 18016 i32.add i32.const 0 i32.store offset=96 @@ -619,127 +820,398 @@ br $for-loop|0 end end - i32.const 17600 - i32.const 19172 + i32.const 18016 + i32.const 19588 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 17600 + i32.const 18016 global.set $~lib/rt/tlsf/ROOT ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/tlsf/__free (param $0 i32) + (local $1 i32) (local $2 i32) - (local $3 i32) - local.get $1 - i32.const 256 + local.get $0 + i32.const 18012 i32.lt_u - if (result i32) - local.get $1 - i32.const 4 - i32.shr_u - else - i32.const 31 - 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 - local.get $1 - local.get $1 - i32.const 536870910 - i32.lt_u - select - local.tee $1 - i32.clz - i32.sub - local.tee $3 - i32.const 7 - i32.sub - local.set $2 - local.get $1 - local.get $3 - i32.const 4 - i32.sub - i32.shr_u - i32.const 16 - i32.xor + if + return end - local.tee $1 - i32.const 16 - i32.lt_u - local.get $2 - i32.const 23 - i32.lt_u - i32.and + global.get $~lib/rt/tlsf/ROOT i32.eqz if - i32.const 0 - i32.const 1056 - i32.const 330 - i32.const 14 - call $~lib/builtins/abort - unreachable + call $~lib/rt/tlsf/initialize end + global.get $~lib/rt/tlsf/ROOT local.get $0 - local.get $2 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - i32.const -1 - local.get $1 - i32.shl + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.const 15 i32.and - local.tee $1 + i32.const 1 + local.get $0 + select if (result i32) - local.get $0 - local.get $1 - i32.ctz - local.get $2 - i32.const 4 - i32.shl - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 + i32.const 1 else - local.get $0 + local.get $1 i32.load - i32.const -1 - local.get $2 i32.const 1 - i32.add - i32.shl i32.and - local.tee $1 - if (result i32) - local.get $0 - local.get $1 - i32.ctz - local.tee $1 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.tee $2 - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 343 - i32.const 18 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $2 + end + if + i32.const 0 + i32.const 1440 + i32.const 559 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $1 + i32.load + i32.const 1 + i32.or + i32.store + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 18012 + i32.lt_u + if + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1168 + i32.const 228 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 18012 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + local.tee $0 + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $1 + i32.const 256 + i32.lt_u + if (result i32) + local.get $1 + i32.const 4 + i32.shr_u + else + i32.const 31 + 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 + local.get $1 + local.get $1 + i32.const 536870910 + i32.lt_u + select + local.tee $1 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $2 + local.get $1 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1440 + i32.const 330 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1440 + i32.const 343 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 i32.ctz local.get $1 i32.const 4 @@ -762,8 +1234,8 @@ i32.const 1073741820 i32.gt_u if - i32.const 1120 - i32.const 1056 + i32.const 1104 + i32.const 1440 i32.const 458 i32.const 29 call $~lib/builtins/abort @@ -853,7 +1325,7 @@ i32.eqz if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 496 i32.const 16 call $~lib/builtins/abort @@ -868,7 +1340,7 @@ i32.gt_u if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 498 i32.const 14 call $~lib/builtins/abort @@ -887,7 +1359,7 @@ i32.and if i32.const 0 - i32.const 1056 + i32.const 1440 i32.const 357 i32.const 14 call $~lib/builtins/abort @@ -947,14 +1419,53 @@ end local.get $1 ) - (func $~lib/rt/tlsf/__free (param $0 i32) + (func $~lib/rt/itcms/__new (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - local.get $0 - i32.const 17596 - i32.lt_u + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u if - return + block $__inlined_func$~lib/rt/itcms/interrupt + i32.const 2048 + local.set $1 + loop $do-loop|0 + local.get $1 + call $~lib/rt/itcms/step + i32.sub + local.set $1 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i64.extend_i32_u + i64.const 200 + i64.mul + i64.const 100 + i64.div_u + i32.wrap_i64 + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt + end + local.get $1 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + local.tee $1 + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + local.get $1 + i32.add + global.set $~lib/rt/itcms/threshold + end end global.get $~lib/rt/tlsf/ROOT i32.eqz @@ -962,43 +1473,57 @@ call $~lib/rt/tlsf/initialize end global.get $~lib/rt/tlsf/ROOT + i32.const 32 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 local.get $0 - i32.const 4 - i32.sub - local.set $1 - local.get $0 - i32.const 15 - i32.and - i32.const 1 - local.get $0 - select - if (result i32) - i32.const 1 - else - local.get $1 - i32.load - i32.const 1 - i32.and - end - if - i32.const 0 - i32.const 1056 - i32.const 559 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + i32.store offset=12 local.get $1 + i32.const 16 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $2 + i32.load offset=8 + local.set $0 local.get $1 - i32.load - i32.const 1 + local.get $2 + global.get $~lib/rt/itcms/white i32.or - i32.store + i32.store offset=4 local.get $1 - call $~lib/rt/tlsf/insertBlock + local.get $0 + i32.store offset=8 + local.get $0 + local.get $1 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $1 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $1 + i32.const 20 + i32.add + local.tee $0 + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + v128.store align=1 + local.get $0 ) (func $simd/test_v128 (local $0 i32) + (local $1 v128) global.get $~lib/rt/tlsf/ROOT i32.eqz if @@ -1036,8 +1561,8 @@ i32.eqz if i32.const 0 - i32.const 1184 - i32.const 67 + i32.const 1552 + i32.const 71 i32.const 5 call $~lib/builtins/abort unreachable @@ -1065,8 +1590,8 @@ i32.eqz if i32.const 0 - i32.const 1184 - i32.const 77 + i32.const 1552 + i32.const 81 i32.const 5 call $~lib/builtins/abort unreachable @@ -1094,8 +1619,8 @@ i32.eqz if i32.const 0 - i32.const 1184 - i32.const 87 + i32.const 1552 + i32.const 91 i32.const 5 call $~lib/builtins/abort unreachable @@ -1123,8 +1648,8 @@ i32.eqz if i32.const 0 - i32.const 1184 - i32.const 97 + i32.const 1552 + i32.const 101 i32.const 5 call $~lib/builtins/abort unreachable @@ -1152,8 +1677,8 @@ i32.eqz if i32.const 0 - i32.const 1184 - i32.const 107 + i32.const 1552 + i32.const 111 i32.const 5 call $~lib/builtins/abort unreachable @@ -1181,8 +1706,8 @@ i32.eqz if i32.const 0 - i32.const 1184 - i32.const 117 + i32.const 1552 + i32.const 121 i32.const 5 call $~lib/builtins/abort unreachable @@ -1211,8 +1736,102 @@ i32.eqz if i32.const 0 - i32.const 1184 - i32.const 188 + i32.const 1552 + i32.const 192 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + local.tee $0 + i32.const 42 + i32.store + local.get $0 + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + v128.load32_lane 0 + local.tee $1 + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 200 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + v128.load8_lane 0 + local.tee $1 + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 202 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + v128.load16_lane 0 + local.tee $1 + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 204 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + v128.load32_lane 0 + local.tee $1 + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 206 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + v128.load64_lane 0 + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 208 i32.const 5 call $~lib/builtins/abort unreachable @@ -1220,6 +1839,350 @@ local.get $0 call $~lib/rt/tlsf/__free ) + (func $start:simd + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1628 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store + memory.size + i32.const 16 + i32.shl + i32.const 18012 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1220 + i32.const 1216 + i32.store + i32.const 1224 + i32.const 1216 + i32.store + i32.const 1216 + global.set $~lib/rt/itcms/pinSpace + i32.const 1252 + i32.const 1248 + i32.store + i32.const 1256 + i32.const 1248 + i32.store + i32.const 1248 + global.set $~lib/rt/itcms/toSpace + i32.const 1396 + i32.const 1392 + i32.store + i32.const 1400 + i32.const 1392 + i32.store + i32.const 1392 + global.set $~lib/rt/itcms/fromSpace + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1628 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $1 + i32.const 0 + i32.store + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 1056 + v128.load align=1 + v128.store align=1 + local.get $1 + local.get $3 + i32.store + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $2 + local.get $3 + i32.store + local.get $3 + if + local.get $2 + i32.eqz + if + i32.const 0 + i32.const 1168 + i32.const 294 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $3 + i32.const 20 + i32.sub + local.tee $4 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $2 + i32.const 20 + i32.sub + i32.load offset=4 + i32.const 3 + i32.and + local.tee $1 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $4 + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $1 + i32.const 3 + i32.eq + i32.and + if + local.get $4 + call $~lib/rt/itcms/Object#makeGray + end + end + end + end + local.get $2 + local.get $3 + i32.store offset=4 + local.get $2 + i32.const 16 + i32.store offset=8 + local.get $2 + i32.const 1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $2 + i32.store + local.get $2 + i32.load offset=12 + i32.eqz + if + i32.const 1296 + i32.const 1504 + i32.const 114 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.load offset=4 + v128.load + i32x4.extract_lane 0 + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1552 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $simd/test_v128 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + local.tee $0 + i32.const 1 + i32.store8 + local.get $0 + i32.const 2 + i32.store8 offset=1 + local.get $0 + i32.const 3 + i32.store8 offset=2 + local.get $0 + i32.const 4 + i32.store8 offset=3 + local.get $0 + i32.const 5 + i32.store8 offset=4 + local.get $0 + i32.const 6 + i32.store8 offset=5 + local.get $0 + i32.const 7 + i32.store8 offset=6 + local.get $0 + i32.const 255 + i32.store8 offset=7 + local.get $0 + v128.load8x8_s align=1 + v128.const i32x4 0x00020001 0x00040003 0x00060005 0xffff0007 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 589 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + v128.load8x8_u align=1 + v128.const i32x4 0x00020001 0x00040003 0x00060005 0x00ff0007 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 594 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + local.tee $0 + i32.const 1 + i32.store16 + local.get $0 + i32.const 2 + i32.store16 offset=2 + local.get $0 + i32.const 3 + i32.store16 offset=4 + local.get $0 + i32.const 65535 + i32.store16 offset=6 + local.get $0 + v128.load16x4_s align=2 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0xffffffff + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 765 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + v128.load16x4_u align=2 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x0000ffff + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 770 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + local.tee $0 + i32.const 1 + i32.store + local.get $0 + i32.const -1 + i32.store offset=4 + local.get $0 + v128.load32x2_s align=4 + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0xffffffff + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 837 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + v128.load32x2_u align=4 + v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x00000000 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1552 + i32.const 842 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 18032 + i32.const 18080 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) (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 @@ -1350,170 +2313,51 @@ local.get $1 f64x2.replace_lane 1 ) - (func $~start - (local $0 i32) - call $simd/test_v128 - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - call $~lib/rt/tlsf/initialize - end - global.get $~lib/rt/tlsf/ROOT - i32.const 16 - call $~lib/rt/tlsf/allocateBlock - i32.const 4 - i32.add - local.tee $0 - i32.const 1 - i32.store8 - local.get $0 - i32.const 2 - i32.store8 offset=1 - local.get $0 - i32.const 3 - i32.store8 offset=2 - local.get $0 - i32.const 4 - i32.store8 offset=3 - local.get $0 - i32.const 5 - i32.store8 offset=4 - local.get $0 - i32.const 6 - i32.store8 offset=5 - local.get $0 - i32.const 7 - i32.store8 offset=6 - local.get $0 - i32.const 255 - i32.store8 offset=7 - local.get $0 - v128.load8x8_s align=1 - v128.const i32x4 0x00020001 0x00040003 0x00060005 0xffff0007 - i8x16.eq - i8x16.all_true - i32.eqz - if - i32.const 0 - i32.const 1184 - i32.const 459 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - v128.load8x8_u align=1 - v128.const i32x4 0x00020001 0x00040003 0x00060005 0x00ff0007 - i8x16.eq - i8x16.all_true - i32.eqz - if - i32.const 0 - i32.const 1184 - i32.const 464 - i32.const 5 - call $~lib/builtins/abort + (func $~lib/rt/__visit_members (param $0 i32) + block $folding-inner0 + block $invalid + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner0 $folding-inner0 $folding-inner0 $invalid + end + return + end + return + end unreachable end local.get $0 - call $~lib/rt/tlsf/__free - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - call $~lib/rt/tlsf/initialize - end - global.get $~lib/rt/tlsf/ROOT - i32.const 16 - call $~lib/rt/tlsf/allocateBlock - i32.const 4 - i32.add + i32.load local.tee $0 - i32.const 1 - i32.store16 - local.get $0 - i32.const 2 - i32.store16 offset=2 - local.get $0 - i32.const 3 - i32.store16 offset=4 - local.get $0 - i32.const 65535 - i32.store16 offset=6 - local.get $0 - v128.load16x4_s align=2 - v128.const i32x4 0x00000001 0x00000002 0x00000003 0xffffffff - i8x16.eq - i8x16.all_true - i32.eqz - if - i32.const 0 - i32.const 1184 - i32.const 590 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - v128.load16x4_u align=2 - v128.const i32x4 0x00000001 0x00000002 0x00000003 0x0000ffff - i8x16.eq - i8x16.all_true - i32.eqz if - i32.const 0 - i32.const 1184 - i32.const 595 - i32.const 5 - call $~lib/builtins/abort - unreachable + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit end + ) + (func $~start + call $start:simd + ) + (func $byn-split-outlined-A$~lib/rt/itcms/__visit (param $0 i32) + global.get $~lib/rt/itcms/white local.get $0 - call $~lib/rt/tlsf/__free - global.get $~lib/rt/tlsf/ROOT - i32.eqz - if - call $~lib/rt/tlsf/initialize - end - global.get $~lib/rt/tlsf/ROOT - i32.const 16 - call $~lib/rt/tlsf/allocateBlock - i32.const 4 - i32.add + i32.const 20 + i32.sub local.tee $0 - i32.const 1 - i32.store - local.get $0 - i32.const -1 - i32.store offset=4 - local.get $0 - v128.load32x2_s align=4 - v128.const i32x4 0x00000001 0x00000000 0xffffffff 0xffffffff - i8x16.eq - i8x16.all_true - i32.eqz - if - i32.const 0 - i32.const 1184 - i32.const 649 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $0 - v128.load32x2_u align=4 - v128.const i32x4 0x00000001 0x00000000 0xffffffff 0x00000000 - i8x16.eq - i8x16.all_true - i32.eqz + i32.load offset=4 + i32.const 3 + i32.and + i32.eq if - i32.const 0 - i32.const 1184 - i32.const 654 - i32.const 5 - call $~lib/builtins/abort - unreachable + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount end - local.get $0 - call $~lib/rt/tlsf/__free ) ) diff --git a/tests/compiler/simd.ts b/tests/compiler/simd.ts index 80d243ebaf..e7c2acce90 100644 --- a/tests/compiler/simd.ts +++ b/tests/compiler/simd.ts @@ -1,5 +1,9 @@ // hint: asc tests/compiler/simd --enable simd - +{ + // test static array literal + let arr = [i32x4(1, 2, 3, 4)]; + assert(v128.extract_lane(arr[0], 0) == 1); +} function test_v128(): void { // check trueish // @ts-ignore @@ -188,6 +192,83 @@ function test_v128(): void { assert(v == i32x4(42, 0, 0, 0)); __free(ptr); } + { + let ptr = __alloc(16); + store(ptr, 42); + let v: v128 = v128(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + v = v128.load_lane(ptr, v, 0); + assert(v == i32x4(42, 0, 0, 0)); + v = v128.load8_lane(ptr, v, 0); + assert(v == v128(42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); + v = v128.load16_lane(ptr, v, 0); + assert(v == i16x8(42, 0, 0, 0, 0, 0, 0, 0)); + v = v128.load32_lane(ptr, v, 0); + assert(v == i32x4(42, 0, 0, 0)); + v = v128.load64_lane(ptr, v, 0); + assert(v == i64x2(42, 0)); + __free(ptr); + } + { + let v: v128 = v128.ceil(f32x4(1.1, -0.25, 70.01, 4.0)); + assert(v == f32x4(2, -0.0, 71, 4)); + } + { + let v: v128 = v128.floor(f32x4(1.1, -0.25, 70.01, 4.0)); + assert(v == f32x4(1, -1, 70, 4)); + } + { + assert( + v128.bitmask(i8x16( + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE)) == 0x0000FFFF + ); + assert( + v128.bitmask(i8x16(-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xF)) == 0x00000001 + ); + assert( + v128.bitmask(i16x8( + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE)) == 0x000000FF + ); + assert( + v128.bitmask(i16x8(-1, 0, 1, 2, 0xB, 0xC, 0xD, 0xF)) == 0x00000001 + ); + assert( + v128.bitmask(i32x4(1, -1, 1, -1)) == 10 + ); + assert( + v128.bitmask(i32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 0x0000000F + ); + assert( + v128.bitmask(i32x4(-1, 0, 1, 0xF)) == 1 + ); + assert( + v128.bitmask(i64x2(0xFFFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF)) == 0x00000003 + ); + assert( + v128.bitmask(i64x2(-1, 0xF)) == 0x00000001 + ); + } // TODO: missing C-API in Binaryen (see also passes/pass.ts) // v128.load8_lane // v128.load16_lane @@ -328,6 +409,55 @@ function test_i8x16(): void { ); assert(i8x16.popcnt(a) == v128(0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4)); } + + assert(i8x16.abs(i8x16(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)) == i8x16(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + assert(i8x16.abs(i8x16(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)) == i8x16(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); + assert(i8x16.abs(i8x16( + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE)) + == + i8x16(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) + ); + assert(i8x16.abs(i8x16(-128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128)) + == + i8x16(i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128), i8(128)) + ); + assert( + i8x16.bitmask(i8x16( + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE, + u8.MAX_VALUE)) == 0x0000FFFF + ); + assert( + i8x16.bitmask(i8x16(-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xF)) == 0x00000001 + ); } function test_i16x8(): void { @@ -480,6 +610,51 @@ function test_i16x8(): void { i16x8.extmul_low_i8x16_u(a, a); i16x8.extmul_high_i8x16_s(a, a); i16x8.extmul_high_i8x16_u(a, a); + assert(i16x8.abs(i16x8(1, 1, 1, 1, 1, 1, 1, 1)) == i16x8(1, 1, 1, 1, 1, 1, 1, 1)); + assert(i16x8.abs(i16x8(-1, -1, -1, -1, -1, -1, -1, -1)) == i16x8(1, 1, 1, 1, 1, 1, 1, 1)); + assert(i16x8.abs(i16x8( + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE)) == i16x8(1, 1, 1, 1, 1, 1, 1, 1)); + assert(i16x8.abs(i16x8( + -32768, + -32768, + -32768, + -32768, + -32768, + -32768, + -32768, + -32768)) + == + i16x8( + i16(32768), + i16(32768), + i16(32768), + i16(32768), + i16(32768), + i16(32768), + i16(32768), + i16(32768)) + ); + assert( + i16x8.bitmask(i16x8( + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE, + u16.MAX_VALUE)) == 0x000000FF + ); + assert( + i16x8.bitmask(i16x8(-1, 0, 1, 2, 0xB, 0xC, 0xD, 0xF)) == 0x00000001 + ); } function test_i32x4(): void { @@ -609,6 +784,19 @@ function test_i32x4(): void { i32x4.extmul_low_i16x8_u(a, a); i32x4.extmul_high_i16x8_s(a, a); i32x4.extmul_high_i16x8_u(a, a); + assert(i32x4.abs(i32x4(1, 1, 1, 1)) == i32x4(1, 1, 1, 1)); + assert(i32x4.abs(i32x4(-1, -1, -1, -1)) == i32x4(1, 1, 1, 1)); + assert(i32x4.abs(i32x4(u32.MAX_VALUE, u32.MAX_VALUE, u32.MAX_VALUE, u32.MAX_VALUE)) == i32x4(1, 1, 1, 1)); + assert(i32x4.abs(i32x4(-2147483648, -2147483648, -2147483648, -2147483648)) == i32x4(2147483648, 2147483648, 2147483648, 2147483648)); + assert( + i32x4.bitmask(i32x4(1, -1, 1, -1)) == 10 + ); + assert( + i32x4.bitmask(i32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 0x0000000F + ); + assert( + i32x4.bitmask(i32x4(-1, 0, 1, 0xF)) == 1 + ); } function test_i64x2(): void { @@ -663,6 +851,63 @@ function test_i64x2(): void { i64x2.extmul_low_i32x4_u(a, a); i64x2.extmul_high_i32x4_s(a, a); i64x2.extmul_high_i32x4_u(a, a); + assert(i64x2.eq(i64x2(12, 12),i64x2(12, 12)) == i64x2(-1, -1)); + assert(i64x2.eq(i64x2(12, 12),i64x2(12, 13)) == i64x2(-1, 0)); + assert(i64x2.ne(i64x2(12, 12),i64x2(12, 13)) == i64x2(0, -1)); + assert(i64x2.ne(i64x2(11, 12),i64x2(12, 13)) == i64x2(-1, -1)); + assert(i64x2.lt_s(i64x2(1, 0), i64x2(2, 0)) == i64x2(-1, 0)); + assert(i64x2.lt_s(i64x2(1, 0), i64x2(2, 1)) == i64x2(-1, -1)); + assert(i64x2.le_s(i64x2(1, 0), i64x2(2, 0)) == i64x2(-1, -1)); + assert(i64x2.le_s(i64x2(1, 0), i64x2(2, 1)) == i64x2(-1, -1)); + assert(i64x2.gt_s(i64x2(2, 0), i64x2(1, 0)) == i64x2(-1, 0)); + assert(i64x2.gt_s(i64x2(2, 1), i64x2(1, 0)) == i64x2(-1, -1)); + assert(i64x2.ge_s(i64x2(2, 0), i64x2(1, 0)) == i64x2(-1, -1)); + assert(i64x2.ge_s(i64x2(2, 1), i64x2(1, 0)) == i64x2(-1, -1)); + assert(i64x2.extend_low_i32x4_s(i32x4(-1, 1, 1, -1)) == i64x2(-1, 1)); + assert(i64x2.extend_low_i32x4_s(i32x4(0, 0, 1, -1)) == i64x2(0, 0)); + assert(i64x2.extend_low_i32x4_s(i32x4(1, 1, 0, 0)) == i64x2(1, 1)); + assert(i64x2.extend_low_i32x4_s(i32x4(1, 0, 1, 0)) == i64x2(1, 0)); + assert(i64x2.extend_low_i32x4_s(i32x4(-2147483648, -2147483648, 2147483647, 2147483647)) == i64x2(-2147483648, -2147483648)); + assert(i64x2.extend_low_i32x4_s(i32x4(-1, -1, 2147483647, 2147483647)) == i64x2(-1, -1)); + assert(i64x2.extend_low_i32x4_u(i32x4(0, 0, 0, 0)) == i64x2(0, 0)); + assert(i64x2.extend_low_i32x4_u(i32x4(0, 0, 1, -1)) == i64x2(0, 0)); + assert(i64x2.extend_low_i32x4_u(i32x4(1, 1, 0, 0)) == i64x2(1, 1)); + assert(i64x2.extend_low_i32x4_u(i32x4(-1, -1, 0, 0)) == i64x2(4294967295, 4294967295)); + assert(i64x2.extend_low_i32x4_u(i32x4(-2147483648, -2147483648, -2147483648, -2147483648)) + == + i64x2(2147483648, 2147483648) + ); + assert(i64x2.extend_low_i32x4_u(i32x4(-1, -1, 2147483647, 2147483647)) + == + i64x2(4294967295, 4294967295) + ); + assert(i64x2.extend_high_i32x4_s(i32x4(-1, 1, 1, -1)) == i64x2(1, -1)); + assert(i64x2.extend_high_i32x4_s(i32x4(0, 0, 1, -1)) == i64x2(1, -1)); + assert(i64x2.extend_high_i32x4_s(i32x4(1, 1, 0, 0)) == i64x2(0, 0)); + assert(i64x2.extend_high_i32x4_s(i32x4(1, 0, 1, 0)) == i64x2(1, 0)); + assert(i64x2.extend_high_i32x4_s(i32x4(-2147483648, -2147483648, 2147483647, 2147483647)) == i64x2(2147483647, 2147483647)); + assert(i64x2.extend_high_i32x4_s(i32x4(-1, -1, 2147483647, 2147483647)) == i64x2(2147483647, 2147483647)); + assert(i64x2.extend_high_i32x4_u(i32x4(0, 0, 0, 0)) == i64x2(0, 0)); + assert(i64x2.extend_high_i32x4_u(i32x4(0, 0, 1, -1)) == i64x2(1, 4294967295)); + assert(i64x2.extend_high_i32x4_u(i32x4(1, 1, 0, 0)) == i64x2(0, 0)); + assert(i64x2.extend_high_i32x4_u(i32x4(0, 0, -1, -1)) == i64x2(4294967295, 4294967295)); + assert(i64x2.extend_high_i32x4_u(i32x4(-2147483648, -2147483648, -2147483648, -2147483648)) + == + i64x2(2147483648, 2147483648) + ); + assert(i64x2.extend_high_i32x4_u(i32x4(2147483647, 2147483647, -1, -1)) + == + i64x2(4294967295, 4294967295) + ); + assert(i64x2.abs(i64x2(1, 1)) == i64x2(1, 1)); + assert(i64x2.abs(i64x2(u64.MAX_VALUE, u64.MAX_VALUE)) == i64x2(1, 1)); + assert(i64x2.abs(i64x2(-9223372036854775808, -9223372036854775808)) == i64x2(9223372036854775808, 9223372036854775808)); + assert( + i64x2.bitmask(i64x2(0xFFFFFFFF_FFFFFFFF, 0xFFFFFFFF_FFFFFFFF)) == 0x00000003 + ); + assert( + i64x2.bitmask(i64x2(-1, 0xF)) == 0x00000001 + ); } function test_f32x4(): void { @@ -717,6 +962,34 @@ function test_f32x4(): void { // TODO: unimp in Binaryen's interpreter f32x4.demote_f64x2_zero(a); + assert( + f32x4.pmin(f32x4(1, -1, 1, -1), f32x4(-1, 1, -1, 1)) + == + f32x4(-1, -1, -1, -1) + ); + assert( + f32x4.pmax(f32x4(1, -1, 1, -1), f32x4(-1, 1, -1, 1)) + == + f32x4(1, 1, 1, 1) + ); + { + let v: v128 = f32x4.ceil(f32x4(1.1, -0.25, 70.01, 4.0)); + assert(v == f32x4(2, -0.0, 71, 4)); + } + { + let v: v128 =f32x4.floor(f32x4(1.1, -0.25, 70.01, 4.0)); + assert(v == f32x4(1, -1, 70, 4)); + } + assert( + f32x4.trunc(f32x4(1.1, 2.5, 3.9, 4.0)) + == + f32x4(1.0, 2.0, 3.0, 4.0) + ); + assert( + f32x4.nearest(f32x4(1.1, 2.5, 3.51, 4.0)) + == + f32x4(1.0, 2.0, 4.0, 4.0) + ); } function test_f64x2(): void { @@ -763,6 +1036,34 @@ function test_f64x2(): void { f64x2.convert_low_i32x4_s(a); f64x2.convert_low_i32x4_u(a); f64x2.promote_low_f32x4(a); + assert( + f64x2.pmin(f64x2(1, -1), f64x2(-1, 1)) + == + f64x2(-1, -1) + ); + assert( + f64x2.pmax(f64x2(1, -1), f64x2(-1, 1)) + == + f64x2(1, 1) + ); + { + let v: v128 = f64x2.ceil(f64x2(1.1, -0.25)); + assert(v == f64x2(2, -0.0)); + } + { + let v: v128 =f64x2.floor(f64x2(1.1, -0.25)); + assert(v == f64x2(1, -1)); + } + assert( + f64x2.trunc(f64x2(1.1, 3.9)) + == + f64x2(1.0, 3.0) + ); + assert( + f64x2.nearest(f64x2(1.1, 3.51)) + == + f64x2(1.0, 4.0) + ); } function test_const(): v128 {