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 |
Definitions
- number
- plural
- alias
- mask_alias
- i8x1
- i8x2
- i8x4
- i8x8
- i8x16
- i8x32
- i8x64
- i16x1
- i16x2
- i16x4
- i16x8
- i16x16
- i16x32
- i16x64
- i32x1
- i32x2
- i32x4
- i32x8
- i32x16
- i32x32
- i32x64
- i64x1
- i64x2
- i64x4
- i64x8
- i64x16
- i64x32
- i64x64
- isizex1
- isizex2
- isizex4
- isizex8
- isizex16
- isizex32
- isizex64
- u8x1
- u8x2
- u8x4
- u8x8
- u8x16
- u8x32
- u8x64
- u16x1
- u16x2
- u16x4
- u16x8
- u16x16
- u16x32
- u16x64
- u32x1
- u32x2
- u32x4
- u32x8
- u32x16
- u32x32
- u32x64
- u64x1
- u64x2
- u64x4
- u64x8
- u64x16
- u64x32
- u64x64
- usizex1
- usizex2
- usizex4
- usizex8
- usizex16
- usizex32
- usizex64
- f32x1
- f32x2
- f32x4
- f32x8
- f32x16
- f32x32
- f32x64
- f64x1
- f64x2
- f64x4
- f64x8
- f64x16
- f64x32
- f64x64
- mask8x1
- mask8x2
- mask8x4
- mask8x8
- mask8x16
- mask8x32
- mask8x64
- mask16x1
- mask16x2
- mask16x4
- mask16x8
- mask16x16
- mask16x32
- mask16x64
- mask32x1
- mask32x2
- mask32x4
- mask32x8
- mask32x16
- mask32x32
- mask32x64
- mask64x1
- mask64x2
- mask64x4
- mask64x8
- mask64x16
- mask64x32
- mask64x64
- masksizex1
- masksizex2
- masksizex4
- masksizex8
- masksizex16
- masksizex32
Learn Rust with the experts
Find out more