@@ -18,17 +18,342 @@ use coresimd::simd_llvm::*;
18
18
#[ cfg( test) ]
19
19
use stdsimd_test:: assert_instr;
20
20
21
- pub type vector_signed_char = i8x16 ;
22
- pub type vector_unsigned_char = u8x16 ;
23
- pub type vector_bool_char = m8x16 ;
24
- pub type vector_signed_short = i16x8 ;
25
- pub type vector_unsigned_short = u16x8 ;
26
- pub type vector_bool_short = m16x8 ;
27
- // pub type vector_pixel = ???;
28
- pub type vector_signed_int = i32x4 ;
29
- pub type vector_unsigned_int = u32x4 ;
30
- pub type vector_bool_int = m32x4 ;
31
- pub type vector_float = f32x4 ;
21
+ types ! {
22
+ /// PowerPC-specific 128-bit wide vector of sixteen packed `i8`
23
+ pub struct vector_signed_char( i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 ,
24
+ i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 ) ;
25
+ /// PowerPC-specific 128-bit wide vector of sixteen packed `u8`
26
+ pub struct vector_unsigned_char( u8 , u8 , u8 , u8 , u8 , u8 , u8 , u8 ,
27
+ u8 , u8 , u8 , u8 , u8 , u8 , u8 , u8 ) ;
28
+
29
+ /// PowerPC-specific 128-bit wide vector mask of sixteen packed elements
30
+ pub struct vector_bool_char( i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 ,
31
+ i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 ) ;
32
+ /// PowerPC-specific 128-bit wide vector of eight packed `i16`
33
+ pub struct vector_signed_short( i16 , i16 , i16 , i16 , i16 , i16 , i16 , i16 ) ;
34
+ /// PowerPC-specific 128-bit wide vector of eight packed `u16`
35
+ pub struct vector_unsigned_short( u16 , u16 , u16 , u16 , u16 , u16 , u16 , u16 ) ;
36
+ /// PowerPC-specific 128-bit wide vector mask of eight packed elements
37
+ pub struct vector_bool_short( i16 , i16 , i16 , i16 , i16 , i16 , i16 , i16 ) ;
38
+ // pub struct vector_pixel(???);
39
+ /// PowerPC-specific 128-bit wide vector of four packed `i32`
40
+ pub struct vector_signed_int( i32 , i32 , i32 , i32 ) ;
41
+ /// PowerPC-specific 128-bit wide vector of four packed `u32`
42
+ pub struct vector_unsigned_int( u32 , u32 , u32 , u32 ) ;
43
+ /// PowerPC-specific 128-bit wide vector mask of four packed elements
44
+ pub struct vector_bool_int( i32 , i32 , i32 , i32 ) ;
45
+ /// PowerPC-specific 128-bit wide vector of four packed `f32`
46
+ pub struct vector_float( f32 , f32 , f32 , f32 ) ;
47
+ }
48
+
49
+ impl_from_bits_ ! (
50
+ vector_signed_char: u64x2,
51
+ i64x2,
52
+ f64x2,
53
+ m64x2,
54
+ u32x4,
55
+ i32x4,
56
+ f32x4,
57
+ m32x4,
58
+ u16x8,
59
+ i16x8,
60
+ m16x8,
61
+ u8x16,
62
+ i8x16,
63
+ m8x16,
64
+ vector_unsigned_char,
65
+ vector_bool_char,
66
+ vector_signed_short,
67
+ vector_unsigned_short,
68
+ vector_bool_short,
69
+ vector_signed_int,
70
+ vector_unsigned_int,
71
+ vector_float,
72
+ vector_bool_int
73
+ ) ;
74
+ impl_from_bits_ ! (
75
+ i8x16:
76
+ vector_signed_char,
77
+ vector_unsigned_char,
78
+ vector_bool_char,
79
+ vector_signed_short,
80
+ vector_unsigned_short,
81
+ vector_bool_short,
82
+ vector_signed_int,
83
+ vector_unsigned_int,
84
+ vector_float,
85
+ vector_bool_int
86
+ ) ;
87
+
88
+ impl_from_bits_ ! (
89
+ vector_unsigned_char: u64x2,
90
+ i64x2,
91
+ f64x2,
92
+ m64x2,
93
+ u32x4,
94
+ i32x4,
95
+ f32x4,
96
+ m32x4,
97
+ u16x8,
98
+ i16x8,
99
+ m16x8,
100
+ u8x16,
101
+ i8x16,
102
+ m8x16,
103
+ vector_signed_char,
104
+ vector_bool_char,
105
+ vector_signed_short,
106
+ vector_unsigned_short,
107
+ vector_bool_short,
108
+ vector_signed_int,
109
+ vector_unsigned_int,
110
+ vector_float,
111
+ vector_bool_int
112
+ ) ;
113
+ impl_from_bits_ ! (
114
+ u8x16:
115
+ vector_signed_char,
116
+ vector_unsigned_char,
117
+ vector_bool_char,
118
+ vector_signed_short,
119
+ vector_unsigned_short,
120
+ vector_bool_short,
121
+ vector_signed_int,
122
+ vector_unsigned_int,
123
+ vector_float,
124
+ vector_bool_int
125
+ ) ;
126
+
127
+ impl_from_bits_ ! (
128
+ vector_bool_char: m64x2,
129
+ m32x4,
130
+ m16x8,
131
+ m8x16,
132
+ vector_bool_short,
133
+ vector_bool_int
134
+ ) ;
135
+ impl_from_bits_ ! (
136
+ m8x16: vector_bool_char,
137
+ vector_bool_short,
138
+ vector_bool_int
139
+ ) ;
140
+
141
+ impl_from_bits_ ! (
142
+ vector_signed_short: u64x2,
143
+ i64x2,
144
+ f64x2,
145
+ m64x2,
146
+ u32x4,
147
+ i32x4,
148
+ f32x4,
149
+ m32x4,
150
+ u16x8,
151
+ i16x8,
152
+ m16x8,
153
+ u8x16,
154
+ i8x16,
155
+ m8x16,
156
+ vector_signed_char,
157
+ vector_bool_char,
158
+ vector_unsigned_short,
159
+ vector_bool_short,
160
+ vector_signed_int,
161
+ vector_unsigned_int,
162
+ vector_float,
163
+ vector_bool_int
164
+ ) ;
165
+ impl_from_bits_ ! (
166
+ i16x8:
167
+ vector_signed_char,
168
+ vector_unsigned_char,
169
+ vector_bool_char,
170
+ vector_signed_short,
171
+ vector_unsigned_short,
172
+ vector_bool_short,
173
+ vector_signed_int,
174
+ vector_unsigned_int,
175
+ vector_float,
176
+ vector_bool_int
177
+ ) ;
178
+
179
+ impl_from_bits_ ! (
180
+ vector_unsigned_short: u64x2,
181
+ i64x2,
182
+ f64x2,
183
+ m64x2,
184
+ u32x4,
185
+ i32x4,
186
+ f32x4,
187
+ m32x4,
188
+ u16x8,
189
+ i16x8,
190
+ m16x8,
191
+ u8x16,
192
+ i8x16,
193
+ m8x16,
194
+ vector_signed_char,
195
+ vector_bool_char,
196
+ vector_signed_short,
197
+ vector_bool_short,
198
+ vector_signed_int,
199
+ vector_unsigned_int,
200
+ vector_float,
201
+ vector_bool_int
202
+ ) ;
203
+ impl_from_bits_ ! (
204
+ u16x8:
205
+ vector_signed_char,
206
+ vector_unsigned_char,
207
+ vector_bool_char,
208
+ vector_signed_short,
209
+ vector_unsigned_short,
210
+ vector_bool_short,
211
+ vector_signed_int,
212
+ vector_unsigned_int,
213
+ vector_float,
214
+ vector_bool_int
215
+ ) ;
216
+
217
+ impl_from_bits_ ! (
218
+ vector_bool_short: m64x2,
219
+ m32x4,
220
+ m16x8,
221
+ m8x16,
222
+ vector_bool_int
223
+ ) ;
224
+ impl_from_bits_ ! ( m16x8: vector_bool_short, vector_bool_int) ;
225
+
226
+ impl_from_bits_ ! (
227
+ vector_signed_int: u64x2,
228
+ i64x2,
229
+ f64x2,
230
+ m64x2,
231
+ u32x4,
232
+ i32x4,
233
+ f32x4,
234
+ m32x4,
235
+ u16x8,
236
+ i16x8,
237
+ m16x8,
238
+ u8x16,
239
+ i8x16,
240
+ m8x16,
241
+ vector_signed_char,
242
+ vector_bool_char,
243
+ vector_signed_short,
244
+ vector_unsigned_short,
245
+ vector_bool_short,
246
+ vector_unsigned_int,
247
+ vector_float,
248
+ vector_bool_int
249
+ ) ;
250
+ impl_from_bits_ ! (
251
+ i32x4:
252
+ vector_signed_char,
253
+ vector_unsigned_char,
254
+ vector_bool_char,
255
+ vector_signed_short,
256
+ vector_unsigned_short,
257
+ vector_bool_short,
258
+ vector_signed_int,
259
+ vector_unsigned_int,
260
+ vector_float,
261
+ vector_bool_int
262
+ ) ;
263
+
264
+ impl_from_bits_ ! (
265
+ vector_unsigned_int: u64x2,
266
+ i64x2,
267
+ f64x2,
268
+ m64x2,
269
+ u32x4,
270
+ i32x4,
271
+ f32x4,
272
+ m32x4,
273
+ u16x8,
274
+ i16x8,
275
+ m16x8,
276
+ u8x16,
277
+ i8x16,
278
+ m8x16,
279
+ vector_signed_char,
280
+ vector_bool_char,
281
+ vector_signed_short,
282
+ vector_unsigned_short,
283
+ vector_bool_short,
284
+ vector_signed_int,
285
+ vector_float,
286
+ vector_bool_int
287
+ ) ;
288
+ impl_from_bits_ ! (
289
+ u32x4:
290
+ vector_signed_char,
291
+ vector_unsigned_char,
292
+ vector_bool_char,
293
+ vector_signed_short,
294
+ vector_unsigned_short,
295
+ vector_bool_short,
296
+ vector_signed_int,
297
+ vector_unsigned_int,
298
+ vector_float,
299
+ vector_bool_int
300
+ ) ;
301
+
302
+ impl_from_bits_ ! (
303
+ vector_bool_int: u64x2,
304
+ i64x2,
305
+ f64x2,
306
+ m64x2,
307
+ u32x4,
308
+ i32x4,
309
+ f32x4,
310
+ m32x4,
311
+ u16x8,
312
+ i16x8,
313
+ m16x8,
314
+ u8x16,
315
+ i8x16,
316
+ m8x16
317
+ ) ;
318
+ impl_from_bits_ ! ( m32x4: vector_bool_int) ;
319
+
320
+ impl_from_bits_ ! (
321
+ vector_float: u64x2,
322
+ i64x2,
323
+ f64x2,
324
+ m64x2,
325
+ u32x4,
326
+ i32x4,
327
+ f32x4,
328
+ m32x4,
329
+ u16x8,
330
+ i16x8,
331
+ m16x8,
332
+ u8x16,
333
+ i8x16,
334
+ m8x16,
335
+ vector_signed_char,
336
+ vector_bool_char,
337
+ vector_signed_short,
338
+ vector_unsigned_short,
339
+ vector_bool_short,
340
+ vector_signed_int,
341
+ vector_unsigned_int,
342
+ vector_bool_int
343
+ ) ;
344
+ impl_from_bits_ ! (
345
+ f32x4:
346
+ vector_signed_char,
347
+ vector_unsigned_char,
348
+ vector_bool_char,
349
+ vector_signed_short,
350
+ vector_unsigned_short,
351
+ vector_bool_short,
352
+ vector_signed_int,
353
+ vector_unsigned_int,
354
+ vector_float,
355
+ vector_bool_int
356
+ ) ;
32
357
33
358
mod sealed {
34
359
@@ -345,7 +670,9 @@ mod tests {
345
670
unsafe fn vec_add_i32x4_i32x4 ( ) {
346
671
let x = i32x4:: new ( 1 , 2 , 3 , 4 ) ;
347
672
let y = i32x4:: new ( 4 , 3 , 2 , 1 ) ;
673
+ let x: vector_signed_int = x. into_bits ( ) ;
674
+ let y: vector_signed_int = y. into_bits ( ) ;
348
675
let z = vec_add ( x, y) ;
349
- assert_eq ! ( z , i32x4:: splat( 5 ) ) ;
676
+ assert_eq ! ( i32x4:: splat( 5 ) , z . into_bits ( ) ) ;
350
677
}
351
678
}
0 commit comments