| @@ -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 |
} |