Skip to content

Commit 545d565

Browse files
committed
use simd_shuffle macros on wasm32
1 parent 625dffe commit 545d565

File tree

1 file changed

+82
-46
lines changed

1 file changed

+82
-46
lines changed

crates/core_arch/src/wasm32/simd128.rs

+82-46
Original file line numberDiff line numberDiff line change
@@ -769,10 +769,27 @@ pub unsafe fn i8x16_shuffle<
769769
static_assert!(I13: usize where I13 < 32);
770770
static_assert!(I14: usize where I14 < 32);
771771
static_assert!(I15: usize where I15 < 32);
772-
let shuf = simd_shuffle16::<simd::u8x16, simd::u8x16>(
772+
let shuf: simd::u8x16 = simd_shuffle16!(
773773
a.as_u8x16(),
774774
b.as_u8x16(),
775-
[
775+
<
776+
const I0: usize,
777+
const I1: usize,
778+
const I2: usize,
779+
const I3: usize,
780+
const I4: usize,
781+
const I5: usize,
782+
const I6: usize,
783+
const I7: usize,
784+
const I8: usize,
785+
const I9: usize,
786+
const I10: usize,
787+
const I11: usize,
788+
const I12: usize,
789+
const I13: usize,
790+
const I14: usize,
791+
const I15: usize,
792+
> [
776793
I0 as u32, I1 as u32, I2 as u32, I3 as u32, I4 as u32, I5 as u32, I6 as u32, I7 as u32,
777794
I8 as u32, I9 as u32, I10 as u32, I11 as u32, I12 as u32, I13 as u32, I14 as u32,
778795
I15 as u32,
@@ -825,10 +842,19 @@ pub unsafe fn i16x8_shuffle<
825842
static_assert!(I5: usize where I5 < 16);
826843
static_assert!(I6: usize where I6 < 16);
827844
static_assert!(I7: usize where I7 < 16);
828-
let shuf = simd_shuffle8::<simd::u16x8, simd::u16x8>(
845+
let shuf: simd::u16x8 = simd_shuffle8!(
829846
a.as_u16x8(),
830847
b.as_u16x8(),
831-
[
848+
<
849+
const I0: usize,
850+
const I1: usize,
851+
const I2: usize,
852+
const I3: usize,
853+
const I4: usize,
854+
const I5: usize,
855+
const I6: usize,
856+
const I7: usize,
857+
> [
832858
I0 as u32, I1 as u32, I2 as u32, I3 as u32, I4 as u32, I5 as u32, I6 as u32, I7 as u32,
833859
],
834860
);
@@ -854,10 +880,10 @@ pub unsafe fn i32x4_shuffle<const I0: usize, const I1: usize, const I2: usize, c
854880
static_assert!(I1: usize where I1 < 8);
855881
static_assert!(I2: usize where I2 < 8);
856882
static_assert!(I3: usize where I3 < 8);
857-
let shuf = simd_shuffle4::<simd::u32x4, simd::u32x4>(
883+
let shuf: simd::u32x4 = simd_shuffle4!(
858884
a.as_u32x4(),
859885
b.as_u32x4(),
860-
[I0 as u32, I1 as u32, I2 as u32, I3 as u32],
886+
<const I0: usize, const I1: usize, const I2: usize, const I3: usize> [I0 as u32, I1 as u32, I2 as u32, I3 as u32],
861887
);
862888
transmute(shuf)
863889
}
@@ -876,10 +902,10 @@ pub unsafe fn i32x4_shuffle<const I0: usize, const I1: usize, const I2: usize, c
876902
pub unsafe fn i64x2_shuffle<const I0: usize, const I1: usize>(a: v128, b: v128) -> v128 {
877903
static_assert!(I0: usize where I0 < 4);
878904
static_assert!(I1: usize where I1 < 4);
879-
let shuf = simd_shuffle2::<simd::u64x2, simd::u64x2>(
905+
let shuf: simd::u64x2 = simd_shuffle2!(
880906
a.as_u64x2(),
881907
b.as_u64x2(),
882-
[I0 as u32, I1 as u32],
908+
<const I0: usize, const I1: usize> [I0 as u32, I1 as u32],
883909
);
884910
transmute(shuf)
885911
}
@@ -2288,7 +2314,7 @@ pub unsafe fn u16x8_narrow_i32x4(a: v128, b: v128) -> v128 {
22882314
#[target_feature(enable = "simd128")]
22892315
#[doc(alias("i16x8.extend_low_i8x16_s"))]
22902316
pub unsafe fn i16x8_extend_low_i8x16(a: v128) -> v128 {
2291-
transmute(simd_cast::<_, simd::i16x8>(simd_shuffle8::<_, simd::i8x8>(
2317+
transmute(simd_cast::<simd::i8x8, simd::i16x8>(simd_shuffle8!(
22922318
a.as_i8x16(),
22932319
a.as_i8x16(),
22942320
[0, 1, 2, 3, 4, 5, 6, 7],
@@ -2302,7 +2328,7 @@ pub unsafe fn i16x8_extend_low_i8x16(a: v128) -> v128 {
23022328
#[target_feature(enable = "simd128")]
23032329
#[doc(alias("i16x8.extend_high_i8x16_s"))]
23042330
pub unsafe fn i16x8_extend_high_i8x16(a: v128) -> v128 {
2305-
transmute(simd_cast::<_, simd::i16x8>(simd_shuffle8::<_, simd::i8x8>(
2331+
transmute(simd_cast::<simd::i8x8, simd::i16x8>(simd_shuffle8!(
23062332
a.as_i8x16(),
23072333
a.as_i8x16(),
23082334
[8, 9, 10, 11, 12, 13, 14, 15],
@@ -2316,7 +2342,7 @@ pub unsafe fn i16x8_extend_high_i8x16(a: v128) -> v128 {
23162342
#[target_feature(enable = "simd128")]
23172343
#[doc(alias("i16x8.extend_low_i8x16_u"))]
23182344
pub unsafe fn i16x8_extend_low_u8x16(a: v128) -> v128 {
2319-
transmute(simd_cast::<_, simd::u16x8>(simd_shuffle8::<_, simd::u8x8>(
2345+
transmute(simd_cast::<simd::u8x8, simd::u16x8>(simd_shuffle8!(
23202346
a.as_u8x16(),
23212347
a.as_u8x16(),
23222348
[0, 1, 2, 3, 4, 5, 6, 7],
@@ -2330,7 +2356,7 @@ pub unsafe fn i16x8_extend_low_u8x16(a: v128) -> v128 {
23302356
#[target_feature(enable = "simd128")]
23312357
#[doc(alias("i16x8.extend_high_i8x16_u"))]
23322358
pub unsafe fn i16x8_extend_high_u8x16(a: v128) -> v128 {
2333-
transmute(simd_cast::<_, simd::u16x8>(simd_shuffle8::<_, simd::u8x8>(
2359+
transmute(simd_cast::<simd::u8x8, simd::u16x8>(simd_shuffle8!(
23342360
a.as_u8x16(),
23352361
a.as_u8x16(),
23362362
[8, 9, 10, 11, 12, 13, 14, 15],
@@ -2618,9 +2644,11 @@ pub unsafe fn i32x4_bitmask(a: v128) -> i32 {
26182644
#[target_feature(enable = "simd128")]
26192645
#[doc(alias("i32x4.extend_low_i16x8_s"))]
26202646
pub unsafe fn i32x4_extend_low_i16x8(a: v128) -> v128 {
2621-
transmute(simd_cast::<_, simd::i32x4>(
2622-
simd_shuffle4::<_, simd::i16x4>(a.as_i16x8(), a.as_i16x8(), [0, 1, 2, 3]),
2623-
))
2647+
transmute(simd_cast::<simd::i16x4, simd::i32x4>(simd_shuffle!(
2648+
a.as_i16x8(),
2649+
a.as_i16x8(),
2650+
[0, 1, 2, 3]
2651+
)))
26242652
}
26252653

26262654
/// Converts high half of the smaller lane vector to a larger lane
@@ -2630,9 +2658,11 @@ pub unsafe fn i32x4_extend_low_i16x8(a: v128) -> v128 {
26302658
#[target_feature(enable = "simd128")]
26312659
#[doc(alias("i32x4.extend_high_i16x8_s"))]
26322660
pub unsafe fn i32x4_extend_high_i16x8(a: v128) -> v128 {
2633-
transmute(simd_cast::<_, simd::i32x4>(
2634-
simd_shuffle4::<_, simd::i16x4>(a.as_i16x8(), a.as_i16x8(), [4, 5, 6, 7]),
2635-
))
2661+
transmute(simd_cast::<simd::i16x4, simd::i32x4>(simd_shuffle4!(
2662+
a.as_i16x8(),
2663+
a.as_i16x8(),
2664+
[4, 5, 6, 7]
2665+
)))
26362666
}
26372667

26382668
/// Converts low half of the smaller lane vector to a larger lane
@@ -2642,9 +2672,11 @@ pub unsafe fn i32x4_extend_high_i16x8(a: v128) -> v128 {
26422672
#[target_feature(enable = "simd128")]
26432673
#[doc(alias("i32x4.extend_low_i16x8_u"))]
26442674
pub unsafe fn i32x4_extend_low_u16x8(a: v128) -> v128 {
2645-
transmute(simd_cast::<_, simd::u32x4>(
2646-
simd_shuffle4::<_, simd::u16x4>(a.as_u16x8(), a.as_u16x8(), [0, 1, 2, 3]),
2647-
))
2675+
transmute(simd_cast::<simd::u16x4, simd::u32x4>(simd_shuffle4!(
2676+
a.as_u16x8(),
2677+
a.as_u16x8(),
2678+
[0, 1, 2, 3]
2679+
)))
26482680
}
26492681

26502682
/// Converts high half of the smaller lane vector to a larger lane
@@ -2654,9 +2686,11 @@ pub unsafe fn i32x4_extend_low_u16x8(a: v128) -> v128 {
26542686
#[target_feature(enable = "simd128")]
26552687
#[doc(alias("i32x4.extend_high_i16x8_u"))]
26562688
pub unsafe fn i32x4_extend_high_u16x8(a: v128) -> v128 {
2657-
transmute(simd_cast::<_, simd::u32x4>(
2658-
simd_shuffle4::<_, simd::u16x4>(a.as_u16x8(), a.as_u16x8(), [4, 5, 6, 7]),
2659-
))
2689+
transmute(simd_cast::<simd::u16x4, simd::u32x4>(simd_shuffle4!(
2690+
a.as_u16x8(),
2691+
a.as_u16x8(),
2692+
[4, 5, 6, 7]
2693+
)))
26602694
}
26612695

26622696
/// Shifts each lane to the left by the specified number of bits.
@@ -2881,9 +2915,11 @@ pub unsafe fn i64x2_bitmask(a: v128) -> i32 {
28812915
#[target_feature(enable = "simd128")]
28822916
#[doc(alias("i64x2.extend_low_i32x4_s"))]
28832917
pub unsafe fn i64x2_extend_low_i32x4(a: v128) -> v128 {
2884-
transmute(simd_cast::<_, simd::i64x2>(
2885-
simd_shuffle2::<_, simd::i32x2>(a.as_i32x4(), a.as_i32x4(), [0, 1]),
2886-
))
2918+
transmute(simd_cast::<simd::i32x2, simd::i64x2>(simd_shuffle2!(
2919+
a.as_i32x4(),
2920+
a.as_i32x4(),
2921+
[0, 1]
2922+
)))
28872923
}
28882924

28892925
/// Converts high half of the smaller lane vector to a larger lane
@@ -2893,9 +2929,11 @@ pub unsafe fn i64x2_extend_low_i32x4(a: v128) -> v128 {
28932929
#[target_feature(enable = "simd128")]
28942930
#[doc(alias("i64x2.extend_high_i32x4_s"))]
28952931
pub unsafe fn i64x2_extend_high_i32x4(a: v128) -> v128 {
2896-
transmute(simd_cast::<_, simd::i64x2>(
2897-
simd_shuffle2::<_, simd::i32x2>(a.as_i32x4(), a.as_i32x4(), [2, 3]),
2898-
))
2932+
transmute(simd_cast::<simd::i32x2, simd::i64x2>(simd_shuffle2!(
2933+
a.as_i32x4(),
2934+
a.as_i32x4(),
2935+
[2, 3]
2936+
)))
28992937
}
29002938

29012939
/// Converts low half of the smaller lane vector to a larger lane
@@ -2905,9 +2943,11 @@ pub unsafe fn i64x2_extend_high_i32x4(a: v128) -> v128 {
29052943
#[target_feature(enable = "simd128")]
29062944
#[doc(alias("i64x2.extend_low_i32x4_u"))]
29072945
pub unsafe fn i64x2_extend_low_u32x4(a: v128) -> v128 {
2908-
transmute(simd_cast::<_, simd::i64x2>(
2909-
simd_shuffle2::<_, simd::u32x2>(a.as_u32x4(), a.as_u32x4(), [0, 1]),
2910-
))
2946+
transmute(simd_cast::<simd::u32x2, simd::i64x2>(simd_shuffle2!(
2947+
a.as_u32x4(),
2948+
a.as_u32x4(),
2949+
[0, 1]
2950+
)))
29112951
}
29122952

29132953
/// Converts high half of the smaller lane vector to a larger lane
@@ -2917,9 +2957,11 @@ pub unsafe fn i64x2_extend_low_u32x4(a: v128) -> v128 {
29172957
#[target_feature(enable = "simd128")]
29182958
#[doc(alias("i64x2.extend_high_i32x4_u"))]
29192959
pub unsafe fn i64x2_extend_high_u32x4(a: v128) -> v128 {
2920-
transmute(simd_cast::<_, simd::i64x2>(
2921-
simd_shuffle2::<_, simd::u32x2>(a.as_u32x4(), a.as_u32x4(), [2, 3]),
2922-
))
2960+
transmute(simd_cast::<simd::u32x2, simd::i64x2>(simd_shuffle2!(
2961+
a.as_u32x4(),
2962+
a.as_u32x4(),
2963+
[2, 3]
2964+
)))
29232965
}
29242966

29252967
/// Shifts each lane to the left by the specified number of bits.
@@ -3386,7 +3428,7 @@ pub unsafe fn f32x4_convert_u32x4(a: v128) -> v128 {
33863428
#[target_feature(enable = "simd128")]
33873429
#[doc(alias("i32x4.trunc_sat_f64x2_s_zero"))]
33883430
pub unsafe fn i32x4_trunc_sat_f64x2_zero(a: v128) -> v128 {
3389-
transmute(simd_shuffle4::<simd::i32x2, simd::i32x4>(
3431+
transmute::<simd::i32x4, v128>(simd_shuffle4!(
33903432
llvm_i32x2_trunc_sat_f64x2_s(a.as_f64x2()),
33913433
simd::i32x2::splat(0),
33923434
[0, 1, 2, 3],
@@ -3406,7 +3448,7 @@ pub unsafe fn i32x4_trunc_sat_f64x2_zero(a: v128) -> v128 {
34063448
#[target_feature(enable = "simd128")]
34073449
#[doc(alias("i32x4.trunc_sat_f64x2_u_zero"))]
34083450
pub unsafe fn u32x4_trunc_sat_f64x2_zero(a: v128) -> v128 {
3409-
transmute(simd_shuffle4::<simd::i32x2, simd::i32x4>(
3451+
transmute::<simd::i32x4, v128>(simd_shuffle4!(
34103452
llvm_i32x2_trunc_sat_f64x2_u(a.as_f64x2()),
34113453
simd::i32x2::splat(0),
34123454
[0, 1, 2, 3],
@@ -3419,10 +3461,7 @@ pub unsafe fn u32x4_trunc_sat_f64x2_zero(a: v128) -> v128 {
34193461
#[target_feature(enable = "simd128")]
34203462
#[doc(alias("f64x2.convert_low_i32x4_s"))]
34213463
pub unsafe fn f64x2_convert_low_i32x4(a: v128) -> v128 {
3422-
transmute(simd_cast::<_, simd::f64x2>(simd_shuffle2::<
3423-
simd::i32x4,
3424-
simd::i32x2,
3425-
>(
3464+
transmute(simd_cast::<simd::i32x2, simd::f64x2>(simd_shuffle2!(
34263465
a.as_i32x4(),
34273466
a.as_i32x4(),
34283467
[0, 1],
@@ -3435,10 +3474,7 @@ pub unsafe fn f64x2_convert_low_i32x4(a: v128) -> v128 {
34353474
#[target_feature(enable = "simd128")]
34363475
#[doc(alias("f64x2.convert_low_i32x4_u"))]
34373476
pub unsafe fn f64x2_convert_low_u32x4(a: v128) -> v128 {
3438-
transmute(simd_cast::<_, simd::f64x2>(simd_shuffle2::<
3439-
simd::u32x4,
3440-
simd::u32x2,
3441-
>(
3477+
transmute(simd_cast::<simd::u32x2, simd::f64x2>(simd_shuffle2!(
34423478
a.as_u32x4(),
34433479
a.as_u32x4(),
34443480
[0, 1],

0 commit comments

Comments
 (0)