Skip to content

Commit c696236

Browse files
alexcrichtonAmanieu
authored andcommitted
Mark f32x4 and f64x2 as const-stable on wasm
Now that `transmute` can be flagged as `const`-stable this commit updates the `f32x4` and `f64x2` constructors as `const`-stable as well. This also additionally rewrites the other integer constructors in a more readable fashion now that the general `v128()` method is `const`-stable.
1 parent 6225631 commit c696236

File tree

1 file changed

+15
-35
lines changed

1 file changed

+15
-35
lines changed

crates/core_arch/src/wasm32/simd128.rs

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ macro_rules! conversions {
5454
$(
5555
impl $ty {
5656
#[inline(always)]
57+
#[rustc_const_stable(feature = "wasm_simd_const", since = "1.56.0")]
5758
const fn v128(self) -> v128 {
5859
unsafe { mem::transmute(self) }
5960
}
@@ -813,24 +814,10 @@ pub const fn i8x16(
813814
a14: i8,
814815
a15: i8,
815816
) -> v128 {
816-
v128(
817-
(a0 as u8 as i32)
818-
| ((a1 as u8 as i32) << 8)
819-
| ((a2 as u8 as i32) << 16)
820-
| ((a3 as u8 as i32) << 24),
821-
(a4 as u8 as i32)
822-
| ((a5 as u8 as i32) << 8)
823-
| ((a6 as u8 as i32) << 16)
824-
| ((a7 as u8 as i32) << 24),
825-
(a8 as u8 as i32)
826-
| ((a9 as u8 as i32) << 8)
827-
| ((a10 as u8 as i32) << 16)
828-
| ((a11 as u8 as i32) << 24),
829-
(a12 as u8 as i32)
830-
| ((a13 as u8 as i32) << 8)
831-
| ((a14 as u8 as i32) << 16)
832-
| ((a15 as u8 as i32) << 24),
817+
simd::i8x16(
818+
a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
833819
)
820+
.v128()
834821
}
835822

836823
/// Materializes a SIMD value from the provided operands.
@@ -860,10 +847,10 @@ pub const fn u8x16(
860847
a14: u8,
861848
a15: u8,
862849
) -> v128 {
863-
i8x16(
864-
a0 as i8, a1 as i8, a2 as i8, a3 as i8, a4 as i8, a5 as i8, a6 as i8, a7 as i8, a8 as i8,
865-
a9 as i8, a10 as i8, a11 as i8, a12 as i8, a13 as i8, a14 as i8, a15 as i8,
850+
simd::u8x16(
851+
a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
866852
)
853+
.v128()
867854
}
868855

869856
/// Materializes a SIMD value from the provided operands.
@@ -890,12 +877,7 @@ pub const fn u8x16(
890877
#[stable(feature = "wasm_simd", since = "1.54.0")]
891878
#[rustc_const_stable(feature = "wasm_simd", since = "1.54.0")]
892879
pub const fn i16x8(a0: i16, a1: i16, a2: i16, a3: i16, a4: i16, a5: i16, a6: i16, a7: i16) -> v128 {
893-
v128(
894-
(a0 as u16 as i32) | ((a1 as i32) << 16),
895-
(a2 as u16 as i32) | ((a3 as i32) << 16),
896-
(a4 as u16 as i32) | ((a5 as i32) << 16),
897-
(a6 as u16 as i32) | ((a7 as i32) << 16),
898-
)
880+
simd::i16x8(a0, a1, a2, a3, a4, a5, a6, a7).v128()
899881
}
900882

901883
/// Materializes a SIMD value from the provided operands.
@@ -908,9 +890,7 @@ pub const fn i16x8(a0: i16, a1: i16, a2: i16, a3: i16, a4: i16, a5: i16, a6: i16
908890
#[stable(feature = "wasm_simd", since = "1.54.0")]
909891
#[rustc_const_stable(feature = "wasm_simd", since = "1.54.0")]
910892
pub const fn u16x8(a0: u16, a1: u16, a2: u16, a3: u16, a4: u16, a5: u16, a6: u16, a7: u16) -> v128 {
911-
i16x8(
912-
a0 as i16, a1 as i16, a2 as i16, a3 as i16, a4 as i16, a5 as i16, a6 as i16, a7 as i16,
913-
)
893+
simd::u16x8(a0, a1, a2, a3, a4, a5, a6, a7).v128()
914894
}
915895

916896
/// Materializes a SIMD value from the provided operands.
@@ -924,7 +904,7 @@ pub const fn u16x8(a0: u16, a1: u16, a2: u16, a3: u16, a4: u16, a5: u16, a6: u16
924904
#[stable(feature = "wasm_simd", since = "1.54.0")]
925905
#[rustc_const_stable(feature = "wasm_simd", since = "1.54.0")]
926906
pub const fn i32x4(a0: i32, a1: i32, a2: i32, a3: i32) -> v128 {
927-
v128(a0, a1, a2, a3)
907+
simd::i32x4(a0, a1, a2, a3).v128()
928908
}
929909

930910
/// Materializes a SIMD value from the provided operands.
@@ -937,7 +917,7 @@ pub const fn i32x4(a0: i32, a1: i32, a2: i32, a3: i32) -> v128 {
937917
#[stable(feature = "wasm_simd", since = "1.54.0")]
938918
#[rustc_const_stable(feature = "wasm_simd", since = "1.54.0")]
939919
pub const fn u32x4(a0: u32, a1: u32, a2: u32, a3: u32) -> v128 {
940-
i32x4(a0 as i32, a1 as i32, a2 as i32, a3 as i32)
920+
simd::u32x4(a0, a1, a2, a3).v128()
941921
}
942922

943923
/// Materializes a SIMD value from the provided operands.
@@ -951,7 +931,7 @@ pub const fn u32x4(a0: u32, a1: u32, a2: u32, a3: u32) -> v128 {
951931
#[stable(feature = "wasm_simd", since = "1.54.0")]
952932
#[rustc_const_stable(feature = "wasm_simd", since = "1.54.0")]
953933
pub const fn i64x2(a0: i64, a1: i64) -> v128 {
954-
v128(a0 as i32, (a0 >> 32) as i32, a1 as i32, (a1 >> 32) as i32)
934+
simd::i64x2(a0, a1).v128()
955935
}
956936

957937
/// Materializes a SIMD value from the provided operands.
@@ -964,7 +944,7 @@ pub const fn i64x2(a0: i64, a1: i64) -> v128 {
964944
#[stable(feature = "wasm_simd", since = "1.54.0")]
965945
#[rustc_const_stable(feature = "wasm_simd", since = "1.54.0")]
966946
pub const fn u64x2(a0: u64, a1: u64) -> v128 {
967-
i64x2(a0 as i64, a1 as i64)
947+
simd::u64x2(a0, a1).v128()
968948
}
969949

970950
/// Materializes a SIMD value from the provided operands.
@@ -976,7 +956,7 @@ pub const fn u64x2(a0: u64, a1: u64) -> v128 {
976956
#[cfg_attr(test, assert_instr(v128.const, a0 = 0.0, a1 = 1.0, a2 = 2.0, a3 = 3.0))]
977957
#[doc(alias("v128.const"))]
978958
#[stable(feature = "wasm_simd", since = "1.54.0")]
979-
#[rustc_const_unstable(feature = "wasm_simd_const", issue = "72447")]
959+
#[rustc_const_stable(feature = "wasm_simd_const", since = "1.56.0")]
980960
pub const fn f32x4(a0: f32, a1: f32, a2: f32, a3: f32) -> v128 {
981961
simd::f32x4(a0, a1, a2, a3).v128()
982962
}
@@ -990,7 +970,7 @@ pub const fn f32x4(a0: f32, a1: f32, a2: f32, a3: f32) -> v128 {
990970
#[cfg_attr(test, assert_instr(v128.const, a0 = 0.0, a1 = 1.0))]
991971
#[doc(alias("v128.const"))]
992972
#[stable(feature = "wasm_simd", since = "1.54.0")]
993-
#[rustc_const_unstable(feature = "wasm_simd_const", issue = "72447")]
973+
#[rustc_const_stable(feature = "wasm_simd_const", since = "1.56.0")]
994974
pub const fn f64x2(a0: f64, a1: f64) -> v128 {
995975
simd::f64x2(a0, a1).v128()
996976
}

0 commit comments

Comments
 (0)