From e9d7f5c158e5b6390b1f50a6324d7cc2289e15f3 Mon Sep 17 00:00:00 2001 From: chen ruixiang Date: Tue, 26 Jul 2022 10:26:54 +0800 Subject: [PATCH] fix: Add missing unit test cases to v128 of simd --- tests/compiler/simd.debug.wat | 391 ++++++++++++++++++++++---------- tests/compiler/simd.release.wat | 310 ++++++++++++++----------- tests/compiler/simd.ts | 53 +++++ 3 files changed, 494 insertions(+), 260 deletions(-) diff --git a/tests/compiler/simd.debug.wat b/tests/compiler/simd.debug.wat index 298d011bb1..5c62702d70 100644 --- a/tests/compiler/simd.debug.wat +++ b/tests/compiler/simd.debug.wat @@ -1481,6 +1481,9 @@ ) (func $simd/test_v128 (local $0 i32) + (local $1 v128) + (local $2 i32) + (local $3 v128) v128.const i32x4 0x00000001 0x00000000 0x00000000 0x00000000 v128.any_true i32.const 0 @@ -1732,6 +1735,150 @@ i32.const 0 i32.ne drop + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004 + i32x4.add + v128.const i32x4 0x00000002 0x00000004 0x00000006 0x00000008 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004 + i32x4.sub + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004 + v128.const i32x4 0x00000002 0x00000002 0x00000002 0x00000002 + i32x4.dot_i16x8_s + v128.const i32x4 0x00000002 0x00000004 0x00000006 0x00000008 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + drop + 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 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004 + f32x4.convert_i32x4_s + local.set $1 + local.get $1 + v128.const i32x4 0x3f800000 0x40000000 0x40400000 0x40800000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 173 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32x4.trunc_sat_f32x4_s + local.set $1 + local.get $1 + v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 175 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + v128.const i32x4 0x00000001 0x00000002 0x00000000 0x00000000 + f64x2.convert_low_i32x4_s + local.set $1 + local.get $1 + v128.const i32x4 0x00000000 0x3ff00000 0x00000000 0x40000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 179 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32x4.trunc_sat_f64x2_s_zero + local.set $1 + local.get $1 + v128.const i32x4 0x00000001 0x00000002 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 181 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $2 + local.get $2 + i32.const 42 + i32.store + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.set $3 + local.get $2 + local.get $3 + v128.load32_lane 0 + local.set $3 + local.get $3 + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 160 + i32.const 188 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $2 + call $~lib/rt/tlsf/__free ) (func $simd/test_i8x16 (local $0 v128) @@ -1756,7 +1903,7 @@ if i32.const 0 i32.const 160 - i32.const 153 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable @@ -1774,7 +1921,7 @@ if i32.const 0 i32.const 160 - i32.const 155 + i32.const 208 i32.const 3 call $~lib/builtins/abort unreachable @@ -1793,7 +1940,7 @@ if i32.const 0 i32.const 160 - i32.const 157 + i32.const 210 i32.const 3 call $~lib/builtins/abort unreachable @@ -1810,7 +1957,7 @@ if i32.const 0 i32.const 160 - i32.const 158 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -1871,7 +2018,7 @@ if i32.const 0 i32.const 160 - i32.const 199 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -1885,7 +2032,7 @@ if i32.const 0 i32.const 160 - i32.const 204 + i32.const 257 i32.const 3 call $~lib/builtins/abort unreachable @@ -1899,7 +2046,7 @@ if i32.const 0 i32.const 160 - i32.const 205 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -1914,7 +2061,7 @@ if i32.const 0 i32.const 160 - i32.const 206 + i32.const 259 i32.const 3 call $~lib/builtins/abort unreachable @@ -1931,7 +2078,7 @@ if i32.const 0 i32.const 160 - i32.const 207 + i32.const 260 i32.const 3 call $~lib/builtins/abort unreachable @@ -1948,7 +2095,7 @@ if i32.const 0 i32.const 160 - i32.const 212 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable @@ -2072,7 +2219,7 @@ if i32.const 0 i32.const 160 - i32.const 250 + i32.const 303 i32.const 3 call $~lib/builtins/abort unreachable @@ -2089,7 +2236,7 @@ if i32.const 0 i32.const 160 - i32.const 251 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -2106,7 +2253,7 @@ if i32.const 0 i32.const 160 - i32.const 252 + i32.const 305 i32.const 3 call $~lib/builtins/abort unreachable @@ -2123,7 +2270,7 @@ if i32.const 0 i32.const 160 - i32.const 253 + i32.const 306 i32.const 3 call $~lib/builtins/abort unreachable @@ -2140,7 +2287,7 @@ if i32.const 0 i32.const 160 - i32.const 254 + i32.const 307 i32.const 3 call $~lib/builtins/abort unreachable @@ -2157,7 +2304,7 @@ if i32.const 0 i32.const 160 - i32.const 255 + i32.const 308 i32.const 3 call $~lib/builtins/abort unreachable @@ -2174,7 +2321,7 @@ if i32.const 0 i32.const 160 - i32.const 256 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -2191,7 +2338,7 @@ if i32.const 0 i32.const 160 - i32.const 257 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -2208,7 +2355,7 @@ if i32.const 0 i32.const 160 - i32.const 258 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -2225,7 +2372,7 @@ if i32.const 0 i32.const 160 - i32.const 259 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -2270,7 +2417,7 @@ if i32.const 0 i32.const 160 - i32.const 265 + i32.const 318 i32.const 5 call $~lib/builtins/abort unreachable @@ -2289,7 +2436,7 @@ if i32.const 0 i32.const 160 - i32.const 271 + i32.const 324 i32.const 5 call $~lib/builtins/abort unreachable @@ -2305,7 +2452,7 @@ if i32.const 0 i32.const 160 - i32.const 276 + i32.const 329 i32.const 5 call $~lib/builtins/abort unreachable @@ -2332,7 +2479,7 @@ if i32.const 0 i32.const 160 - i32.const 282 + i32.const 335 i32.const 3 call $~lib/builtins/abort unreachable @@ -2350,7 +2497,7 @@ if i32.const 0 i32.const 160 - i32.const 284 + i32.const 337 i32.const 3 call $~lib/builtins/abort unreachable @@ -2369,7 +2516,7 @@ if i32.const 0 i32.const 160 - i32.const 286 + i32.const 339 i32.const 3 call $~lib/builtins/abort unreachable @@ -2386,7 +2533,7 @@ if i32.const 0 i32.const 160 - i32.const 287 + i32.const 340 i32.const 3 call $~lib/builtins/abort unreachable @@ -2403,7 +2550,7 @@ if i32.const 0 i32.const 160 - i32.const 288 + i32.const 341 i32.const 3 call $~lib/builtins/abort unreachable @@ -2464,7 +2611,7 @@ if i32.const 0 i32.const 160 - i32.const 329 + i32.const 382 i32.const 3 call $~lib/builtins/abort unreachable @@ -2478,7 +2625,7 @@ if i32.const 0 i32.const 160 - i32.const 334 + i32.const 387 i32.const 3 call $~lib/builtins/abort unreachable @@ -2492,7 +2639,7 @@ if i32.const 0 i32.const 160 - i32.const 335 + i32.const 388 i32.const 3 call $~lib/builtins/abort unreachable @@ -2507,7 +2654,7 @@ if i32.const 0 i32.const 160 - i32.const 336 + i32.const 389 i32.const 3 call $~lib/builtins/abort unreachable @@ -2524,7 +2671,7 @@ if i32.const 0 i32.const 160 - i32.const 337 + i32.const 390 i32.const 3 call $~lib/builtins/abort unreachable @@ -2541,7 +2688,7 @@ if i32.const 0 i32.const 160 - i32.const 342 + i32.const 395 i32.const 3 call $~lib/builtins/abort unreachable @@ -2665,7 +2812,7 @@ if i32.const 0 i32.const 160 - i32.const 380 + i32.const 433 i32.const 3 call $~lib/builtins/abort unreachable @@ -2682,7 +2829,7 @@ if i32.const 0 i32.const 160 - i32.const 381 + i32.const 434 i32.const 3 call $~lib/builtins/abort unreachable @@ -2699,7 +2846,7 @@ if i32.const 0 i32.const 160 - i32.const 382 + i32.const 435 i32.const 3 call $~lib/builtins/abort unreachable @@ -2716,7 +2863,7 @@ if i32.const 0 i32.const 160 - i32.const 383 + i32.const 436 i32.const 3 call $~lib/builtins/abort unreachable @@ -2733,7 +2880,7 @@ if i32.const 0 i32.const 160 - i32.const 384 + i32.const 437 i32.const 3 call $~lib/builtins/abort unreachable @@ -2750,7 +2897,7 @@ if i32.const 0 i32.const 160 - i32.const 385 + i32.const 438 i32.const 3 call $~lib/builtins/abort unreachable @@ -2767,7 +2914,7 @@ if i32.const 0 i32.const 160 - i32.const 386 + i32.const 439 i32.const 3 call $~lib/builtins/abort unreachable @@ -2784,7 +2931,7 @@ if i32.const 0 i32.const 160 - i32.const 387 + i32.const 440 i32.const 3 call $~lib/builtins/abort unreachable @@ -2801,7 +2948,7 @@ if i32.const 0 i32.const 160 - i32.const 388 + i32.const 441 i32.const 3 call $~lib/builtins/abort unreachable @@ -2818,7 +2965,7 @@ if i32.const 0 i32.const 160 - i32.const 389 + i32.const 442 i32.const 3 call $~lib/builtins/abort unreachable @@ -2933,7 +3080,7 @@ if i32.const 0 i32.const 160 - i32.const 406 + i32.const 459 i32.const 5 call $~lib/builtins/abort unreachable @@ -2949,7 +3096,7 @@ if i32.const 0 i32.const 160 - i32.const 411 + i32.const 464 i32.const 5 call $~lib/builtins/abort unreachable @@ -3009,7 +3156,7 @@ if i32.const 0 i32.const 160 - i32.const 434 + i32.const 487 i32.const 3 call $~lib/builtins/abort unreachable @@ -3027,7 +3174,7 @@ if i32.const 0 i32.const 160 - i32.const 436 + i32.const 489 i32.const 3 call $~lib/builtins/abort unreachable @@ -3046,7 +3193,7 @@ if i32.const 0 i32.const 160 - i32.const 438 + i32.const 491 i32.const 3 call $~lib/builtins/abort unreachable @@ -3063,7 +3210,7 @@ if i32.const 0 i32.const 160 - i32.const 439 + i32.const 492 i32.const 3 call $~lib/builtins/abort unreachable @@ -3080,7 +3227,7 @@ if i32.const 0 i32.const 160 - i32.const 440 + i32.const 493 i32.const 3 call $~lib/builtins/abort unreachable @@ -3141,7 +3288,7 @@ if i32.const 0 i32.const 160 - i32.const 481 + i32.const 534 i32.const 3 call $~lib/builtins/abort unreachable @@ -3154,7 +3301,7 @@ if i32.const 0 i32.const 160 - i32.const 486 + i32.const 539 i32.const 3 call $~lib/builtins/abort unreachable @@ -3167,7 +3314,7 @@ if i32.const 0 i32.const 160 - i32.const 487 + i32.const 540 i32.const 3 call $~lib/builtins/abort unreachable @@ -3184,7 +3331,7 @@ if i32.const 0 i32.const 160 - i32.const 488 + i32.const 541 i32.const 3 call $~lib/builtins/abort unreachable @@ -3201,7 +3348,7 @@ if i32.const 0 i32.const 160 - i32.const 493 + i32.const 546 i32.const 3 call $~lib/builtins/abort unreachable @@ -3281,7 +3428,7 @@ if i32.const 0 i32.const 160 - i32.const 507 + i32.const 560 i32.const 3 call $~lib/builtins/abort unreachable @@ -3298,7 +3445,7 @@ if i32.const 0 i32.const 160 - i32.const 508 + i32.const 561 i32.const 3 call $~lib/builtins/abort unreachable @@ -3315,7 +3462,7 @@ if i32.const 0 i32.const 160 - i32.const 509 + i32.const 562 i32.const 3 call $~lib/builtins/abort unreachable @@ -3332,7 +3479,7 @@ if i32.const 0 i32.const 160 - i32.const 510 + i32.const 563 i32.const 3 call $~lib/builtins/abort unreachable @@ -3349,7 +3496,7 @@ if i32.const 0 i32.const 160 - i32.const 511 + i32.const 564 i32.const 3 call $~lib/builtins/abort unreachable @@ -3366,7 +3513,7 @@ if i32.const 0 i32.const 160 - i32.const 512 + i32.const 565 i32.const 3 call $~lib/builtins/abort unreachable @@ -3383,7 +3530,7 @@ if i32.const 0 i32.const 160 - i32.const 513 + i32.const 566 i32.const 3 call $~lib/builtins/abort unreachable @@ -3400,7 +3547,7 @@ if i32.const 0 i32.const 160 - i32.const 514 + i32.const 567 i32.const 3 call $~lib/builtins/abort unreachable @@ -3417,7 +3564,7 @@ if i32.const 0 i32.const 160 - i32.const 515 + i32.const 568 i32.const 3 call $~lib/builtins/abort unreachable @@ -3434,7 +3581,7 @@ if i32.const 0 i32.const 160 - i32.const 516 + i32.const 569 i32.const 3 call $~lib/builtins/abort unreachable @@ -3533,7 +3680,7 @@ if i32.const 0 i32.const 160 - i32.const 537 + i32.const 590 i32.const 5 call $~lib/builtins/abort unreachable @@ -3549,7 +3696,7 @@ if i32.const 0 i32.const 160 - i32.const 542 + i32.const 595 i32.const 5 call $~lib/builtins/abort unreachable @@ -3602,7 +3749,7 @@ if i32.const 0 i32.const 160 - i32.const 563 + i32.const 616 i32.const 3 call $~lib/builtins/abort unreachable @@ -3620,7 +3767,7 @@ if i32.const 0 i32.const 160 - i32.const 565 + i32.const 618 i32.const 3 call $~lib/builtins/abort unreachable @@ -3639,7 +3786,7 @@ if i32.const 0 i32.const 160 - i32.const 567 + i32.const 620 i32.const 3 call $~lib/builtins/abort unreachable @@ -3656,7 +3803,7 @@ if i32.const 0 i32.const 160 - i32.const 568 + i32.const 621 i32.const 3 call $~lib/builtins/abort unreachable @@ -3673,7 +3820,7 @@ if i32.const 0 i32.const 160 - i32.const 569 + i32.const 622 i32.const 3 call $~lib/builtins/abort unreachable @@ -3689,7 +3836,7 @@ if i32.const 0 i32.const 160 - i32.const 570 + i32.const 623 i32.const 3 call $~lib/builtins/abort unreachable @@ -3702,7 +3849,7 @@ if i32.const 0 i32.const 160 - i32.const 575 + i32.const 628 i32.const 3 call $~lib/builtins/abort unreachable @@ -3715,7 +3862,7 @@ if i32.const 0 i32.const 160 - i32.const 576 + i32.const 629 i32.const 3 call $~lib/builtins/abort unreachable @@ -3732,7 +3879,7 @@ if i32.const 0 i32.const 160 - i32.const 577 + i32.const 630 i32.const 3 call $~lib/builtins/abort unreachable @@ -3749,7 +3896,7 @@ if i32.const 0 i32.const 160 - i32.const 582 + i32.const 635 i32.const 3 call $~lib/builtins/abort unreachable @@ -3822,7 +3969,7 @@ if i32.const 0 i32.const 160 - i32.const 596 + i32.const 649 i32.const 5 call $~lib/builtins/abort unreachable @@ -3838,7 +3985,7 @@ if i32.const 0 i32.const 160 - i32.const 601 + i32.const 654 i32.const 5 call $~lib/builtins/abort unreachable @@ -3883,7 +4030,7 @@ if i32.const 0 i32.const 160 - i32.const 617 + i32.const 670 i32.const 3 call $~lib/builtins/abort unreachable @@ -3901,7 +4048,7 @@ if i32.const 0 i32.const 160 - i32.const 619 + i32.const 672 i32.const 3 call $~lib/builtins/abort unreachable @@ -3920,7 +4067,7 @@ if i32.const 0 i32.const 160 - i32.const 621 + i32.const 674 i32.const 3 call $~lib/builtins/abort unreachable @@ -3937,7 +4084,7 @@ if i32.const 0 i32.const 160 - i32.const 622 + i32.const 675 i32.const 3 call $~lib/builtins/abort unreachable @@ -3954,7 +4101,7 @@ if i32.const 0 i32.const 160 - i32.const 623 + i32.const 676 i32.const 3 call $~lib/builtins/abort unreachable @@ -3975,7 +4122,7 @@ if i32.const 0 i32.const 160 - i32.const 625 + i32.const 678 i32.const 3 call $~lib/builtins/abort unreachable @@ -3992,7 +4139,7 @@ if i32.const 0 i32.const 160 - i32.const 626 + i32.const 679 i32.const 3 call $~lib/builtins/abort unreachable @@ -4008,7 +4155,7 @@ if i32.const 0 i32.const 160 - i32.const 627 + i32.const 680 i32.const 3 call $~lib/builtins/abort unreachable @@ -4021,7 +4168,7 @@ if i32.const 0 i32.const 160 - i32.const 628 + i32.const 681 i32.const 3 call $~lib/builtins/abort unreachable @@ -4034,7 +4181,7 @@ if i32.const 0 i32.const 160 - i32.const 629 + i32.const 682 i32.const 3 call $~lib/builtins/abort unreachable @@ -4051,7 +4198,7 @@ if i32.const 0 i32.const 160 - i32.const 630 + i32.const 683 i32.const 3 call $~lib/builtins/abort unreachable @@ -4068,7 +4215,7 @@ if i32.const 0 i32.const 160 - i32.const 635 + i32.const 688 i32.const 3 call $~lib/builtins/abort unreachable @@ -4099,7 +4246,7 @@ if i32.const 0 i32.const 160 - i32.const 644 + i32.const 697 i32.const 3 call $~lib/builtins/abort unreachable @@ -4116,7 +4263,7 @@ if i32.const 0 i32.const 160 - i32.const 645 + i32.const 698 i32.const 3 call $~lib/builtins/abort unreachable @@ -4133,7 +4280,7 @@ if i32.const 0 i32.const 160 - i32.const 646 + i32.const 699 i32.const 3 call $~lib/builtins/abort unreachable @@ -4150,7 +4297,7 @@ if i32.const 0 i32.const 160 - i32.const 647 + i32.const 700 i32.const 3 call $~lib/builtins/abort unreachable @@ -4167,7 +4314,7 @@ if i32.const 0 i32.const 160 - i32.const 648 + i32.const 701 i32.const 3 call $~lib/builtins/abort unreachable @@ -4184,7 +4331,7 @@ if i32.const 0 i32.const 160 - i32.const 649 + i32.const 702 i32.const 3 call $~lib/builtins/abort unreachable @@ -4201,7 +4348,7 @@ if i32.const 0 i32.const 160 - i32.const 650 + i32.const 703 i32.const 3 call $~lib/builtins/abort unreachable @@ -4218,7 +4365,7 @@ if i32.const 0 i32.const 160 - i32.const 651 + i32.const 704 i32.const 3 call $~lib/builtins/abort unreachable @@ -4234,7 +4381,7 @@ if i32.const 0 i32.const 160 - i32.const 652 + i32.const 705 i32.const 3 call $~lib/builtins/abort unreachable @@ -4292,7 +4439,7 @@ if i32.const 0 i32.const 160 - i32.const 671 + i32.const 724 i32.const 3 call $~lib/builtins/abort unreachable @@ -4310,7 +4457,7 @@ if i32.const 0 i32.const 160 - i32.const 673 + i32.const 726 i32.const 3 call $~lib/builtins/abort unreachable @@ -4329,7 +4476,7 @@ if i32.const 0 i32.const 160 - i32.const 675 + i32.const 728 i32.const 3 call $~lib/builtins/abort unreachable @@ -4346,7 +4493,7 @@ if i32.const 0 i32.const 160 - i32.const 676 + i32.const 729 i32.const 3 call $~lib/builtins/abort unreachable @@ -4363,7 +4510,7 @@ if i32.const 0 i32.const 160 - i32.const 677 + i32.const 730 i32.const 3 call $~lib/builtins/abort unreachable @@ -4384,7 +4531,7 @@ if i32.const 0 i32.const 160 - i32.const 679 + i32.const 732 i32.const 3 call $~lib/builtins/abort unreachable @@ -4401,7 +4548,7 @@ if i32.const 0 i32.const 160 - i32.const 680 + i32.const 733 i32.const 3 call $~lib/builtins/abort unreachable @@ -4417,7 +4564,7 @@ if i32.const 0 i32.const 160 - i32.const 681 + i32.const 734 i32.const 3 call $~lib/builtins/abort unreachable @@ -4430,7 +4577,7 @@ if i32.const 0 i32.const 160 - i32.const 682 + i32.const 735 i32.const 3 call $~lib/builtins/abort unreachable @@ -4443,7 +4590,7 @@ if i32.const 0 i32.const 160 - i32.const 683 + i32.const 736 i32.const 3 call $~lib/builtins/abort unreachable @@ -4460,7 +4607,7 @@ if i32.const 0 i32.const 160 - i32.const 684 + i32.const 737 i32.const 3 call $~lib/builtins/abort unreachable @@ -4477,7 +4624,7 @@ if i32.const 0 i32.const 160 - i32.const 689 + i32.const 742 i32.const 3 call $~lib/builtins/abort unreachable @@ -4508,7 +4655,7 @@ if i32.const 0 i32.const 160 - i32.const 698 + i32.const 751 i32.const 3 call $~lib/builtins/abort unreachable @@ -4525,7 +4672,7 @@ if i32.const 0 i32.const 160 - i32.const 699 + i32.const 752 i32.const 3 call $~lib/builtins/abort unreachable @@ -4542,7 +4689,7 @@ if i32.const 0 i32.const 160 - i32.const 700 + i32.const 753 i32.const 3 call $~lib/builtins/abort unreachable @@ -4559,7 +4706,7 @@ if i32.const 0 i32.const 160 - i32.const 701 + i32.const 754 i32.const 3 call $~lib/builtins/abort unreachable @@ -4576,7 +4723,7 @@ if i32.const 0 i32.const 160 - i32.const 702 + i32.const 755 i32.const 3 call $~lib/builtins/abort unreachable @@ -4593,7 +4740,7 @@ if i32.const 0 i32.const 160 - i32.const 703 + i32.const 756 i32.const 3 call $~lib/builtins/abort unreachable @@ -4610,7 +4757,7 @@ if i32.const 0 i32.const 160 - i32.const 704 + i32.const 757 i32.const 3 call $~lib/builtins/abort unreachable @@ -4627,7 +4774,7 @@ if i32.const 0 i32.const 160 - i32.const 705 + i32.const 758 i32.const 3 call $~lib/builtins/abort unreachable @@ -4643,7 +4790,7 @@ if i32.const 0 i32.const 160 - i32.const 706 + i32.const 759 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/simd.release.wat b/tests/compiler/simd.release.wat index b44285b861..105f61d665 100644 --- a/tests/compiler/simd.release.wat +++ b/tests/compiler/simd.release.wat @@ -1,7 +1,7 @@ (module + (type $none_=>_none (func)) (type $i32_i32_i32_=>_v128 (func (param i32 i32 i32) (result v128))) (type $i32_i32_=>_none (func (param i32 i32))) - (type $none_=>_none (func)) (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))) @@ -997,137 +997,7 @@ local.get $1 call $~lib/rt/tlsf/insertBlock ) - (func $simd/test_vars_i8x16_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) - v128.const i32x4 0x03000100 0x07000504 0x0b0a0908 0x000e0d0c - local.get $0 - i8x16.replace_lane 2 - local.get $1 - i8x16.replace_lane 6 - local.get $2 - i8x16.replace_lane 15 - ) - (func $simd/test_vars_i8x16_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (param $12 i32) (param $13 i32) (param $14 i32) (param $15 i32) (result v128) - local.get $0 - i8x16.splat - local.get $1 - i8x16.replace_lane 1 - local.get $2 - i8x16.replace_lane 2 - local.get $3 - i8x16.replace_lane 3 - local.get $4 - i8x16.replace_lane 4 - local.get $5 - i8x16.replace_lane 5 - local.get $6 - i8x16.replace_lane 6 - local.get $7 - i8x16.replace_lane 7 - local.get $8 - i8x16.replace_lane 8 - local.get $9 - i8x16.replace_lane 9 - local.get $10 - i8x16.replace_lane 10 - local.get $11 - i8x16.replace_lane 11 - local.get $12 - i8x16.replace_lane 12 - local.get $13 - i8x16.replace_lane 13 - local.get $14 - i8x16.replace_lane 14 - local.get $15 - i8x16.replace_lane 15 - ) - (func $simd/test_vars_i16x8_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) - v128.const i32x4 0x00010000 0x00030000 0x00050000 0x00000006 - local.get $0 - i16x8.replace_lane 2 - local.get $1 - i16x8.replace_lane 4 - local.get $2 - i16x8.replace_lane 7 - ) - (func $simd/test_vars_i16x8_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result v128) - local.get $0 - i16x8.splat - local.get $1 - i16x8.replace_lane 1 - local.get $2 - i16x8.replace_lane 2 - local.get $3 - i16x8.replace_lane 3 - local.get $4 - i16x8.replace_lane 4 - local.get $5 - i16x8.replace_lane 5 - local.get $6 - i16x8.replace_lane 6 - local.get $7 - i16x8.replace_lane 7 - ) - (func $simd/test_vars_i32x4_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - local.get $0 - i32x4.replace_lane 1 - local.get $1 - i32x4.replace_lane 2 - local.get $2 - i32x4.replace_lane 3 - ) - (func $simd/test_vars_i32x4_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result v128) - local.get $0 - i32x4.splat - local.get $1 - i32x4.replace_lane 1 - local.get $2 - i32x4.replace_lane 2 - local.get $3 - i32x4.replace_lane 3 - ) - (func $simd/test_vars_i64x2_partial (param $0 i64) (result v128) - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - local.get $0 - i64x2.replace_lane 1 - ) - (func $simd/test_vars_i64x2_full (param $0 i64) (param $1 i64) (result v128) - local.get $0 - i64x2.splat - local.get $1 - i64x2.replace_lane 1 - ) - (func $simd/test_vars_f32x4_partial (param $0 f32) (param $1 f32) (param $2 f32) (result v128) - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - local.get $0 - f32x4.replace_lane 1 - local.get $1 - f32x4.replace_lane 2 - local.get $2 - f32x4.replace_lane 3 - ) - (func $simd/test_vars_f32x4_full (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (result v128) - local.get $0 - f32x4.splat - local.get $1 - f32x4.replace_lane 1 - local.get $2 - f32x4.replace_lane 2 - local.get $3 - f32x4.replace_lane 3 - ) - (func $simd/test_vars_f64x2_partial (param $0 f64) (result v128) - v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 - local.get $0 - f64x2.replace_lane 1 - ) - (func $simd/test_vars_f64x2_full (param $0 f64) (param $1 f64) (result v128) - local.get $0 - f64x2.splat - local.get $1 - f64x2.replace_lane 1 - ) - (func $~start + (func $simd/test_v128 (local $0 i32) global.get $~lib/rt/tlsf/ROOT i32.eqz @@ -1330,6 +1200,170 @@ 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 + v128.const i32x4 0x0000002a 0x00000000 0x00000000 0x00000000 + i8x16.eq + i8x16.all_true + i32.eqz + if + i32.const 0 + i32.const 1184 + i32.const 188 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/rt/tlsf/__free + ) + (func $simd/test_vars_i8x16_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) + v128.const i32x4 0x03000100 0x07000504 0x0b0a0908 0x000e0d0c + local.get $0 + i8x16.replace_lane 2 + local.get $1 + i8x16.replace_lane 6 + local.get $2 + i8x16.replace_lane 15 + ) + (func $simd/test_vars_i8x16_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (param $12 i32) (param $13 i32) (param $14 i32) (param $15 i32) (result v128) + local.get $0 + i8x16.splat + local.get $1 + i8x16.replace_lane 1 + local.get $2 + i8x16.replace_lane 2 + local.get $3 + i8x16.replace_lane 3 + local.get $4 + i8x16.replace_lane 4 + local.get $5 + i8x16.replace_lane 5 + local.get $6 + i8x16.replace_lane 6 + local.get $7 + i8x16.replace_lane 7 + local.get $8 + i8x16.replace_lane 8 + local.get $9 + i8x16.replace_lane 9 + local.get $10 + i8x16.replace_lane 10 + local.get $11 + i8x16.replace_lane 11 + local.get $12 + i8x16.replace_lane 12 + local.get $13 + i8x16.replace_lane 13 + local.get $14 + i8x16.replace_lane 14 + local.get $15 + i8x16.replace_lane 15 + ) + (func $simd/test_vars_i16x8_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) + v128.const i32x4 0x00010000 0x00030000 0x00050000 0x00000006 + local.get $0 + i16x8.replace_lane 2 + local.get $1 + i16x8.replace_lane 4 + local.get $2 + i16x8.replace_lane 7 + ) + (func $simd/test_vars_i16x8_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result v128) + local.get $0 + i16x8.splat + local.get $1 + i16x8.replace_lane 1 + local.get $2 + i16x8.replace_lane 2 + local.get $3 + i16x8.replace_lane 3 + local.get $4 + i16x8.replace_lane 4 + local.get $5 + i16x8.replace_lane 5 + local.get $6 + i16x8.replace_lane 6 + local.get $7 + i16x8.replace_lane 7 + ) + (func $simd/test_vars_i32x4_partial (param $0 i32) (param $1 i32) (param $2 i32) (result v128) + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.get $0 + i32x4.replace_lane 1 + local.get $1 + i32x4.replace_lane 2 + local.get $2 + i32x4.replace_lane 3 + ) + (func $simd/test_vars_i32x4_full (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result v128) + local.get $0 + i32x4.splat + local.get $1 + i32x4.replace_lane 1 + local.get $2 + i32x4.replace_lane 2 + local.get $3 + i32x4.replace_lane 3 + ) + (func $simd/test_vars_i64x2_partial (param $0 i64) (result v128) + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.get $0 + i64x2.replace_lane 1 + ) + (func $simd/test_vars_i64x2_full (param $0 i64) (param $1 i64) (result v128) + local.get $0 + i64x2.splat + local.get $1 + i64x2.replace_lane 1 + ) + (func $simd/test_vars_f32x4_partial (param $0 f32) (param $1 f32) (param $2 f32) (result v128) + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.get $0 + f32x4.replace_lane 1 + local.get $1 + f32x4.replace_lane 2 + local.get $2 + f32x4.replace_lane 3 + ) + (func $simd/test_vars_f32x4_full (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (result v128) + local.get $0 + f32x4.splat + local.get $1 + f32x4.replace_lane 1 + local.get $2 + f32x4.replace_lane 2 + local.get $3 + f32x4.replace_lane 3 + ) + (func $simd/test_vars_f64x2_partial (param $0 f64) (result v128) + v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000 + local.get $0 + f64x2.replace_lane 1 + ) + (func $simd/test_vars_f64x2_full (param $0 f64) (param $1 f64) (result v128) + local.get $0 + f64x2.splat + local.get $1 + f64x2.replace_lane 1 + ) + (func $~start + (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 @@ -1362,7 +1396,7 @@ if i32.const 0 i32.const 1184 - i32.const 406 + i32.const 459 i32.const 5 call $~lib/builtins/abort unreachable @@ -1376,7 +1410,7 @@ if i32.const 0 i32.const 1184 - i32.const 411 + i32.const 464 i32.const 5 call $~lib/builtins/abort unreachable @@ -1414,7 +1448,7 @@ if i32.const 0 i32.const 1184 - i32.const 537 + i32.const 590 i32.const 5 call $~lib/builtins/abort unreachable @@ -1428,7 +1462,7 @@ if i32.const 0 i32.const 1184 - i32.const 542 + i32.const 595 i32.const 5 call $~lib/builtins/abort unreachable @@ -1460,7 +1494,7 @@ if i32.const 0 i32.const 1184 - i32.const 596 + i32.const 649 i32.const 5 call $~lib/builtins/abort unreachable @@ -1474,7 +1508,7 @@ if i32.const 0 i32.const 1184 - i32.const 601 + i32.const 654 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/simd.ts b/tests/compiler/simd.ts index ed2c15022f..80d243ebaf 100644 --- a/tests/compiler/simd.ts +++ b/tests/compiler/simd.ts @@ -135,6 +135,59 @@ function test_v128(): void { f32x4(1, 1, 1, 1) ); } + { + assert( + v128.add(i32x4(1, 2, 3, 4), i32x4(1, 2, 3, 4)) + == + i32x4(2, 4, 6, 8)); + } + { + assert( + v128.sub(i32x4(1, 2, 3, 4), i32x4(1, 2, 3, 4)) + == + i32x4(0, 0, 0, 0)); + } + { + assert( + v128.dot(i32x4(1, 2, 3, 4), i32x4(2, 2, 2, 2)) + == + i32x4(2, 4, 6, 8) + ); + } + { + assert( + v128.trunc(f32x4(1.1, 2.5, 3.9, 4.0)) + == + f32x4(1.0, 2.0, 3.0, 4.0) + ); + } + { + assert( + v128.nearest(f32x4(1.1, 2.5, 3.51, 4.0)) + == + f32x4(1.0, 2.0, 4.0, 4.0) + ); + } + { + let v: v128 = v128.convert(i32x4(1, 2, 3, 4)); + assert(v == f32x4(1.0, 2.0, 3.0, 4.0)); + v = v128.trunc_sat(v); + assert(v == i32x4(1, 2, 3, 4)); + } + { + let v: v128 = v128.convert_low(i32x4(1, 2, 0, 0)); + assert(v == f64x2(1.0, 2.0)); + v = v128.trunc_sat_zero(v); + assert(v == i32x4(1, 2, 0, 0)); + } + { + var ptr = __alloc(16); + store(ptr, 42); + var 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)); + __free(ptr); + } // TODO: missing C-API in Binaryen (see also passes/pass.ts) // v128.load8_lane // v128.load16_lane