Skip to content

Commit 77d0af2

Browse files
authored
feat: Implement relaxed SIMD operations (#2681)
1 parent f7571a4 commit 77d0af2

12 files changed

+1322
-179
lines changed

Diff for: cli/options.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,14 +221,14 @@
221221
" reference-types Reference types and operations.",
222222
" gc Garbage collection (WIP).",
223223
" stringref String reference types.",
224+
" relaxed-simd Relaxed SIMD operations.",
224225
""
225226
],
226227
"TODO_doesNothingYet": [
227228
" exception-handling Exception handling.",
228229
" tail-calls Tail call operations.",
229230
" multi-value Multi value types.",
230231
" memory64 Memory64 operations.",
231-
" relaxed-simd Relaxed SIMD operations.",
232232
" extended-const Extended const expressions."
233233
],
234234
"type": "S",

Diff for: src/builtins.ts

+574-48
Large diffs are not rendered by default.

Diff for: std/assembly/builtins.ts

+109-5
Original file line numberDiff line numberDiff line change
@@ -1562,6 +1562,50 @@ export namespace v128 {
15621562
// @ts-ignore: decorator
15631563
@builtin
15641564
export declare function extmul_high<T>(a: v128, b: v128): v128;
1565+
1566+
// @ts-ignore: decorator
1567+
@builtin
1568+
export declare function relaxed_swizzle(a: v128, s: v128): v128;
1569+
1570+
// @ts-ignore: decorator
1571+
@builtin
1572+
export declare function relaxed_trunc<T>(a: v128): v128;
1573+
1574+
// @ts-ignore: decorator
1575+
@builtin
1576+
export declare function relaxed_trunc_zero<T>(a: v128): v128;
1577+
1578+
// @ts-ignore: decorator
1579+
@builtin
1580+
export declare function relaxed_madd<T>(a: v128, b: v128, c: v128): v128;
1581+
1582+
// @ts-ignore: decorator
1583+
@builtin
1584+
export declare function relaxed_nmadd<T>(a: v128, b: v128, c: v128): v128;
1585+
1586+
// @ts-ignore: decorator
1587+
@builtin
1588+
export declare function relaxed_laneselect<T>(a: v128, b: v128, m: v128): v128;
1589+
1590+
// @ts-ignore: decorator
1591+
@builtin
1592+
export declare function relaxed_min<T>(a: v128, b: v128): v128;
1593+
1594+
// @ts-ignore: decorator
1595+
@builtin
1596+
export declare function relaxed_max<T>(a: v128, b: v128): v128;
1597+
1598+
// @ts-ignore: decorator
1599+
@builtin
1600+
export declare function relaxed_q15mulr<T>(a: v128, b: v128): v128;
1601+
1602+
// @ts-ignore: decorator
1603+
@builtin
1604+
export declare function relaxed_dot<T>(a: v128, b: v128): v128;
1605+
1606+
// @ts-ignore: decorator
1607+
@builtin
1608+
export declare function relaxed_dot_add<T>(a: v128, b: v128, c: v128): v128;
15651609
}
15661610

15671611
// @ts-ignore: decorator
@@ -1724,6 +1768,14 @@ export namespace i8x16 {
17241768
// @ts-ignore: decorator
17251769
@builtin
17261770
export declare function swizzle(a: v128, b: v128): v128;
1771+
1772+
// @ts-ignore: decorator
1773+
@builtin
1774+
export declare function relaxed_swizzle(a: v128, s: v128): v128;
1775+
1776+
// @ts-ignore: decorator
1777+
@builtin
1778+
export declare function relaxed_laneselect(a: v128, b: v128, m: v128): v128;
17271779
}
17281780

17291781
// @ts-ignore: decorator
@@ -1925,7 +1977,15 @@ export namespace i16x8 {
19251977

19261978
// @ts-ignore: decorator
19271979
@builtin
1928-
export declare function swizzle(a: v128, b: v128): v128;
1980+
export declare function relaxed_laneselect(a: v128, b: v128, m: v128): v128;
1981+
1982+
// @ts-ignore: decorator
1983+
@builtin
1984+
export declare function relaxed_q15mulr_s(a: v128, b: v128): v128;
1985+
1986+
// @ts-ignore: decorator
1987+
@builtin
1988+
export declare function relaxed_dot_i8x16_i7x16_s(a: v128, b: v128, c: v128): v128;
19291989
}
19301990

19311991
// @ts-ignore: decorator
@@ -2108,7 +2168,27 @@ export namespace i32x4 {
21082168

21092169
// @ts-ignore: decorator
21102170
@builtin
2111-
export declare function swizzle(a: v128, b: v128): v128;
2171+
export declare function relaxed_trunc_f32x4_s(a: v128): v128;
2172+
2173+
// @ts-ignore: decorator
2174+
@builtin
2175+
export declare function relaxed_trunc_f32x4_u(a: v128): v128;
2176+
2177+
// @ts-ignore: decorator
2178+
@builtin
2179+
export declare function relaxed_trunc_f64x2_s_zero(a: v128): v128;
2180+
2181+
// @ts-ignore: decorator
2182+
@builtin
2183+
export declare function relaxed_trunc_f64x2_u_zero(a: v128): v128;
2184+
2185+
// @ts-ignore: decorator
2186+
@builtin
2187+
export declare function relaxed_laneselect(a: v128, b: v128, m: v128): v128;
2188+
2189+
// @ts-ignore: decorator
2190+
@builtin
2191+
export declare function relaxed_dot_i8x16_i7x16_add_s(a: v128, b: v128, c: v128): v128;
21122192
}
21132193

21142194
// @ts-ignore: decorator
@@ -2231,7 +2311,7 @@ export namespace i64x2 {
22312311

22322312
// @ts-ignore: decorator
22332313
@builtin
2234-
export declare function swizzle(a: v128, b: v128): v128;
2314+
export declare function relaxed_laneselect(a: v128, b: v128, m: v128): v128;
22352315
}
22362316

22372317
// @ts-ignore: decorator
@@ -2354,7 +2434,19 @@ export namespace f32x4 {
23542434

23552435
// @ts-ignore: decorator
23562436
@builtin
2357-
export declare function swizzle(a: v128, b: v128): v128;
2437+
export declare function relaxed_madd(a: v128, b: v128, c: v128): v128;
2438+
2439+
// @ts-ignore: decorator
2440+
@builtin
2441+
export declare function relaxed_nmadd(a: v128, b: v128, c: v128): v128;
2442+
2443+
// @ts-ignore: decorator
2444+
@builtin
2445+
export declare function relaxed_min(a: v128, b: v128): v128;
2446+
2447+
// @ts-ignore: decorator
2448+
@builtin
2449+
export declare function relaxed_max(a: v128, b: v128): v128;
23582450
}
23592451

23602452
// @ts-ignore: decorator
@@ -2477,7 +2569,19 @@ export namespace f64x2 {
24772569

24782570
// @ts-ignore: decorator
24792571
@builtin
2480-
export declare function swizzle(a: v128, b: v128): v128;
2572+
export declare function relaxed_madd(a: v128, b: v128, c: v128): v128;
2573+
2574+
// @ts-ignore: decorator
2575+
@builtin
2576+
export declare function relaxed_nmadd(a: v128, b: v128, c: v128): v128;
2577+
2578+
// @ts-ignore: decorator
2579+
@builtin
2580+
export declare function relaxed_min(a: v128, b: v128): v128;
2581+
2582+
// @ts-ignore: decorator
2583+
@builtin
2584+
export declare function relaxed_max(a: v128, b: v128): v128;
24812585
}
24822586

24832587
@final

0 commit comments

Comments
 (0)