From 9c2ba72bc3be2dbb7ac2ff5751f4b37b70c3fbd0 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 14 Jun 2023 16:40:51 -0500 Subject: [PATCH] feat: extend 0xfd prefix codespace; add relaxed_simd ops. --- src/WasmParser.ts | 539 ++++++++++-------- test/__fixtures__/relaxed_simd.wasm | Bin 0 -> 614 bytes .../parse-and-disassemble.test.ts.snap | 111 ++++ test/wabt-compatibility.test.ts | 1 + 4 files changed, 413 insertions(+), 238 deletions(-) create mode 100644 test/__fixtures__/relaxed_simd.wasm diff --git a/src/WasmParser.ts b/src/WasmParser.ts index 83c432c..ce22b70 100644 --- a/src/WasmParser.ts +++ b/src/WasmParser.ts @@ -332,242 +332,264 @@ export const enum OperatorCode { i64_atomic_rmw16_cmpxchg_u = 0xfe4d, i64_atomic_rmw32_cmpxchg_u = 0xfe4e, - v128_load = 0xfd00, - i16x8_load8x8_s = 0xfd01, - i16x8_load8x8_u = 0xfd02, - i32x4_load16x4_s = 0xfd03, - i32x4_load16x4_u = 0xfd04, - i64x2_load32x2_s = 0xfd05, - i64x2_load32x2_u = 0xfd06, - v8x16_load_splat = 0xfd07, - v16x8_load_splat = 0xfd08, - v32x4_load_splat = 0xfd09, - v64x2_load_splat = 0xfd0a, - v128_store = 0xfd0b, - v128_const = 0xfd0c, - i8x16_shuffle = 0xfd0d, - i8x16_swizzle = 0xfd0e, - i8x16_splat = 0xfd0f, - i16x8_splat = 0xfd10, - i32x4_splat = 0xfd11, - i64x2_splat = 0xfd12, - f32x4_splat = 0xfd13, - f64x2_splat = 0xfd14, - i8x16_extract_lane_s = 0xfd15, - i8x16_extract_lane_u = 0xfd16, - i8x16_replace_lane = 0xfd17, - i16x8_extract_lane_s = 0xfd18, - i16x8_extract_lane_u = 0xfd19, - i16x8_replace_lane = 0xfd1a, - i32x4_extract_lane = 0xfd1b, - i32x4_replace_lane = 0xfd1c, - i64x2_extract_lane = 0xfd1d, - i64x2_replace_lane = 0xfd1e, - f32x4_extract_lane = 0xfd1f, - f32x4_replace_lane = 0xfd20, - f64x2_extract_lane = 0xfd21, - f64x2_replace_lane = 0xfd22, - i8x16_eq = 0xfd23, - i8x16_ne = 0xfd24, - i8x16_lt_s = 0xfd25, - i8x16_lt_u = 0xfd26, - i8x16_gt_s = 0xfd27, - i8x16_gt_u = 0xfd28, - i8x16_le_s = 0xfd29, - i8x16_le_u = 0xfd2a, - i8x16_ge_s = 0xfd2b, - i8x16_ge_u = 0xfd2c, - i16x8_eq = 0xfd2d, - i16x8_ne = 0xfd2e, - i16x8_lt_s = 0xfd2f, - i16x8_lt_u = 0xfd30, - i16x8_gt_s = 0xfd31, - i16x8_gt_u = 0xfd32, - i16x8_le_s = 0xfd33, - i16x8_le_u = 0xfd34, - i16x8_ge_s = 0xfd35, - i16x8_ge_u = 0xfd36, - i32x4_eq = 0xfd37, - i32x4_ne = 0xfd38, - i32x4_lt_s = 0xfd39, - i32x4_lt_u = 0xfd3a, - i32x4_gt_s = 0xfd3b, - i32x4_gt_u = 0xfd3c, - i32x4_le_s = 0xfd3d, - i32x4_le_u = 0xfd3e, - i32x4_ge_s = 0xfd3f, - i32x4_ge_u = 0xfd40, - f32x4_eq = 0xfd41, - f32x4_ne = 0xfd42, - f32x4_lt = 0xfd43, - f32x4_gt = 0xfd44, - f32x4_le = 0xfd45, - f32x4_ge = 0xfd46, - f64x2_eq = 0xfd47, - f64x2_ne = 0xfd48, - f64x2_lt = 0xfd49, - f64x2_gt = 0xfd4a, - f64x2_le = 0xfd4b, - f64x2_ge = 0xfd4c, - v128_not = 0xfd4d, - v128_and = 0xfd4e, - v128_andnot = 0xfd4f, - v128_or = 0xfd50, - v128_xor = 0xfd51, - v128_bitselect = 0xfd52, - v128_any_true = 0xfd53, - v128_load8_lane = 0xfd54, - v128_load16_lane = 0xfd55, - v128_load32_lane = 0xfd56, - v128_load64_lane = 0xfd57, - v128_store8_lane = 0xfd58, - v128_store16_lane = 0xfd59, - v128_store32_lane = 0xfd5a, - v128_store64_lane = 0xfd5b, - v128_load32_zero = 0xfd5c, - v128_load64_zero = 0xfd5d, - f32x4_demote_f64x2_zero = 0xfd5e, - f64x2_promote_low_f32x4 = 0xfd5f, - i8x16_abs = 0xfd60, - i8x16_neg = 0xfd61, - i8x16_popcnt = 0xfd62, - i8x16_all_true = 0xfd63, - i8x16_bitmask = 0xfd64, - i8x16_narrow_i16x8_s = 0xfd65, - i8x16_narrow_i16x8_u = 0xfd66, - f32x4_ceil = 0xfd67, - f32x4_floor = 0xfd68, - f32x4_trunc = 0xfd69, - f32x4_nearest = 0xfd6a, - i8x16_shl = 0xfd6b, - i8x16_shr_s = 0xfd6c, - i8x16_shr_u = 0xfd6d, - i8x16_add = 0xfd6e, - i8x16_add_sat_s = 0xfd6f, - i8x16_add_sat_u = 0xfd70, - i8x16_sub = 0xfd71, - i8x16_sub_sat_s = 0xfd72, - i8x16_sub_sat_u = 0xfd73, - f64x2_ceil = 0xfd74, - f64x2_floor = 0xfd75, - i8x16_min_s = 0xfd76, - i8x16_min_u = 0xfd77, - i8x16_max_s = 0xfd78, - i8x16_max_u = 0xfd79, - f64x2_trunc = 0xfd7a, - i8x16_avgr_u = 0xfd7b, - i16x8_extadd_pairwise_i8x16_s = 0xfd7c, - i16x8_extadd_pairwise_i8x16_u = 0xfd7d, - i32x4_extadd_pairwise_i16x8_s = 0xfd7e, - i32x4_extadd_pairwise_i16x8_u = 0xfd7f, - i16x8_abs = 0xfd80, - i16x8_neg = 0xfd81, - i16x8_q15mulr_sat_s = 0xfd82, - i16x8_all_true = 0xfd83, - i16x8_bitmask = 0xfd84, - i16x8_narrow_i32x4_s = 0xfd85, - i16x8_narrow_i32x4_u = 0xfd86, - i16x8_extend_low_i8x16_s = 0xfd87, - i16x8_extend_high_i8x16_s = 0xfd88, - i16x8_extend_low_i8x16_u = 0xfd89, - i16x8_extend_high_i8x16_u = 0xfd8a, - i16x8_shl = 0xfd8b, - i16x8_shr_s = 0xfd8c, - i16x8_shr_u = 0xfd8d, - i16x8_add = 0xfd8e, - i16x8_add_sat_s = 0xfd8f, - i16x8_add_sat_u = 0xfd90, - i16x8_sub = 0xfd91, - i16x8_sub_sat_s = 0xfd92, - i16x8_sub_sat_u = 0xfd93, - f64x2_nearest = 0xfd94, - i16x8_mul = 0xfd95, - i16x8_min_s = 0xfd96, - i16x8_min_u = 0xfd97, - i16x8_max_s = 0xfd98, - i16x8_max_u = 0xfd99, - i16x8_avgr_u = 0xfd9b, - i16x8_extmul_low_i8x16_s = 0xfd9c, - i16x8_extmul_high_i8x16_s = 0xfd9d, - i16x8_extmul_low_i8x16_u = 0xfd9e, - i16x8_extmul_high_i8x16_u = 0xfd9f, - i32x4_abs = 0xfda0, - i32x4_neg = 0xfda1, - i32x4_all_true = 0xfda3, - i32x4_bitmask = 0xfda4, - i32x4_extend_low_i16x8_s = 0xfda7, - i32x4_extend_high_i16x8_s = 0xfda8, - i32x4_extend_low_i16x8_u = 0xfda9, - i32x4_extend_high_i16x8_u = 0xfdaa, - i32x4_shl = 0xfdab, - i32x4_shr_s = 0xfdac, - i32x4_shr_u = 0xfdad, - i32x4_add = 0xfdae, - i32x4_sub = 0xfdb1, - i32x4_mul = 0xfdb5, - i32x4_min_s = 0xfdb6, - i32x4_min_u = 0xfdb7, - i32x4_max_s = 0xfdb8, - i32x4_max_u = 0xfdb9, - i32x4_dot_i16x8_s = 0xfdba, - i32x4_extmul_low_i16x8_s = 0xfdbc, - i32x4_extmul_high_i16x8_s = 0xfdbd, - i32x4_extmul_low_i16x8_u = 0xfdbe, - i32x4_extmul_high_i16x8_u = 0xfdbf, - i64x2_abs = 0xfdc0, - i64x2_neg = 0xfdc1, - i64x2_all_true = 0xfdc3, - i64x2_bitmask = 0xfdc4, - i64x2_extend_low_i32x4_s = 0xfdc7, - i64x2_extend_high_i32x4_s = 0xfdc8, - i64x2_extend_low_i32x4_u = 0xfdc9, - i64x2_extend_high_i32x4_u = 0xfdca, - i64x2_shl = 0xfdcb, - i64x2_shr_s = 0xfdcc, - i64x2_shr_u = 0xfdcd, - i64x2_add = 0xfdce, - i64x2_sub = 0xfdd1, - i64x2_mul = 0xfdd5, - i64x2_eq = 0xfdd6, - i64x2_ne = 0xfdd7, - i64x2_lt_s = 0xfdd8, - i64x2_gt_s = 0xfdd9, - i64x2_le_s = 0xfdda, - i64x2_ge_s = 0xfddb, - i64x2_extmul_low_i32x4_s = 0xfddc, - i64x2_extmul_high_i32x4_s = 0xfddd, - i64x2_extmul_low_i32x4_u = 0xfdde, - i64x2_extmul_high_i32x4_u = 0xfddf, - f32x4_abs = 0xfde0, - f32x4_neg = 0xfde1, - f32x4_sqrt = 0xfde3, - f32x4_add = 0xfde4, - f32x4_sub = 0xfde5, - f32x4_mul = 0xfde6, - f32x4_div = 0xfde7, - f32x4_min = 0xfde8, - f32x4_max = 0xfde9, - f32x4_pmin = 0xfdea, - f32x4_pmax = 0xfdeb, - f64x2_abs = 0xfdec, - f64x2_neg = 0xfded, - f64x2_sqrt = 0xfdef, - f64x2_add = 0xfdf0, - f64x2_sub = 0xfdf1, - f64x2_mul = 0xfdf2, - f64x2_div = 0xfdf3, - f64x2_min = 0xfdf4, - f64x2_max = 0xfdf5, - f64x2_pmin = 0xfdf6, - f64x2_pmax = 0xfdf7, - i32x4_trunc_sat_f32x4_s = 0xfdf8, - i32x4_trunc_sat_f32x4_u = 0xfdf9, - f32x4_convert_i32x4_s = 0xfdfa, - f32x4_convert_i32x4_u = 0xfdfb, - i32x4_trunc_sat_f64x2_s_zero = 0xfdfc, - i32x4_trunc_sat_f64x2_u_zero = 0xfdfd, - f64x2_convert_low_i32x4_s = 0xfdfe, - f64x2_convert_low_i32x4_u = 0xfdff, + v128_load = 0xfd000, + i16x8_load8x8_s = 0xfd001, + i16x8_load8x8_u = 0xfd002, + i32x4_load16x4_s = 0xfd003, + i32x4_load16x4_u = 0xfd004, + i64x2_load32x2_s = 0xfd005, + i64x2_load32x2_u = 0xfd006, + v8x16_load_splat = 0xfd007, + v16x8_load_splat = 0xfd008, + v32x4_load_splat = 0xfd009, + v64x2_load_splat = 0xfd00a, + v128_store = 0xfd00b, + v128_const = 0xfd00c, + i8x16_shuffle = 0xfd00d, + i8x16_swizzle = 0xfd00e, + i8x16_splat = 0xfd00f, + i16x8_splat = 0xfd010, + i32x4_splat = 0xfd011, + i64x2_splat = 0xfd012, + f32x4_splat = 0xfd013, + f64x2_splat = 0xfd014, + i8x16_extract_lane_s = 0xfd015, + i8x16_extract_lane_u = 0xfd016, + i8x16_replace_lane = 0xfd017, + i16x8_extract_lane_s = 0xfd018, + i16x8_extract_lane_u = 0xfd019, + i16x8_replace_lane = 0xfd01a, + i32x4_extract_lane = 0xfd01b, + i32x4_replace_lane = 0xfd01c, + i64x2_extract_lane = 0xfd01d, + i64x2_replace_lane = 0xfd01e, + f32x4_extract_lane = 0xfd01f, + f32x4_replace_lane = 0xfd020, + f64x2_extract_lane = 0xfd021, + f64x2_replace_lane = 0xfd022, + i8x16_eq = 0xfd023, + i8x16_ne = 0xfd024, + i8x16_lt_s = 0xfd025, + i8x16_lt_u = 0xfd026, + i8x16_gt_s = 0xfd027, + i8x16_gt_u = 0xfd028, + i8x16_le_s = 0xfd029, + i8x16_le_u = 0xfd02a, + i8x16_ge_s = 0xfd02b, + i8x16_ge_u = 0xfd02c, + i16x8_eq = 0xfd02d, + i16x8_ne = 0xfd02e, + i16x8_lt_s = 0xfd02f, + i16x8_lt_u = 0xfd030, + i16x8_gt_s = 0xfd031, + i16x8_gt_u = 0xfd032, + i16x8_le_s = 0xfd033, + i16x8_le_u = 0xfd034, + i16x8_ge_s = 0xfd035, + i16x8_ge_u = 0xfd036, + i32x4_eq = 0xfd037, + i32x4_ne = 0xfd038, + i32x4_lt_s = 0xfd039, + i32x4_lt_u = 0xfd03a, + i32x4_gt_s = 0xfd03b, + i32x4_gt_u = 0xfd03c, + i32x4_le_s = 0xfd03d, + i32x4_le_u = 0xfd03e, + i32x4_ge_s = 0xfd03f, + i32x4_ge_u = 0xfd040, + f32x4_eq = 0xfd041, + f32x4_ne = 0xfd042, + f32x4_lt = 0xfd043, + f32x4_gt = 0xfd044, + f32x4_le = 0xfd045, + f32x4_ge = 0xfd046, + f64x2_eq = 0xfd047, + f64x2_ne = 0xfd048, + f64x2_lt = 0xfd049, + f64x2_gt = 0xfd04a, + f64x2_le = 0xfd04b, + f64x2_ge = 0xfd04c, + v128_not = 0xfd04d, + v128_and = 0xfd04e, + v128_andnot = 0xfd04f, + v128_or = 0xfd050, + v128_xor = 0xfd051, + v128_bitselect = 0xfd052, + v128_any_true = 0xfd053, + v128_load8_lane = 0xfd054, + v128_load16_lane = 0xfd055, + v128_load32_lane = 0xfd056, + v128_load64_lane = 0xfd057, + v128_store8_lane = 0xfd058, + v128_store16_lane = 0xfd059, + v128_store32_lane = 0xfd05a, + v128_store64_lane = 0xfd05b, + v128_load32_zero = 0xfd05c, + v128_load64_zero = 0xfd05d, + f32x4_demote_f64x2_zero = 0xfd05e, + f64x2_promote_low_f32x4 = 0xfd05f, + i8x16_abs = 0xfd060, + i8x16_neg = 0xfd061, + i8x16_popcnt = 0xfd062, + i8x16_all_true = 0xfd063, + i8x16_bitmask = 0xfd064, + i8x16_narrow_i16x8_s = 0xfd065, + i8x16_narrow_i16x8_u = 0xfd066, + f32x4_ceil = 0xfd067, + f32x4_floor = 0xfd068, + f32x4_trunc = 0xfd069, + f32x4_nearest = 0xfd06a, + i8x16_shl = 0xfd06b, + i8x16_shr_s = 0xfd06c, + i8x16_shr_u = 0xfd06d, + i8x16_add = 0xfd06e, + i8x16_add_sat_s = 0xfd06f, + i8x16_add_sat_u = 0xfd070, + i8x16_sub = 0xfd071, + i8x16_sub_sat_s = 0xfd072, + i8x16_sub_sat_u = 0xfd073, + f64x2_ceil = 0xfd074, + f64x2_floor = 0xfd075, + i8x16_min_s = 0xfd076, + i8x16_min_u = 0xfd077, + i8x16_max_s = 0xfd078, + i8x16_max_u = 0xfd079, + f64x2_trunc = 0xfd07a, + i8x16_avgr_u = 0xfd07b, + i16x8_extadd_pairwise_i8x16_s = 0xfd07c, + i16x8_extadd_pairwise_i8x16_u = 0xfd07d, + i32x4_extadd_pairwise_i16x8_s = 0xfd07e, + i32x4_extadd_pairwise_i16x8_u = 0xfd07f, + i16x8_abs = 0xfd080, + i16x8_neg = 0xfd081, + i16x8_q15mulr_sat_s = 0xfd082, + i16x8_all_true = 0xfd083, + i16x8_bitmask = 0xfd084, + i16x8_narrow_i32x4_s = 0xfd085, + i16x8_narrow_i32x4_u = 0xfd086, + i16x8_extend_low_i8x16_s = 0xfd087, + i16x8_extend_high_i8x16_s = 0xfd088, + i16x8_extend_low_i8x16_u = 0xfd089, + i16x8_extend_high_i8x16_u = 0xfd08a, + i16x8_shl = 0xfd08b, + i16x8_shr_s = 0xfd08c, + i16x8_shr_u = 0xfd08d, + i16x8_add = 0xfd08e, + i16x8_add_sat_s = 0xfd08f, + i16x8_add_sat_u = 0xfd090, + i16x8_sub = 0xfd091, + i16x8_sub_sat_s = 0xfd092, + i16x8_sub_sat_u = 0xfd093, + f64x2_nearest = 0xfd094, + i16x8_mul = 0xfd095, + i16x8_min_s = 0xfd096, + i16x8_min_u = 0xfd097, + i16x8_max_s = 0xfd098, + i16x8_max_u = 0xfd099, + i16x8_avgr_u = 0xfd09b, + i16x8_extmul_low_i8x16_s = 0xfd09c, + i16x8_extmul_high_i8x16_s = 0xfd09d, + i16x8_extmul_low_i8x16_u = 0xfd09e, + i16x8_extmul_high_i8x16_u = 0xfd09f, + i32x4_abs = 0xfd0a0, + i32x4_neg = 0xfd0a1, + i32x4_all_true = 0xfd0a3, + i32x4_bitmask = 0xfd0a4, + i32x4_extend_low_i16x8_s = 0xfd0a7, + i32x4_extend_high_i16x8_s = 0xfd0a8, + i32x4_extend_low_i16x8_u = 0xfd0a9, + i32x4_extend_high_i16x8_u = 0xfd0aa, + i32x4_shl = 0xfd0ab, + i32x4_shr_s = 0xfd0ac, + i32x4_shr_u = 0xfd0ad, + i32x4_add = 0xfd0ae, + i32x4_sub = 0xfd0b1, + i32x4_mul = 0xfd0b5, + i32x4_min_s = 0xfd0b6, + i32x4_min_u = 0xfd0b7, + i32x4_max_s = 0xfd0b8, + i32x4_max_u = 0xfd0b9, + i32x4_dot_i16x8_s = 0xfd0ba, + i32x4_extmul_low_i16x8_s = 0xfd0bc, + i32x4_extmul_high_i16x8_s = 0xfd0bd, + i32x4_extmul_low_i16x8_u = 0xfd0be, + i32x4_extmul_high_i16x8_u = 0xfd0bf, + i64x2_abs = 0xfd0c0, + i64x2_neg = 0xfd0c1, + i64x2_all_true = 0xfd0c3, + i64x2_bitmask = 0xfd0c4, + i64x2_extend_low_i32x4_s = 0xfd0c7, + i64x2_extend_high_i32x4_s = 0xfd0c8, + i64x2_extend_low_i32x4_u = 0xfd0c9, + i64x2_extend_high_i32x4_u = 0xfd0ca, + i64x2_shl = 0xfd0cb, + i64x2_shr_s = 0xfd0cc, + i64x2_shr_u = 0xfd0cd, + i64x2_add = 0xfd0ce, + i64x2_sub = 0xfd0d1, + i64x2_mul = 0xfd0d5, + i64x2_eq = 0xfd0d6, + i64x2_ne = 0xfd0d7, + i64x2_lt_s = 0xfd0d8, + i64x2_gt_s = 0xfd0d9, + i64x2_le_s = 0xfd0da, + i64x2_ge_s = 0xfd0db, + i64x2_extmul_low_i32x4_s = 0xfd0dc, + i64x2_extmul_high_i32x4_s = 0xfd0dd, + i64x2_extmul_low_i32x4_u = 0xfd0de, + i64x2_extmul_high_i32x4_u = 0xfd0df, + f32x4_abs = 0xfd0e0, + f32x4_neg = 0xfd0e1, + f32x4_sqrt = 0xfd0e3, + f32x4_add = 0xfd0e4, + f32x4_sub = 0xfd0e5, + f32x4_mul = 0xfd0e6, + f32x4_div = 0xfd0e7, + f32x4_min = 0xfd0e8, + f32x4_max = 0xfd0e9, + f32x4_pmin = 0xfd0ea, + f32x4_pmax = 0xfd0eb, + f64x2_abs = 0xfd0ec, + f64x2_neg = 0xfd0ed, + f64x2_sqrt = 0xfd0ef, + f64x2_add = 0xfd0f0, + f64x2_sub = 0xfd0f1, + f64x2_mul = 0xfd0f2, + f64x2_div = 0xfd0f3, + f64x2_min = 0xfd0f4, + f64x2_max = 0xfd0f5, + f64x2_pmin = 0xfd0f6, + f64x2_pmax = 0xfd0f7, + i32x4_trunc_sat_f32x4_s = 0xfd0f8, + i32x4_trunc_sat_f32x4_u = 0xfd0f9, + f32x4_convert_i32x4_s = 0xfd0fa, + f32x4_convert_i32x4_u = 0xfd0fb, + i32x4_trunc_sat_f64x2_s_zero = 0xfd0fc, + i32x4_trunc_sat_f64x2_u_zero = 0xfd0fd, + f64x2_convert_low_i32x4_s = 0xfd0fe, + f64x2_convert_low_i32x4_u = 0xfd0ff, + + // Relaxed SIMD + i8x16_relaxed_swizzle = 0xfd100, + i32x4_relaxed_trunc_f32x4_s = 0xfd101, + i32x4_relaxed_trunc_f32x4_u = 0xfd102, + i32x4_relaxed_trunc_f64x2_s_zero = 0xfd103, + i32x4_relaxed_trunc_f64x2_u_zero = 0xfd104, + f32x4_relaxed_madd = 0xfd105, + f32x4_relaxed_nmadd = 0xfd106, + f64x2_relaxed_madd = 0xfd107, + f64x2_relaxed_nmadd = 0xfd108, + i8x16_relaxed_laneselect = 0xfd109, + i16x8_relaxed_laneselect = 0xfd10a, + i32x4_relaxed_laneselect = 0xfd10b, + i64x2_relaxed_laneselect = 0xfd10c, + f32x4_relaxed_min = 0xfd10d, + f32x4_relaxed_max = 0xfd10e, + f64x2_relaxed_min = 0xfd10f, + f64x2_relaxed_max = 0xfd110, + i16x8_relaxed_q15mulr_s = 0xfd111, + i16x8_dot_i8x16_i7x16_s = 0xfd112, + i32x4_dot_i8x16_i7x16_add_s = 0xfd113, // GC proposal (milestone 6). struct_new_with_rtt = 0xfb01, @@ -1176,8 +1198,28 @@ export const OperatorCodeNames = [ "i32x4.trunc_sat_f64x2_u_zero", "f64x2.convert_low_i32x4_s", "f64x2.convert_low_i32x4_u", + "i8x16.relaxed_swizzle", + "i32x4.relaxed_trunc_f32x4_s", + "i32x4.relaxed_trunc_f32x4_u", + "i32x4.relaxed_trunc_f64x2_s_zero", + "i32x4.relaxed_trunc_f64x2_u_zero", + "f32x4.relaxed_madd", + "f32x4.relaxed_nmadd", + "f64x2.relaxed_madd", + "f64x2.relaxed_nmadd", + "i8x16.relaxed_laneselect", + "i16x8.relaxed_laneselect", + "i32x4.relaxed_laneselect", + "i64x2.relaxed_laneselect", + "f32x4.relaxed_min", + "f32x4.relaxed_max", + "f64x2.relaxed_min", + "f64x2.relaxed_max", + "i16x8.relaxed_q15mulr_s", + "i16x8.dot_i8x16_i7x16_s", + "i32x4.dot_i8x16_i7x16_add_s", ].forEach((s, i) => { - OperatorCodeNames[0xfd00 | i] = s; + OperatorCodeNames[0xfd000 | i] = s; }); [ @@ -2870,7 +2912,7 @@ export class BinaryReader { if (!this.hasVarIntBytes()) { return false; } - var code = this.readVarUint32() | 0xfd00; + var code = this.readVarUint32() | 0xfd000; var memoryAddress; var literal; var lineIndex; @@ -3117,6 +3159,27 @@ export class BinaryReader { case OperatorCode.f64x2_convert_low_i32x4_s: case OperatorCode.f64x2_convert_low_i32x4_u: break; + case OperatorCode.i8x16_relaxed_swizzle: + case OperatorCode.i32x4_relaxed_trunc_f32x4_s: + case OperatorCode.i32x4_relaxed_trunc_f32x4_u: + case OperatorCode.i32x4_relaxed_trunc_f64x2_s_zero: + case OperatorCode.i32x4_relaxed_trunc_f64x2_u_zero: + case OperatorCode.f32x4_relaxed_madd: + case OperatorCode.f32x4_relaxed_nmadd: + case OperatorCode.f64x2_relaxed_madd: + case OperatorCode.f64x2_relaxed_nmadd: + case OperatorCode.i8x16_relaxed_laneselect: + case OperatorCode.i16x8_relaxed_laneselect: + case OperatorCode.i32x4_relaxed_laneselect: + case OperatorCode.i64x2_relaxed_laneselect: + case OperatorCode.f32x4_relaxed_min: + case OperatorCode.f32x4_relaxed_max: + case OperatorCode.f64x2_relaxed_min: + case OperatorCode.f64x2_relaxed_max: + case OperatorCode.i16x8_relaxed_q15mulr_s: + case OperatorCode.i16x8_dot_i8x16_i7x16_s: + case OperatorCode.i32x4_dot_i8x16_i7x16_add_s: + break; default: this.error = new Error( `Unknown operator: 0x${code.toString(16).padStart(4, "0")}` diff --git a/test/__fixtures__/relaxed_simd.wasm b/test/__fixtures__/relaxed_simd.wasm new file mode 100644 index 0000000000000000000000000000000000000000..b4683d875dd046f8d8754ef4f33c4d21c68862ed GIT binary patch literal 614 zcmZvW+fIW(5QcY`Y6aAyU^MZDCorK_?AvTN1(HpGMiwH08_)H8d@|#e4@2StTe>lw zi=8k3{5$gl!XgL&fTl7*WeLj(tRJPUS=qAyy52Z#RNYE^C-Ge3dx;+;ew6r0;%B6bBrhGkcJ$WKdq*D~eM)=2kPd!PFD8)> zzmWy{?3@-w=tGkp5AzXDlPsR%pkanqh?#QGIFE$W9pyvJaN#Gj-ik@qOxDzPV-S&b zO<)|6z8W;&xxAqXDo$0i3e{ literal 0 HcmV?d00001 diff --git a/test/__snapshots__/parse-and-disassemble.test.ts.snap b/test/__snapshots__/parse-and-disassemble.test.ts.snap index b6afd60..17a70c8 100644 --- a/test/__snapshots__/parse-and-disassemble.test.ts.snap +++ b/test/__snapshots__/parse-and-disassemble.test.ts.snap @@ -30751,6 +30751,117 @@ exports[`Parsing and disassembling ref_types.0.wasm generates expected output 1` " `; +exports[`Parsing and disassembling relaxed_simd.wasm generates expected output 1`] = ` +"(module + (func $func0 (param $var0 v128) (param $var1 v128) (result v128) + local.get $var0 + local.get $var1 + i8x16.relaxed_swizzle + ) + (func $func1 (param $var0 v128) (result v128) + local.get $var0 + i32x4.relaxed_trunc_f32x4_s + ) + (func $func2 (param $var0 v128) (result v128) + local.get $var0 + i32x4.relaxed_trunc_f32x4_u + ) + (func $func3 (param $var0 v128) (result v128) + local.get $var0 + i32x4.relaxed_trunc_f64x2_s_zero + ) + (func $func4 (param $var0 v128) (result v128) + local.get $var0 + i32x4.relaxed_trunc_f64x2_u_zero + ) + (func $func5 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + f32x4.relaxed_madd + ) + (func $func6 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + f32x4.relaxed_nmadd + ) + (func $func7 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + f64x2.relaxed_madd + ) + (func $func8 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + f64x2.relaxed_nmadd + ) + (func $func9 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + i8x16.relaxed_laneselect + ) + (func $func10 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + i16x8.relaxed_laneselect + ) + (func $func11 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + i32x4.relaxed_laneselect + ) + (func $func12 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + i64x2.relaxed_laneselect + ) + (func $func13 (param $var0 v128) (param $var1 v128) (result v128) + local.get $var0 + local.get $var1 + f32x4.relaxed_min + ) + (func $func14 (param $var0 v128) (param $var1 v128) (result v128) + local.get $var0 + local.get $var1 + f32x4.relaxed_max + ) + (func $func15 (param $var0 v128) (param $var1 v128) (result v128) + local.get $var0 + local.get $var1 + f64x2.relaxed_min + ) + (func $func16 (param $var0 v128) (param $var1 v128) (result v128) + local.get $var0 + local.get $var1 + f64x2.relaxed_max + ) + (func $func17 (param $var0 v128) (param $var1 v128) (result v128) + local.get $var0 + local.get $var1 + i16x8.relaxed_q15mulr_s + ) + (func $func18 (param $var0 v128) (param $var1 v128) (result v128) + local.get $var0 + local.get $var1 + i16x8.dot_i8x16_i7x16_s + ) + (func $func19 (param $var0 v128) (param $var1 v128) (param $var2 v128) (result v128) + local.get $var0 + local.get $var1 + local.get $var2 + i32x4.dot_i8x16_i7x16_add_s + ) +) +" +`; + exports[`Parsing and disassembling reloc.wasm generates expected output 1`] = ` "(module (global $global0 (import "env" "STACKTOP") i32) diff --git a/test/wabt-compatibility.test.ts b/test/wabt-compatibility.test.ts index a7633e6..cc2d906 100644 --- a/test/wabt-compatibility.test.ts +++ b/test/wabt-compatibility.test.ts @@ -25,6 +25,7 @@ const WABT_FEATURES = { reference_types: true, sign_extension: true, simd: true, + relaxed_simd: true, sat_float_to_int: true, tail_call: true, threads: true,