Skip to content

Commit 5d9e007

Browse files
committed
Remove workarounds for rust-lang/rust#60637
1 parent 7738477 commit 5d9e007

File tree

4 files changed

+70
-100
lines changed

4 files changed

+70
-100
lines changed

crates/core_arch/src/arm_shared/neon/generated.rs

+44-44
Original file line numberDiff line numberDiff line change
@@ -10594,10 +10594,10 @@ pub fn vdupq_n_f16(a: f16) -> float16x8_t {
1059410594
#[inline]
1059510595
#[target_feature(enable = "neon")]
1059610596
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10597-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.32"))]
10597+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1059810598
#[cfg_attr(
1059910599
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10600-
assert_instr(dup)
10600+
assert_instr(nop)
1060110601
)]
1060210602
#[cfg_attr(
1060310603
not(target_arch = "arm"),
@@ -10615,10 +10615,10 @@ pub fn vdup_n_f32(value: f32) -> float32x2_t {
1061510615
#[inline]
1061610616
#[target_feature(enable = "neon")]
1061710617
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10618-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.16"))]
10618+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1061910619
#[cfg_attr(
1062010620
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10621-
assert_instr(dup)
10621+
assert_instr(nop)
1062210622
)]
1062310623
#[cfg_attr(
1062410624
not(target_arch = "arm"),
@@ -10636,10 +10636,10 @@ pub fn vdup_n_p16(value: p16) -> poly16x4_t {
1063610636
#[inline]
1063710637
#[target_feature(enable = "neon")]
1063810638
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10639-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.8"))]
10639+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1064010640
#[cfg_attr(
1064110641
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10642-
assert_instr(dup)
10642+
assert_instr(nop)
1064310643
)]
1064410644
#[cfg_attr(
1064510645
not(target_arch = "arm"),
@@ -10657,10 +10657,10 @@ pub fn vdup_n_p8(value: p8) -> poly8x8_t {
1065710657
#[inline]
1065810658
#[target_feature(enable = "neon")]
1065910659
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10660-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.16"))]
10660+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1066110661
#[cfg_attr(
1066210662
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10663-
assert_instr(dup)
10663+
assert_instr(nop)
1066410664
)]
1066510665
#[cfg_attr(
1066610666
not(target_arch = "arm"),
@@ -10678,10 +10678,10 @@ pub fn vdup_n_s16(value: i16) -> int16x4_t {
1067810678
#[inline]
1067910679
#[target_feature(enable = "neon")]
1068010680
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10681-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.32"))]
10681+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1068210682
#[cfg_attr(
1068310683
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10684-
assert_instr(dup)
10684+
assert_instr(nop)
1068510685
)]
1068610686
#[cfg_attr(
1068710687
not(target_arch = "arm"),
@@ -10699,10 +10699,10 @@ pub fn vdup_n_s32(value: i32) -> int32x2_t {
1069910699
#[inline]
1070010700
#[target_feature(enable = "neon")]
1070110701
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10702-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vmov"))]
10702+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1070310703
#[cfg_attr(
1070410704
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10705-
assert_instr(fmov)
10705+
assert_instr(nop)
1070610706
)]
1070710707
#[cfg_attr(
1070810708
not(target_arch = "arm"),
@@ -10720,10 +10720,10 @@ pub fn vdup_n_s64(value: i64) -> int64x1_t {
1072010720
#[inline]
1072110721
#[target_feature(enable = "neon")]
1072210722
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10723-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.8"))]
10723+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1072410724
#[cfg_attr(
1072510725
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10726-
assert_instr(dup)
10726+
assert_instr(nop)
1072710727
)]
1072810728
#[cfg_attr(
1072910729
not(target_arch = "arm"),
@@ -10741,10 +10741,10 @@ pub fn vdup_n_s8(value: i8) -> int8x8_t {
1074110741
#[inline]
1074210742
#[target_feature(enable = "neon")]
1074310743
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10744-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.16"))]
10744+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1074510745
#[cfg_attr(
1074610746
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10747-
assert_instr(dup)
10747+
assert_instr(nop)
1074810748
)]
1074910749
#[cfg_attr(
1075010750
not(target_arch = "arm"),
@@ -10762,10 +10762,10 @@ pub fn vdup_n_u16(value: u16) -> uint16x4_t {
1076210762
#[inline]
1076310763
#[target_feature(enable = "neon")]
1076410764
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10765-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.32"))]
10765+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1076610766
#[cfg_attr(
1076710767
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10768-
assert_instr(dup)
10768+
assert_instr(nop)
1076910769
)]
1077010770
#[cfg_attr(
1077110771
not(target_arch = "arm"),
@@ -10783,10 +10783,10 @@ pub fn vdup_n_u32(value: u32) -> uint32x2_t {
1078310783
#[inline]
1078410784
#[target_feature(enable = "neon")]
1078510785
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10786-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vmov"))]
10786+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1078710787
#[cfg_attr(
1078810788
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10789-
assert_instr(fmov)
10789+
assert_instr(nop)
1079010790
)]
1079110791
#[cfg_attr(
1079210792
not(target_arch = "arm"),
@@ -10804,10 +10804,10 @@ pub fn vdup_n_u64(value: u64) -> uint64x1_t {
1080410804
#[inline]
1080510805
#[target_feature(enable = "neon")]
1080610806
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
10807-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.8"))]
10807+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
1080810808
#[cfg_attr(
1080910809
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
10810-
assert_instr(dup)
10810+
assert_instr(nop)
1081110811
)]
1081210812
#[cfg_attr(
1081310813
not(target_arch = "arm"),
@@ -31909,10 +31909,10 @@ pub fn vmovq_n_f16(a: f16) -> float16x8_t {
3190931909
#[inline]
3191031910
#[target_feature(enable = "neon")]
3191131911
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
31912-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.32"))]
31912+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3191331913
#[cfg_attr(
3191431914
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
31915-
assert_instr(dup)
31915+
assert_instr(nop)
3191631916
)]
3191731917
#[cfg_attr(
3191831918
not(target_arch = "arm"),
@@ -31930,10 +31930,10 @@ pub fn vmov_n_f32(value: f32) -> float32x2_t {
3193031930
#[inline]
3193131931
#[target_feature(enable = "neon")]
3193231932
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
31933-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.16"))]
31933+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3193431934
#[cfg_attr(
3193531935
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
31936-
assert_instr(dup)
31936+
assert_instr(nop)
3193731937
)]
3193831938
#[cfg_attr(
3193931939
not(target_arch = "arm"),
@@ -31951,10 +31951,10 @@ pub fn vmov_n_p16(value: p16) -> poly16x4_t {
3195131951
#[inline]
3195231952
#[target_feature(enable = "neon")]
3195331953
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
31954-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.8"))]
31954+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3195531955
#[cfg_attr(
3195631956
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
31957-
assert_instr(dup)
31957+
assert_instr(nop)
3195831958
)]
3195931959
#[cfg_attr(
3196031960
not(target_arch = "arm"),
@@ -31972,10 +31972,10 @@ pub fn vmov_n_p8(value: p8) -> poly8x8_t {
3197231972
#[inline]
3197331973
#[target_feature(enable = "neon")]
3197431974
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
31975-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.16"))]
31975+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3197631976
#[cfg_attr(
3197731977
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
31978-
assert_instr(dup)
31978+
assert_instr(nop)
3197931979
)]
3198031980
#[cfg_attr(
3198131981
not(target_arch = "arm"),
@@ -31993,10 +31993,10 @@ pub fn vmov_n_s16(value: i16) -> int16x4_t {
3199331993
#[inline]
3199431994
#[target_feature(enable = "neon")]
3199531995
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
31996-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.32"))]
31996+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3199731997
#[cfg_attr(
3199831998
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
31999-
assert_instr(dup)
31999+
assert_instr(nop)
3200032000
)]
3200132001
#[cfg_attr(
3200232002
not(target_arch = "arm"),
@@ -32014,10 +32014,10 @@ pub fn vmov_n_s32(value: i32) -> int32x2_t {
3201432014
#[inline]
3201532015
#[target_feature(enable = "neon")]
3201632016
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
32017-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vmov"))]
32017+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3201832018
#[cfg_attr(
3201932019
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
32020-
assert_instr(fmov)
32020+
assert_instr(nop)
3202132021
)]
3202232022
#[cfg_attr(
3202332023
not(target_arch = "arm"),
@@ -32035,10 +32035,10 @@ pub fn vmov_n_s64(value: i64) -> int64x1_t {
3203532035
#[inline]
3203632036
#[target_feature(enable = "neon")]
3203732037
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
32038-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.8"))]
32038+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3203932039
#[cfg_attr(
3204032040
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
32041-
assert_instr(dup)
32041+
assert_instr(nop)
3204232042
)]
3204332043
#[cfg_attr(
3204432044
not(target_arch = "arm"),
@@ -32056,10 +32056,10 @@ pub fn vmov_n_s8(value: i8) -> int8x8_t {
3205632056
#[inline]
3205732057
#[target_feature(enable = "neon")]
3205832058
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
32059-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.16"))]
32059+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3206032060
#[cfg_attr(
3206132061
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
32062-
assert_instr(dup)
32062+
assert_instr(nop)
3206332063
)]
3206432064
#[cfg_attr(
3206532065
not(target_arch = "arm"),
@@ -32077,10 +32077,10 @@ pub fn vmov_n_u16(value: u16) -> uint16x4_t {
3207732077
#[inline]
3207832078
#[target_feature(enable = "neon")]
3207932079
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
32080-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.32"))]
32080+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3208132081
#[cfg_attr(
3208232082
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
32083-
assert_instr(dup)
32083+
assert_instr(nop)
3208432084
)]
3208532085
#[cfg_attr(
3208632086
not(target_arch = "arm"),
@@ -32098,10 +32098,10 @@ pub fn vmov_n_u32(value: u32) -> uint32x2_t {
3209832098
#[inline]
3209932099
#[target_feature(enable = "neon")]
3210032100
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
32101-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vmov"))]
32101+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3210232102
#[cfg_attr(
3210332103
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
32104-
assert_instr(fmov)
32104+
assert_instr(nop)
3210532105
)]
3210632106
#[cfg_attr(
3210732107
not(target_arch = "arm"),
@@ -32119,10 +32119,10 @@ pub fn vmov_n_u64(value: u64) -> uint64x1_t {
3211932119
#[inline]
3212032120
#[target_feature(enable = "neon")]
3212132121
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
32122-
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("vdup.8"))]
32122+
#[cfg_attr(all(test, target_arch = "arm"), assert_instr("nop"))]
3212332123
#[cfg_attr(
3212432124
all(test, any(target_arch = "aarch64", target_arch = "arm64ec")),
32125-
assert_instr(dup)
32125+
assert_instr(nop)
3212632126
)]
3212732127
#[cfg_attr(
3212832128
not(target_arch = "arm"),

crates/core_arch/src/macros.rs

+1-14
Original file line numberDiff line numberDiff line change
@@ -94,25 +94,15 @@ macro_rules! types {
9494
/// so use this internal helper for it instead.
9595
#[inline(always)]
9696
$v fn splat(value: $elem_type) -> $name {
97-
#[derive(Copy, Clone)]
98-
#[repr(simd)]
99-
struct JustOne([$elem_type; 1]);
100-
let one = JustOne([value]);
101-
// SAFETY: 0 is always in-bounds because we're shuffling
102-
// a simd type with exactly one element.
103-
unsafe { simd_shuffle!(one, one, [0; $len]) }
97+
$name([value; $len])
10498
}
10599

106100
/// Returns an array reference containing the entire SIMD vector.
107101
$v const fn as_array(&self) -> &[$elem_type; $len] {
108102
// SAFETY: this type is just an overaligned `[T; N]` with
109103
// potential padding at the end, so pointer casting to a
110104
// `&[T; N]` is safe.
111-
//
112-
// NOTE: This deliberately doesn't just use `&self.0` because it may soon be banned
113-
// see https://github.com/rust-lang/compiler-team/issues/838
114105
unsafe { &*(self as *const Self as *const [$elem_type; $len]) }
115-
116106
}
117107

118108
/// Returns a mutable array reference containing the entire SIMD vector.
@@ -121,9 +111,6 @@ macro_rules! types {
121111
// SAFETY: this type is just an overaligned `[T; N]` with
122112
// potential padding at the end, so pointer casting to a
123113
// `&mut [T; N]` is safe.
124-
//
125-
// NOTE: This deliberately doesn't just use `&mut self.0` because it may soon be banned
126-
// see https://github.com/rust-lang/compiler-team/issues/838
127114
unsafe { &mut *(self as *mut Self as *mut [$elem_type; $len]) }
128115
}
129116
}

crates/core_arch/src/simd.rs

+3-20
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,12 @@ macro_rules! simd_ty {
2121
pub(crate) const fn from_array(elements: [$elem_type; $len]) -> Self {
2222
$id(elements)
2323
}
24-
// FIXME: Workaround rust@60637
24+
2525
#[inline(always)]
2626
pub(crate) fn splat(value: $elem_type) -> Self {
27-
#[derive(Copy, Clone)]
28-
#[repr(simd)]
29-
struct JustOne([$elem_type; 1]);
30-
let one = JustOne([value]);
31-
// SAFETY: 0 is always in-bounds because we're shuffling
32-
// a simd type with exactly one element.
33-
unsafe { simd_shuffle!(one, one, [0; $len]) }
27+
$id([value; $len])
3428
}
3529

36-
/// Extract the element at position `index`.
37-
/// `index` is not a constant so this is not efficient!
38-
/// Use for testing only.
39-
// FIXME: Workaround rust@60637
4030
#[inline(always)]
4131
pub(crate) fn extract(&self, index: usize) -> $elem_type {
4232
self.as_array()[index]
@@ -87,16 +77,9 @@ macro_rules! simd_m_ty {
8777
$id([$(Self::bool_to_internal($param_name)),*])
8878
}
8979

90-
// FIXME: Workaround rust@60637
9180
#[inline(always)]
9281
pub(crate) fn splat(value: bool) -> Self {
93-
#[derive(Copy, Clone)]
94-
#[repr(simd)]
95-
struct JustOne([$elem_type; 1]);
96-
let one = JustOne([Self::bool_to_internal(value)]);
97-
// SAFETY: 0 is always in-bounds because we're shuffling
98-
// a simd type with exactly one element.
99-
unsafe { simd_shuffle!(one, one, [0; $len]) }
82+
$id([Self::bool_to_internal(value); $len])
10083
}
10184

10285
#[inline]

0 commit comments

Comments
 (0)