Skip to content

Commit 70c93c6

Browse files
authored
Winch: packed integer basic arithmetic for x64 (#10147)
* packed integer add * packed integer sub * packed integer mul * packed integer saturating add * packed integer saturating sub * fix missing error codes for avx * change `size` to `lane_width` * fmt * i64x2 mul fallback * add fallback test.
1 parent 473675c commit 70c93c6

File tree

51 files changed

+1404
-19
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1404
-19
lines changed

crates/wast-util/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,6 @@ impl WastTest {
428428
"misc_testsuite/simd/issue_3327_bnot_lowering.wast",
429429
"spec_testsuite/simd_bit_shift.wast",
430430
"spec_testsuite/simd_boolean.wast",
431-
"spec_testsuite/simd_const.wast",
432431
"spec_testsuite/simd_conversions.wast",
433432
"spec_testsuite/simd_f32x4.wast",
434433
"spec_testsuite/simd_f32x4_arith.wast",
@@ -499,6 +498,7 @@ impl WastTest {
499498
"misc_testsuite/simd/unaligned-load.wast",
500499
"multi-memory/simd_memory-multi.wast",
501500
"misc_testsuite/simd/issue4807.wast",
501+
"spec_testsuite/simd_const.wast",
502502
];
503503

504504
if unsupported.iter().any(|part| self.path.ends_with(part)) {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
;;! target = "x86_64"
2+
;;! test = "winch"
3+
;;! flags = [ "-Ccranelift-has-avx" ]
4+
5+
(module
6+
(memory 1 1)
7+
(func (result v128)
8+
(i16x8.add
9+
(v128.const i64x2 42 42)
10+
(v128.const i64x2 1337 1337)
11+
)))
12+
;; wasm[0]::function[0]:
13+
;; pushq %rbp
14+
;; movq %rsp, %rbp
15+
;; movq 8(%rdi), %r11
16+
;; movq 0x10(%r11), %r11
17+
;; addq $0x10, %r11
18+
;; cmpq %rsp, %r11
19+
;; ja 0x4a
20+
;; 1c: movq %rdi, %r14
21+
;; subq $0x10, %rsp
22+
;; movq %rdi, 8(%rsp)
23+
;; movq %rsi, (%rsp)
24+
;; movdqu 0x1c(%rip), %xmm0
25+
;; movdqu 0x24(%rip), %xmm1
26+
;; vpaddw %xmm0, %xmm1, %xmm1
27+
;; movdqa %xmm1, %xmm0
28+
;; addq $0x10, %rsp
29+
;; popq %rbp
30+
;; retq
31+
;; 4a: ud2
32+
;; 4c: addb %al, (%rax)
33+
;; 4e: addb %al, (%rax)
34+
;; 50: cmpl %eax, (%rip)
35+
;; 56: addb %al, (%rax)
36+
;; 58: cmpl %eax, (%rip)
37+
;; 5e: addb %al, (%rax)
38+
;; 60: subb (%rax), %al
39+
;; 62: addb %al, (%rax)
40+
;; 64: addb %al, (%rax)
41+
;; 66: addb %al, (%rax)
42+
;; 68: subb (%rax), %al
43+
;; 6a: addb %al, (%rax)
44+
;; 6c: addb %al, (%rax)
45+
;; 6e: addb %al, (%rax)
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
;;! target = "x86_64"
2+
;;! test = "winch"
3+
;;! flags = [ "-Ccranelift-has-avx" ]
4+
5+
(module
6+
(memory 1 1)
7+
(func (result v128)
8+
(i16x8.add_sat_s
9+
(v128.const i64x2 42 42)
10+
(v128.const i64x2 1337 1337)
11+
)))
12+
;; wasm[0]::function[0]:
13+
;; pushq %rbp
14+
;; movq %rsp, %rbp
15+
;; movq 8(%rdi), %r11
16+
;; movq 0x10(%r11), %r11
17+
;; addq $0x10, %r11
18+
;; cmpq %rsp, %r11
19+
;; ja 0x4a
20+
;; 1c: movq %rdi, %r14
21+
;; subq $0x10, %rsp
22+
;; movq %rdi, 8(%rsp)
23+
;; movq %rsi, (%rsp)
24+
;; movdqu 0x1c(%rip), %xmm0
25+
;; movdqu 0x24(%rip), %xmm1
26+
;; vpaddsw %xmm0, %xmm1, %xmm1
27+
;; movdqa %xmm1, %xmm0
28+
;; addq $0x10, %rsp
29+
;; popq %rbp
30+
;; retq
31+
;; 4a: ud2
32+
;; 4c: addb %al, (%rax)
33+
;; 4e: addb %al, (%rax)
34+
;; 50: cmpl %eax, (%rip)
35+
;; 56: addb %al, (%rax)
36+
;; 58: cmpl %eax, (%rip)
37+
;; 5e: addb %al, (%rax)
38+
;; 60: subb (%rax), %al
39+
;; 62: addb %al, (%rax)
40+
;; 64: addb %al, (%rax)
41+
;; 66: addb %al, (%rax)
42+
;; 68: subb (%rax), %al
43+
;; 6a: addb %al, (%rax)
44+
;; 6c: addb %al, (%rax)
45+
;; 6e: addb %al, (%rax)
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
;;! target = "x86_64"
2+
;;! test = "winch"
3+
;;! flags = [ "-Ccranelift-has-avx" ]
4+
5+
(module
6+
(memory 1 1)
7+
(func (result v128)
8+
(i16x8.add_sat_u
9+
(v128.const i64x2 42 42)
10+
(v128.const i64x2 1337 1337)
11+
)))
12+
;; wasm[0]::function[0]:
13+
;; pushq %rbp
14+
;; movq %rsp, %rbp
15+
;; movq 8(%rdi), %r11
16+
;; movq 0x10(%r11), %r11
17+
;; addq $0x10, %r11
18+
;; cmpq %rsp, %r11
19+
;; ja 0x4a
20+
;; 1c: movq %rdi, %r14
21+
;; subq $0x10, %rsp
22+
;; movq %rdi, 8(%rsp)
23+
;; movq %rsi, (%rsp)
24+
;; movdqu 0x1c(%rip), %xmm0
25+
;; movdqu 0x24(%rip), %xmm1
26+
;; vpaddusw %xmm0, %xmm1, %xmm1
27+
;; movdqa %xmm1, %xmm0
28+
;; addq $0x10, %rsp
29+
;; popq %rbp
30+
;; retq
31+
;; 4a: ud2
32+
;; 4c: addb %al, (%rax)
33+
;; 4e: addb %al, (%rax)
34+
;; 50: cmpl %eax, (%rip)
35+
;; 56: addb %al, (%rax)
36+
;; 58: cmpl %eax, (%rip)
37+
;; 5e: addb %al, (%rax)
38+
;; 60: subb (%rax), %al
39+
;; 62: addb %al, (%rax)
40+
;; 64: addb %al, (%rax)
41+
;; 66: addb %al, (%rax)
42+
;; 68: subb (%rax), %al
43+
;; 6a: addb %al, (%rax)
44+
;; 6c: addb %al, (%rax)
45+
;; 6e: addb %al, (%rax)
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
;;! target = "x86_64"
2+
;;! test = "winch"
3+
;;! flags = [ "-Ccranelift-has-avx" ]
4+
5+
(module
6+
(memory 1 1)
7+
(func (result v128)
8+
(i16x8.mul
9+
(v128.const i64x2 42 42)
10+
(v128.const i64x2 1337 1337)
11+
)))
12+
;; wasm[0]::function[0]:
13+
;; pushq %rbp
14+
;; movq %rsp, %rbp
15+
;; movq 8(%rdi), %r11
16+
;; movq 0x10(%r11), %r11
17+
;; addq $0x10, %r11
18+
;; cmpq %rsp, %r11
19+
;; ja 0x4a
20+
;; 1c: movq %rdi, %r14
21+
;; subq $0x10, %rsp
22+
;; movq %rdi, 8(%rsp)
23+
;; movq %rsi, (%rsp)
24+
;; movdqu 0x1c(%rip), %xmm0
25+
;; movdqu 0x24(%rip), %xmm1
26+
;; vpmullw %xmm0, %xmm1, %xmm1
27+
;; movdqa %xmm1, %xmm0
28+
;; addq $0x10, %rsp
29+
;; popq %rbp
30+
;; retq
31+
;; 4a: ud2
32+
;; 4c: addb %al, (%rax)
33+
;; 4e: addb %al, (%rax)
34+
;; 50: cmpl %eax, (%rip)
35+
;; 56: addb %al, (%rax)
36+
;; 58: cmpl %eax, (%rip)
37+
;; 5e: addb %al, (%rax)
38+
;; 60: subb (%rax), %al
39+
;; 62: addb %al, (%rax)
40+
;; 64: addb %al, (%rax)
41+
;; 66: addb %al, (%rax)
42+
;; 68: subb (%rax), %al
43+
;; 6a: addb %al, (%rax)
44+
;; 6c: addb %al, (%rax)
45+
;; 6e: addb %al, (%rax)

0 commit comments

Comments
 (0)