From cf408ddff5f91c321133d4fdc6dd0ef299f4d210 Mon Sep 17 00:00:00 2001 From: chen ruixiang Date: Thu, 25 Aug 2022 16:59:18 +0800 Subject: [PATCH 1/3] Fix: add missed tests for simd with type usize and isize --- tests/compiler/simd.debug.wat | 976 +++++++++++++++++++++++++++++++- tests/compiler/simd.release.wat | 316 ++++++++++- tests/compiler/simd.ts | 136 +++++ 3 files changed, 1395 insertions(+), 33 deletions(-) diff --git a/tests/compiler/simd.debug.wat b/tests/compiler/simd.debug.wat index 43014db8e4..0188d8c644 100644 --- a/tests/compiler/simd.debug.wat +++ b/tests/compiler/simd.debug.wat @@ -3,13 +3,14 @@ (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (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_=>_none (func (param 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_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 $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $none_=>_v128 (func (result v128))) (type $v128_=>_v128 (func (param v128) (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))) @@ -45,10 +46,13 @@ (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (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)) + (global $~lib/process/process.arch i32 (i32.const 576)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/builtins/usize.MAX_VALUE i32 (i32.const -1)) + (global $~lib/rt/__rtti_base i32 (i32.const 624)) + (global $~lib/memory/__data_end i32 (i32.const 668)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17052)) + (global $~lib/memory/__heap_base i32 (i32.const 17052)) (memory $0 1) (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") @@ -61,7 +65,9 @@ (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") + (data (i32.const 556) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00w\00a\00s\00m\003\002\00") + (data (i32.const 588) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00w\00a\00s\00m\006\004\00") + (data (i32.const 624) "\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 "reexport" (func $simd/reexport)) @@ -6445,6 +6451,161 @@ i32.ne drop ) + (func $~lib/string/String#get:length (param $this i32) (result i32) + local.get $this + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + ) + (func $~lib/util/string/compareImpl (param $str1 i32) (param $index1 i32) (param $str2 i32) (param $index2 i32) (param $len i32) (result i32) + (local $ptr1 i32) + (local $ptr2 i32) + (local $var$7 i32) + (local $a i32) + (local $b i32) + local.get $str1 + local.get $index1 + i32.const 1 + i32.shl + i32.add + local.set $ptr1 + local.get $str2 + local.get $index2 + i32.const 1 + i32.shl + i32.add + local.set $ptr2 + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $len + i32.const 4 + i32.ge_u + if (result i32) + local.get $ptr1 + i32.const 7 + i32.and + local.get $ptr2 + i32.const 7 + i32.and + i32.or + i32.eqz + else + i32.const 0 + end + if + block $do-break|0 + loop $do-loop|0 + local.get $ptr1 + i64.load + local.get $ptr2 + i64.load + i64.ne + if + br $do-break|0 + end + local.get $ptr1 + i32.const 8 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 8 + i32.add + local.set $ptr2 + local.get $len + i32.const 4 + i32.sub + local.set $len + local.get $len + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $len + local.tee $var$7 + i32.const 1 + i32.sub + local.set $len + local.get $var$7 + local.set $var$7 + local.get $var$7 + if + local.get $ptr1 + i32.load16_u + local.set $a + local.get $ptr2 + i32.load16_u + local.set $b + local.get $a + local.get $b + i32.ne + if + local.get $a + local.get $b + i32.sub + return + end + local.get $ptr1 + i32.const 2 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 2 + i32.add + local.set $ptr2 + br $while-continue|1 + end + end + i32.const 0 + ) + (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) + (local $leftLength i32) + local.get $left + local.get $right + i32.eq + if + i32.const 1 + return + end + local.get $left + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $right + i32.const 0 + i32.eq + end + if + i32.const 0 + return + end + local.get $left + call $~lib/string/String#get:length + local.set $leftLength + local.get $leftLength + local.get $right + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + return + end + local.get $left + i32.const 0 + local.get $right + i32.const 0 + local.get $leftLength + call $~lib/util/string/compareImpl + i32.eqz + ) (func $simd/test_const (result v128) (local $var$0 v128) v128.const i32x4 0x00000001 0x00000001 0x00000001 0x00000001 @@ -6522,6 +6683,8 @@ call $simd/test_i64x2 call $simd/test_f32x4 call $simd/test_f64x2 + call $simd/test_usize + call $simd/test_isize call $simd/test_const drop global.get $~lib/memory/__stack_pointer @@ -6666,6 +6829,13 @@ ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) + global.get $~lib/process/process.arch + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end i32.const 272 local.get $0 call $~lib/rt/itcms/__visit @@ -6752,14 +6922,804 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 17008 - i32.const 17056 + i32.const 17072 + i32.const 17120 i32.const 1 i32.const 1 call $~lib/builtins/abort unreachable end ) + (func $simd/test_usize + (local $0 i32) + (local $1 v128) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.mul + i32.const 42 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 2 + i32x4.splat + i32x4.mul + i32.const 84 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 24 + i32x4.splat + i32x4.add + i32.const 66 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32x4.extract_lane 0 + i32.const 42 + i32.eq + drop + i32.const 42 + i32x4.splat + i32.const 24 + i32x4.replace_lane 0 + i32x4.extract_lane 0 + i32.const 24 + i32.eq + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.add + i32.const 43 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.sub + i32.const 41 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.eq + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.eq + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.ne + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.ne + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + global.get $~lib/process/process.arch + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 576 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__eq + if + i32.const 1 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.le_u + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.le_u + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.lt_u + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.lt_u + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.ge_u + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.ge_u + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.gt_u + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.gt_u + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + end + i32.const 1 + i32x4.splat + i32x4.neg + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + global.get $~lib/builtins/usize.MAX_VALUE + i32x4.splat + i32x4.neg + i32.const 1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.eq + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 42 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.shl + i32.const 2 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 2 + i32x4.splat + i32.const 1 + i32x4.shr_u + i32.const 1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32x4.all_true + i32.const 0 + i32.ne + drop + global.get $~lib/process/process.arch + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 576 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__eq + if + global.get $~lib/builtins/usize.MAX_VALUE + i32x4.splat + i32x4.bitmask + i32.const 15 + i32.eq + drop + i32.const 0 + i32x4.splat + i32x4.bitmask + i32.const 0 + i32.eq + drop + end + global.get $~lib/process/process.arch + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 608 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__eq + if + global.get $~lib/builtins/usize.MAX_VALUE + i32x4.splat + i32x4.bitmask + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 1137 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32x4.splat + i32x4.bitmask + i32.const 0 + i32.eq + drop + end + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i32.const 42 + i32.store + i32.const 0 + i32x4.splat + local.set $1 + local.get $0 + local.get $1 + v128.load32_lane 0 + local.set $1 + local.get $1 + i32x4.extract_lane 0 + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 1153 + 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 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $simd/test_isize + (local $0 i32) + (local $1 v128) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 42 + i32x4.splat + i32x4.extract_lane 0 + i32.const 42 + i32.eq + drop + i32.const 42 + i32x4.splat + i32.const 24 + i32x4.replace_lane 0 + i32x4.extract_lane 0 + i32.const 24 + i32.eq + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.add + i32.const 43 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.mul + i32.const 42 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.sub + i32.const 41 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.eq + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.eq + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.ne + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.ne + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.le_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.le_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.lt_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.lt_s + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.ge_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.ge_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.gt_s + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.splat + i32x4.gt_s + i32.const 0 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32.const 42 + i32x4.splat + i32x4.eq + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32x4.neg + i32.const -1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const -1 + i32x4.splat + i32x4.neg + i32.const 1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + global.get $~lib/builtins/usize.MAX_VALUE + i32x4.splat + i32x4.neg + i32.const 1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 42 + i32x4.splat + i32x4.abs + i32.const 42 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32.const 1 + i32x4.shl + i32.const 2 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 2 + i32x4.splat + i32.const 1 + i32x4.shr_s + i32.const 1 + i32x4.splat + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + i32.const 1 + i32x4.splat + i32x4.all_true + i32.const 0 + i32.ne + drop + global.get $~lib/process/process.arch + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 576 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__eq + if + global.get $~lib/builtins/usize.MAX_VALUE + i32x4.splat + i32x4.bitmask + i32.const 15 + i32.eq + drop + i32.const 0 + i32x4.splat + i32x4.bitmask + i32.const 0 + i32.eq + drop + end + global.get $~lib/process/process.arch + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 608 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__eq + if + global.get $~lib/builtins/usize.MAX_VALUE + i32x4.splat + i32x4.bitmask + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 1197 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32x4.splat + i32x4.bitmask + i32.const 0 + i32.eq + drop + end + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $0 + local.get $0 + i32.const 42 + i32.store + i32.const 0 + i32x4.splat + local.set $1 + local.get $0 + local.get $1 + v128.load32_lane 0 + local.set $1 + local.get $1 + i32x4.extract_lane 0 + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 528 + i32.const 1213 + 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 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) diff --git a/tests/compiler/simd.release.wat b/tests/compiler/simd.release.wat index 9ce20cf5a2..277f80324a 100644 --- a/tests/compiler/simd.release.wat +++ b/tests/compiler/simd.release.wat @@ -4,10 +4,10 @@ (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 (func (param 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 $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $v128_=>_v128 (func (param v128) (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))) @@ -30,7 +30,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $simd/vec (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18012)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18076)) (memory $0 1) (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") @@ -48,8 +48,12 @@ (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") + (data (i32.const 1580) "\1c") + (data (i32.const 1592) "\01\00\00\00\0c\00\00\00w\00a\00s\00m\003\002") + (data (i32.const 1612) "\1c") + (data (i32.const 1624) "\01\00\00\00\0c\00\00\00w\00a\00s\00m\006\004") + (data (i32.const 1648) "\05\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 1676) "\02\04\00\00\00\00\00\00\02\t") (export "reexport" (func $simd/reexport)) (export "test_vars_i8x16_partial" (func $simd/test_vars_i8x16_partial)) (export "test_vars_i8x16_full" (func $simd/test_vars_i8x16_full)) @@ -69,6 +73,8 @@ (func $~lib/rt/itcms/visitRoots (local $0 i32) (local $1 i32) + i32.const 1600 + call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1296 call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1104 @@ -144,7 +150,7 @@ if i32.const 0 local.get $0 - i32.const 18012 + i32.const 18076 i32.lt_u local.get $0 i32.load offset=8 @@ -195,7 +201,7 @@ i32.const 1 else local.get $1 - i32.const 1584 + i32.const 1648 i32.load i32.gt_u if @@ -209,7 +215,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 1588 + i32.const 1652 i32.add i32.load i32.const 32 @@ -774,10 +780,10 @@ if unreachable end - i32.const 18016 + i32.const 18080 i32.const 0 i32.store - i32.const 19584 + i32.const 19648 i32.const 0 i32.store loop $for-loop|0 @@ -788,7 +794,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 18016 + i32.const 18080 i32.add i32.const 0 i32.store offset=4 @@ -806,7 +812,7 @@ i32.add i32.const 2 i32.shl - i32.const 18016 + i32.const 18080 i32.add i32.const 0 i32.store offset=96 @@ -824,20 +830,20 @@ br $for-loop|0 end end - i32.const 18016 - i32.const 19588 + i32.const 18080 + i32.const 19652 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 18016 + i32.const 18080 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/tlsf/__free (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 - i32.const 18012 + i32.const 18076 i32.lt_u if return @@ -967,7 +973,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 18012 + i32.const 18076 i32.lt_u if local.get $0 @@ -1067,7 +1073,7 @@ unreachable end local.get $0 - i32.const 18012 + i32.const 18076 i32.lt_u if local.get $0 @@ -1845,6 +1851,117 @@ local.get $0 call $~lib/rt/tlsf/__free ) + (func $~lib/string/String.__eq (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.const 1600 + i32.eq + if + i32.const 1 + return + end + local.get $0 + i32.eqz + if + i32.const 0 + return + end + i32.const 1596 + i32.load + i32.const 1 + i32.shr_u + local.tee $2 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.ne + if + i32.const 0 + return + end + i32.const 1600 + local.set $3 + local.get $0 + local.tee $1 + i32.const 7 + i32.and + i32.eqz + local.get $2 + local.tee $0 + i32.const 4 + i32.ge_u + i32.and + if + loop $do-loop|0 + local.get $3 + i64.load + local.get $1 + i64.load + i64.eq + if + local.get $3 + i32.const 8 + i32.add + local.set $3 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $0 + i32.const 4 + i32.sub + local.tee $0 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + block $__inlined_func$~lib/util/string/compareImpl + loop $while-continue|1 + local.get $0 + local.tee $2 + i32.const 1 + i32.sub + local.set $0 + local.get $2 + if + local.get $3 + i32.load16_u + local.tee $4 + local.get $1 + i32.load16_u + local.tee $5 + i32.sub + local.set $2 + local.get $4 + local.get $5 + i32.ne + br_if $__inlined_func$~lib/util/string/compareImpl + local.get $3 + i32.const 2 + i32.add + local.set $3 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 + end + end + i32.const 0 + local.set $2 + end + local.get $2 + i32.eqz + ) (func $start:simd (local $0 i32) (local $1 i32) @@ -1855,11 +1972,11 @@ i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer - block $folding-inner0 + block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 1628 + i32.const 1692 i32.lt_s - br_if $folding-inner0 + br_if $folding-inner1 global.get $~lib/memory/__stack_pointer local.tee $0 i32.const 0 @@ -1867,7 +1984,7 @@ memory.size i32.const 16 i32.shl - i32.const 18012 + i32.const 18076 i32.sub i32.const 1 i32.shr_u @@ -1901,9 +2018,9 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1628 + i32.const 1692 i32.lt_s - br_if $folding-inner0 + br_if $folding-inner1 global.get $~lib/memory/__stack_pointer local.tee $1 i32.const 0 @@ -2179,13 +2296,162 @@ local.get $0 call $~lib/rt/tlsf/__free global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1692 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store + local.get $0 + i32.const 1600 + i32.store + local.get $0 + i32.const 1600 + i32.store offset=4 + i32.const 1600 + call $~lib/string/String.__eq + drop + global.get $~lib/memory/__stack_pointer + i32.const 1600 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1600 + i32.store offset=4 + i32.const 1600 + call $~lib/string/String.__eq + drop + global.get $~lib/memory/__stack_pointer + i32.const 1600 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1632 + i32.store offset=4 + i32.const 1632 + call $~lib/string/String.__eq + if + i32.const 0 + i32.const 1552 + i32.const 1137 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + 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 + i32x4.extract_lane 0 + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1552 + i32.const 1153 + 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 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1692 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store + local.get $0 + i32.const 1600 + i32.store + local.get $0 + i32.const 1600 + i32.store offset=4 + i32.const 1600 + call $~lib/string/String.__eq + drop + global.get $~lib/memory/__stack_pointer + i32.const 1600 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1632 + i32.store offset=4 + i32.const 1632 + call $~lib/string/String.__eq + if + i32.const 0 + i32.const 1552 + i32.const 1197 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + 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 + i32x4.extract_lane 0 + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1552 + i32.const 1213 + 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 8 + i32.add + global.set $~lib/memory/__stack_pointer + 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 18096 + i32.const 18144 i32.const 1 i32.const 1 call $~lib/builtins/abort diff --git a/tests/compiler/simd.ts b/tests/compiler/simd.ts index 2a68d5cb8b..2255149c42 100644 --- a/tests/compiler/simd.ts +++ b/tests/compiler/simd.ts @@ -1080,6 +1080,140 @@ function test_f64x2(): void { f64x2(1.0, 4.0) ); } +function test_usize(): void { + assert( + v128.mul(v128.splat(42), v128.splat(1)) + == + v128.splat(42) + ); + assert( + v128.mul(v128.splat(42), v128.splat(2)) + == + v128.splat(84) + ); + assert( + v128.add(v128.splat(42), v128.splat(24)) + == + v128.splat(66) + ); + assert(v128.extract_lane(v128.splat(42), 0) == 42); + assert(v128.extract_lane(v128.replace_lane(v128.splat(42), 0, 24), 0) == 24); + assert(v128.add(v128.splat(42), v128.splat(1)) == v128.splat(43)); + assert(v128.sub(v128.splat(42), v128.splat(1)) == v128.splat(41)); + assert(v128.eq(v128.splat(42), v128.splat(1)) == v128.splat(0)); + assert(v128.eq(v128.splat(42), v128.splat(42)) == v128.splat(-1)); + assert(v128.ne(v128.splat(42), v128.splat(1)) == v128.splat(-1)); + assert(v128.ne(v128.splat(42), v128.splat(42)) == v128.splat(0)); + if (process.arch == "wasm32") { // binary does not have opcode: LtU64x2, LeU64x2, GtU64x2, GeU64x2 + assert(v128.le(v128.splat(1), v128.splat(42)) == v128.splat(-1)); + assert(v128.le(v128.splat(1), v128.splat(1)) == v128.splat(-1)); + assert(v128.lt(v128.splat(1), v128.splat(42)) == v128.splat(-1)); + assert(v128.lt(v128.splat(1), v128.splat(1)) == v128.splat(0)); + assert(v128.ge(v128.splat(42), v128.splat(1)) == v128.splat(-1)); + assert(v128.ge(v128.splat(1), v128.splat(1)) == v128.splat(-1)); + assert(v128.gt(v128.splat(42), v128.splat(1)) == v128.splat(-1)); + assert(v128.gt(v128.splat(1), v128.splat(1)) == v128.splat(0)); + } + assert(v128.neg(v128.splat(1)) == v128.splat(-1)); + assert(v128.neg(v128.splat(usize.MAX_VALUE)) == v128.splat(1)); + assert(v128.eq(v128.splat(42), v128.splat(42)) == v128.splat(-1)); + assert(v128.abs(v128.splat(42)) == v128.splat(42)); + assert(v128.shl(v128.splat(1), 1) == v128.splat(2)); + assert(v128.shr(v128.splat(2), 1) == v128.splat(1)); + assert(v128.all_true(v128.splat(1))); + if (process.arch == "wasm32") { //bitmask will return different value depends on compile target + assert( + v128.bitmask(v128.splat(usize.MAX_VALUE)) + == + 0xf + ); + assert( + v128.bitmask(v128.splat(0)) + == + 0 + ); + } + if (process.arch == "wasm64") { + assert( + v128.bitmask(v128.splat(usize.MAX_VALUE)) + == + 0x3 + ); + assert( + v128.bitmask(v128.splat(0)) + == + 0 + ); + } + { + let ptr = __alloc(16); + store(ptr, 42); + let v: v128 = v128.splat(0); + v = v128.load_lane(ptr, v, 0); + assert(v128.extract_lane(v, 0) == 42); + __free(ptr); + } +} + +function test_isize(): void { + assert(v128.extract_lane(v128.splat(42), 0) == 42); + assert(v128.extract_lane(v128.replace_lane(v128.splat(42), 0, 24), 0) == 24); + assert(v128.add(v128.splat(42), v128.splat(1)) == v128.splat(43)); + assert(v128.mul(v128.splat(42), v128.splat(1)) == v128.splat(42)); + assert(v128.sub(v128.splat(42), v128.splat(1)) == v128.splat(41)); + assert(v128.eq(v128.splat(42), v128.splat(1)) == v128.splat(0)); + assert(v128.eq(v128.splat(42), v128.splat(42)) == v128.splat(-1)); + assert(v128.ne(v128.splat(42), v128.splat(1)) == v128.splat(-1)); + assert(v128.ne(v128.splat(42), v128.splat(42)) == v128.splat(0)); + assert(v128.le(v128.splat(1), v128.splat(42)) == v128.splat(-1)); + assert(v128.le(v128.splat(1), v128.splat(1)) == v128.splat(-1)); + assert(v128.lt(v128.splat(1), v128.splat(42)) == v128.splat(-1)); + assert(v128.lt(v128.splat(1), v128.splat(1)) == v128.splat(0)); + assert(v128.ge(v128.splat(42), v128.splat(1)) == v128.splat(-1)); + assert(v128.ge(v128.splat(1), v128.splat(1)) == v128.splat(-1)); + assert(v128.gt(v128.splat(42), v128.splat(1)) == v128.splat(-1)); + assert(v128.gt(v128.splat(1), v128.splat(1)) == v128.splat(0)); + assert(v128.eq(v128.splat(42), v128.splat(42)) == v128.splat(-1)); + assert(v128.neg(v128.splat(1)) == v128.splat(-1)); + assert(v128.neg(v128.splat(-1)) == v128.splat(1)); + assert(v128.neg(v128.splat(usize.MAX_VALUE)) == v128.splat(1)); + assert(v128.abs(v128.splat(42)) == v128.splat(42)); + assert(v128.shl(v128.splat(1), 1) == v128.splat(2)); + assert(v128.shr(v128.splat(2), 1) == v128.splat(1)); + assert(v128.all_true(v128.splat(1))); + if (process.arch == "wasm32") { //bitmask will return different value depends on compile target + assert( + v128.bitmask(v128.splat(usize.MAX_VALUE)) + == + 0xf + ); + assert( + v128.bitmask(v128.splat(0)) + == + 0 + ); + } + if (process.arch == "wasm64") { + assert( + v128.bitmask(v128.splat(usize.MAX_VALUE)) + == + 0x3 + ); + assert( + v128.bitmask(v128.splat(0)) + == + 0 + ); + } + { + let ptr = __alloc(16); + store(ptr, 42); + let v: v128 = v128.splat(0); + v = v128.load_lane(ptr, v, 0); + assert(v128.extract_lane(v, 0) == 42); + __free(ptr); + } +} function test_const(): v128 { const one = i32x4.splat(1); // should precompute @@ -1163,4 +1297,6 @@ test_i32x4(); test_i64x2(); test_f32x4(); test_f64x2(); +test_usize(); +test_isize(); test_const(); From e05ed663caa474aff7a255cd98b7da8d2b04f9be Mon Sep 17 00:00:00 2001 From: chen ruixiang Date: Thu, 25 Aug 2022 17:43:52 +0800 Subject: [PATCH 2/3] fix format issue --- tests/compiler/simd.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/compiler/simd.ts b/tests/compiler/simd.ts index 2255149c42..81ebfe79b4 100644 --- a/tests/compiler/simd.ts +++ b/tests/compiler/simd.ts @@ -1121,7 +1121,7 @@ function test_usize(): void { assert(v128.shl(v128.splat(1), 1) == v128.splat(2)); assert(v128.shr(v128.splat(2), 1) == v128.splat(1)); assert(v128.all_true(v128.splat(1))); - if (process.arch == "wasm32") { //bitmask will return different value depends on compile target + if (process.arch == "wasm32") { // bitmask will return different value depends on compile target assert( v128.bitmask(v128.splat(usize.MAX_VALUE)) == @@ -1181,7 +1181,7 @@ function test_isize(): void { assert(v128.shl(v128.splat(1), 1) == v128.splat(2)); assert(v128.shr(v128.splat(2), 1) == v128.splat(1)); assert(v128.all_true(v128.splat(1))); - if (process.arch == "wasm32") { //bitmask will return different value depends on compile target + if (process.arch == "wasm32") { // bitmask will return different value depends on compile target assert( v128.bitmask(v128.splat(usize.MAX_VALUE)) == From 11a05957fc5f356533eb19521642443fe78b2a47 Mon Sep 17 00:00:00 2001 From: chen ruixiang Date: Thu, 1 Sep 2022 17:06:31 +0800 Subject: [PATCH 3/3] fix conflicts --- tests/compiler/simd.debug.wat | 42 ++--- tests/compiler/simd.release.wat | 316 +++++++++++++++++++++++++++++--- 2 files changed, 312 insertions(+), 46 deletions(-) diff --git a/tests/compiler/simd.debug.wat b/tests/compiler/simd.debug.wat index a7d52d5664..d5dcf270dc 100644 --- a/tests/compiler/simd.debug.wat +++ b/tests/compiler/simd.debug.wat @@ -6455,7 +6455,7 @@ local.get $this i32.const 20 i32.sub - i32.load offset=16 + i32.load $0 offset=16 i32.const 1 i32.shr_u ) @@ -6500,9 +6500,9 @@ block $do-break|0 loop $do-loop|0 local.get $ptr1 - i64.load + i64.load $0 local.get $ptr2 - i64.load + i64.load $0 i64.ne if br $do-break|0 @@ -6537,10 +6537,10 @@ local.get $var$7 if local.get $ptr1 - i32.load16_u + i32.load16_u $0 local.set $a local.get $ptr2 - i32.load16_u + i32.load16_u $0 local.set $b local.get $a local.get $b @@ -6941,7 +6941,7 @@ call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 - i64.store + i64.store $0 i32.const 42 i32x4.splat i32.const 1 @@ -7068,13 +7068,13 @@ local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store $0 local.get $2 i32.const 576 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store offset=4 + i32.store $0 offset=4 local.get $2 call $~lib/string/String.__eq if @@ -7248,13 +7248,13 @@ local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store $0 local.get $2 i32.const 576 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store offset=4 + i32.store $0 offset=4 local.get $2 call $~lib/string/String.__eq if @@ -7275,13 +7275,13 @@ local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store $0 local.get $2 i32.const 608 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store offset=4 + i32.store $0 offset=4 local.get $2 call $~lib/string/String.__eq if @@ -7311,13 +7311,13 @@ local.set $0 local.get $0 i32.const 42 - i32.store + i32.store $0 i32.const 0 i32x4.splat local.set $1 local.get $0 local.get $1 - v128.load32_lane 0 + v128.load32_lane $0 0 local.set $1 local.get $1 i32x4.extract_lane 0 @@ -7350,7 +7350,7 @@ call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 - i64.store + i64.store $0 i32.const 42 i32x4.splat i32x4.extract_lane 0 @@ -7629,13 +7629,13 @@ local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store $0 local.get $2 i32.const 576 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store offset=4 + i32.store $0 offset=4 local.get $2 call $~lib/string/String.__eq if @@ -7656,13 +7656,13 @@ local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store $0 local.get $2 i32.const 608 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store offset=4 + i32.store $0 offset=4 local.get $2 call $~lib/string/String.__eq if @@ -7692,13 +7692,13 @@ local.set $0 local.get $0 i32.const 42 - i32.store + i32.store $0 i32.const 0 i32x4.splat local.set $1 local.get $0 local.get $1 - v128.load32_lane 0 + v128.load32_lane $0 0 local.set $1 local.get $1 i32x4.extract_lane 0 diff --git a/tests/compiler/simd.release.wat b/tests/compiler/simd.release.wat index f81a93bcf5..85f27f8929 100644 --- a/tests/compiler/simd.release.wat +++ b/tests/compiler/simd.release.wat @@ -4,10 +4,10 @@ (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 (func (param 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 $none_=>_i32 (func (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $v128_=>_v128 (func (param v128) (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))) @@ -30,7 +30,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $simd/vec (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18012)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18076)) (memory $0 1) (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") @@ -48,8 +48,12 @@ (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") + (data (i32.const 1580) "\1c") + (data (i32.const 1592) "\01\00\00\00\0c\00\00\00w\00a\00s\00m\003\002") + (data (i32.const 1612) "\1c") + (data (i32.const 1624) "\01\00\00\00\0c\00\00\00w\00a\00s\00m\006\004") + (data (i32.const 1648) "\05\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 1676) "\02\04\00\00\00\00\00\00\02\t") (export "reexport" (func $simd/reexport)) (export "test_vars_i8x16_partial" (func $simd/test_vars_i8x16_partial)) (export "test_vars_i8x16_full" (func $simd/test_vars_i8x16_full)) @@ -69,6 +73,8 @@ (func $~lib/rt/itcms/visitRoots (local $0 i32) (local $1 i32) + i32.const 1600 + call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1296 call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1104 @@ -146,7 +152,7 @@ i32.load $0 offset=8 i32.eqz local.get $0 - i32.const 18012 + i32.const 18076 i32.lt_u i32.and i32.eqz @@ -195,7 +201,7 @@ i32.const 1 else local.get $1 - i32.const 1584 + i32.const 1648 i32.load $0 i32.gt_u if @@ -209,7 +215,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 1588 + i32.const 1652 i32.add i32.load $0 i32.const 32 @@ -774,10 +780,10 @@ if unreachable end - i32.const 18016 + i32.const 18080 i32.const 0 i32.store $0 - i32.const 19584 + i32.const 19648 i32.const 0 i32.store $0 loop $for-loop|0 @@ -788,7 +794,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 18016 + i32.const 18080 i32.add i32.const 0 i32.store $0 offset=4 @@ -806,7 +812,7 @@ i32.add i32.const 2 i32.shl - i32.const 18016 + i32.const 18080 i32.add i32.const 0 i32.store $0 offset=96 @@ -824,20 +830,20 @@ br $for-loop|0 end end - i32.const 18016 - i32.const 19588 + i32.const 18080 + i32.const 19652 memory.size $0 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 18016 + i32.const 18080 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/tlsf/__free (param $0 i32) (local $1 i32) (local $2 i32) local.get $0 - i32.const 18012 + i32.const 18076 i32.lt_u if return @@ -967,7 +973,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 18012 + i32.const 18076 i32.lt_u if local.get $0 @@ -1067,7 +1073,7 @@ unreachable end local.get $0 - i32.const 18012 + i32.const 18076 i32.lt_u if local.get $0 @@ -1845,6 +1851,117 @@ local.get $0 call $~lib/rt/tlsf/__free ) + (func $~lib/string/String.__eq (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + i32.const 1600 + i32.eq + if + i32.const 1 + return + end + local.get $0 + i32.eqz + if + i32.const 0 + return + end + i32.const 1596 + i32.load $0 + i32.const 1 + i32.shr_u + local.tee $2 + local.get $0 + i32.const 20 + i32.sub + i32.load $0 offset=16 + i32.const 1 + i32.shr_u + i32.ne + if + i32.const 0 + return + end + i32.const 1600 + local.set $3 + local.get $0 + local.tee $1 + i32.const 7 + i32.and + i32.eqz + local.get $2 + local.tee $0 + i32.const 4 + i32.ge_u + i32.and + if + loop $do-loop|0 + local.get $3 + i64.load $0 + local.get $1 + i64.load $0 + i64.eq + if + local.get $3 + i32.const 8 + i32.add + local.set $3 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $0 + i32.const 4 + i32.sub + local.tee $0 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + block $__inlined_func$~lib/util/string/compareImpl + loop $while-continue|1 + local.get $0 + local.tee $2 + i32.const 1 + i32.sub + local.set $0 + local.get $2 + if + local.get $3 + i32.load16_u $0 + local.tee $4 + local.get $1 + i32.load16_u $0 + local.tee $5 + i32.sub + local.set $2 + local.get $4 + local.get $5 + i32.ne + br_if $__inlined_func$~lib/util/string/compareImpl + local.get $3 + i32.const 2 + i32.add + local.set $3 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 + end + end + i32.const 0 + local.set $2 + end + local.get $2 + i32.eqz + ) (func $start:simd (local $0 i32) (local $1 i32) @@ -1855,11 +1972,11 @@ i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer - block $folding-inner0 + block $folding-inner1 global.get $~lib/memory/__stack_pointer - i32.const 1628 + i32.const 1692 i32.lt_s - br_if $folding-inner0 + br_if $folding-inner1 global.get $~lib/memory/__stack_pointer local.tee $0 i32.const 0 @@ -1867,7 +1984,7 @@ memory.size $0 i32.const 16 i32.shl - i32.const 18012 + i32.const 18076 i32.sub i32.const 1 i32.shr_u @@ -1901,9 +2018,9 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1628 + i32.const 1692 i32.lt_s - br_if $folding-inner0 + br_if $folding-inner1 global.get $~lib/memory/__stack_pointer local.tee $1 i32.const 0 @@ -2179,13 +2296,162 @@ local.get $0 call $~lib/rt/tlsf/__free global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1692 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store $0 + local.get $0 + i32.const 1600 + i32.store $0 + local.get $0 + i32.const 1600 + i32.store $0 offset=4 + i32.const 1600 + call $~lib/string/String.__eq + drop + global.get $~lib/memory/__stack_pointer + i32.const 1600 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 1600 + i32.store $0 offset=4 + i32.const 1600 + call $~lib/string/String.__eq + drop + global.get $~lib/memory/__stack_pointer + i32.const 1600 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 1632 + i32.store $0 offset=4 + i32.const 1632 + call $~lib/string/String.__eq + if + i32.const 0 + i32.const 1552 + i32.const 1137 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + 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 $0 + local.get $0 + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + v128.load32_lane $0 0 + i32x4.extract_lane 0 + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1552 + i32.const 1153 + 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 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1692 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store $0 + local.get $0 + i32.const 1600 + i32.store $0 + local.get $0 + i32.const 1600 + i32.store $0 offset=4 + i32.const 1600 + call $~lib/string/String.__eq + drop + global.get $~lib/memory/__stack_pointer + i32.const 1600 + i32.store $0 + global.get $~lib/memory/__stack_pointer + i32.const 1632 + i32.store $0 offset=4 + i32.const 1632 + call $~lib/string/String.__eq + if + i32.const 0 + i32.const 1552 + i32.const 1197 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + 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 $0 + local.get $0 + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + v128.load32_lane $0 0 + i32x4.extract_lane 0 + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1552 + i32.const 1213 + 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 8 + i32.add + global.set $~lib/memory/__stack_pointer + 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 18096 + i32.const 18144 i32.const 1 i32.const 1 call $~lib/builtins/abort