1 | macro_rules! number { |
2 | { 1 } => { "one" }; |
3 | { 2 } => { "two" }; |
4 | { 4 } => { "four" }; |
5 | { 8 } => { "eight" }; |
6 | { $x:literal } => { stringify!($x) }; |
7 | } |
8 | |
9 | macro_rules! plural { |
10 | { 1 } => { "" }; |
11 | { $x:literal } => { "s" }; |
12 | } |
13 | |
14 | macro_rules! alias { |
15 | { |
16 | $( |
17 | $element_ty:ty = { |
18 | $($alias:ident $num_elements:tt)* |
19 | } |
20 | )* |
21 | } => { |
22 | $( |
23 | $( |
24 | #[doc = concat!("A SIMD vector with " , number!($num_elements), " element" , plural!($num_elements), " of type [`" , stringify!($element_ty), "`]." )] |
25 | #[allow(non_camel_case_types)] |
26 | pub type $alias = $crate::simd::Simd<$element_ty, $num_elements>; |
27 | )* |
28 | )* |
29 | } |
30 | } |
31 | |
32 | macro_rules! mask_alias { |
33 | { |
34 | $( |
35 | $element_ty:ty : $size:literal = { |
36 | $($alias:ident $num_elements:tt)* |
37 | } |
38 | )* |
39 | } => { |
40 | $( |
41 | $( |
42 | #[doc = concat!("A SIMD mask with " , number!($num_elements), " element" , plural!($num_elements), " for vectors with " , $size, " element types." )] |
43 | /// |
44 | #[doc = concat!( |
45 | "The layout of this type is unspecified, and may change between platforms and/or Rust versions, and code should not assume that it is equivalent to `[" , |
46 | stringify!($element_ty), "; " , $num_elements, "]`." |
47 | )] |
48 | #[allow(non_camel_case_types)] |
49 | pub type $alias = $crate::simd::Mask<$element_ty, $num_elements>; |
50 | )* |
51 | )* |
52 | } |
53 | } |
54 | |
55 | alias! { |
56 | i8 = { |
57 | i8x1 1 |
58 | i8x2 2 |
59 | i8x4 4 |
60 | i8x8 8 |
61 | i8x16 16 |
62 | i8x32 32 |
63 | i8x64 64 |
64 | } |
65 | |
66 | i16 = { |
67 | i16x1 1 |
68 | i16x2 2 |
69 | i16x4 4 |
70 | i16x8 8 |
71 | i16x16 16 |
72 | i16x32 32 |
73 | i16x64 64 |
74 | } |
75 | |
76 | i32 = { |
77 | i32x1 1 |
78 | i32x2 2 |
79 | i32x4 4 |
80 | i32x8 8 |
81 | i32x16 16 |
82 | i32x32 32 |
83 | i32x64 64 |
84 | } |
85 | |
86 | i64 = { |
87 | i64x1 1 |
88 | i64x2 2 |
89 | i64x4 4 |
90 | i64x8 8 |
91 | i64x16 16 |
92 | i64x32 32 |
93 | i64x64 64 |
94 | } |
95 | |
96 | isize = { |
97 | isizex1 1 |
98 | isizex2 2 |
99 | isizex4 4 |
100 | isizex8 8 |
101 | isizex16 16 |
102 | isizex32 32 |
103 | isizex64 64 |
104 | } |
105 | |
106 | u8 = { |
107 | u8x1 1 |
108 | u8x2 2 |
109 | u8x4 4 |
110 | u8x8 8 |
111 | u8x16 16 |
112 | u8x32 32 |
113 | u8x64 64 |
114 | } |
115 | |
116 | u16 = { |
117 | u16x1 1 |
118 | u16x2 2 |
119 | u16x4 4 |
120 | u16x8 8 |
121 | u16x16 16 |
122 | u16x32 32 |
123 | u16x64 64 |
124 | } |
125 | |
126 | u32 = { |
127 | u32x1 1 |
128 | u32x2 2 |
129 | u32x4 4 |
130 | u32x8 8 |
131 | u32x16 16 |
132 | u32x32 32 |
133 | u32x64 64 |
134 | } |
135 | |
136 | u64 = { |
137 | u64x1 1 |
138 | u64x2 2 |
139 | u64x4 4 |
140 | u64x8 8 |
141 | u64x16 16 |
142 | u64x32 32 |
143 | u64x64 64 |
144 | } |
145 | |
146 | usize = { |
147 | usizex1 1 |
148 | usizex2 2 |
149 | usizex4 4 |
150 | usizex8 8 |
151 | usizex16 16 |
152 | usizex32 32 |
153 | usizex64 64 |
154 | } |
155 | |
156 | f32 = { |
157 | f32x1 1 |
158 | f32x2 2 |
159 | f32x4 4 |
160 | f32x8 8 |
161 | f32x16 16 |
162 | f32x32 32 |
163 | f32x64 64 |
164 | } |
165 | |
166 | f64 = { |
167 | f64x1 1 |
168 | f64x2 2 |
169 | f64x4 4 |
170 | f64x8 8 |
171 | f64x16 16 |
172 | f64x32 32 |
173 | f64x64 64 |
174 | } |
175 | } |
176 | |
177 | mask_alias! { |
178 | i8 : "8-bit" = { |
179 | mask8x1 1 |
180 | mask8x2 2 |
181 | mask8x4 4 |
182 | mask8x8 8 |
183 | mask8x16 16 |
184 | mask8x32 32 |
185 | mask8x64 64 |
186 | } |
187 | |
188 | i16 : "16-bit" = { |
189 | mask16x1 1 |
190 | mask16x2 2 |
191 | mask16x4 4 |
192 | mask16x8 8 |
193 | mask16x16 16 |
194 | mask16x32 32 |
195 | mask16x64 64 |
196 | } |
197 | |
198 | i32 : "32-bit" = { |
199 | mask32x1 1 |
200 | mask32x2 2 |
201 | mask32x4 4 |
202 | mask32x8 8 |
203 | mask32x16 16 |
204 | mask32x32 32 |
205 | mask32x64 64 |
206 | } |
207 | |
208 | i64 : "64-bit" = { |
209 | mask64x1 1 |
210 | mask64x2 2 |
211 | mask64x4 4 |
212 | mask64x8 8 |
213 | mask64x16 16 |
214 | mask64x32 32 |
215 | mask64x64 64 |
216 | } |
217 | |
218 | isize : "pointer-sized" = { |
219 | masksizex1 1 |
220 | masksizex2 2 |
221 | masksizex4 4 |
222 | masksizex8 8 |
223 | masksizex16 16 |
224 | masksizex32 32 |
225 | masksizex64 64 |
226 | } |
227 | } |
228 | |