Skip to content

Commit e715c93

Browse files
gnzlbgalexcrichton
authored andcommitted
make powerpc vector types newtypes (#453)
* make powerpc vector types newtypes * fix test
1 parent b8b1c5f commit e715c93

File tree

2 files changed

+545
-22
lines changed

2 files changed

+545
-22
lines changed

coresimd/powerpc/altivec.rs

+339-12
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,342 @@ use coresimd::simd_llvm::*;
1818
#[cfg(test)]
1919
use stdsimd_test::assert_instr;
2020

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+
);
32357

33358
mod sealed {
34359

@@ -345,7 +670,9 @@ mod tests {
345670
unsafe fn vec_add_i32x4_i32x4() {
346671
let x = i32x4::new(1, 2, 3, 4);
347672
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();
348675
let z = vec_add(x, y);
349-
assert_eq!(z, i32x4::splat(5));
676+
assert_eq!(i32x4::splat(5), z.into_bits());
350677
}
351678
}

0 commit comments

Comments
 (0)