Rollup merge of #130268 - RalfJung:simd-shuffle-idx-vector, r=compile… · qinheping/verify-rust-std@96b5b7c (original) (raw)

Original file line number Diff line number Diff line change
@@ -85,7 +85,7 @@ pub trait Swizzle {
85 85 LaneCount<N>: SupportedLaneCount,
86 86 LaneCount<M>: SupportedLaneCount,
87 87 {
88 -// Safety: `vector` is a vector, and the index is a const array of u32.
88 +// Safety: `vector` is a vector, and the index is a const vector of u32.
89 89 unsafe {
90 90 core::intrinsics::simd::simd_shuffle(
91 91 vector,
@@ -103,7 +103,11 @@ pub trait Swizzle {
103 103 output[i] = index as u32;
104 104 i += 1;
105 105 }
106 - output
106 +
107 +// The index list needs to be returned as a vector.
108 +#[repr(simd)]
109 +struct SimdShuffleIdx<const LEN: usize>([u32; LEN]);
110 +SimdShuffleIdx(output)
107 111 },
108 112 )
109 113 }
@@ -121,7 +125,7 @@ pub trait Swizzle {
121 125 LaneCount<N>: SupportedLaneCount,
122 126 LaneCount<M>: SupportedLaneCount,
123 127 {
124 -// Safety: `first` and `second` are vectors, and the index is a const array of u32.
128 +// Safety: `first` and `second` are vectors, and the index is a const vector of u32.
125 129 unsafe {
126 130 core::intrinsics::simd::simd_shuffle(
127 131 first,
@@ -139,7 +143,11 @@ pub trait Swizzle {
139 143 output[i] = index as u32;
140 144 i += 1;
141 145 }
142 - output
146 +
147 +// The index list needs to be returned as a vector.
148 +#[repr(simd)]
149 +struct SimdShuffleIdx<const LEN: usize>([u32; LEN]);
150 +SimdShuffleIdx(output)
143 151 },
144 152 )
145 153 }